A maneira mais rápida de copiar uma pasta que contém muitos arquivos via SSH


13

Qual é a melhor maneira de duplicar arquivos no servidor via ssh?

No meu caso: estou falando de duplicar a loja magento. (15000 arquivos ~ 50 MB)

cp -a source destination

Está demorando horas ... (no meu caso, o servidor tem 2,4 Xeon, 2 GB de RAM)

Respostas:


18

Uma palavra: rsync.

Observe que, se você estiver em um link lento ou o servidor estiver sobrecarregado, a ferramenta usada para copiar não será o gargalo e qualquer forma de cópia ficará lenta de qualquer maneira.

Isso deve fornecer o uso básico para copiar entre o computador local e o servidor remoto: http://oreilly.com/pub/h/38

Para copiar do computador local para um servidor remoto (é necessário substituir os caminhos, nome de usuário e endereço do host, é claro):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a arquivo
  • -v detalhado
  • -z comprimir
  • -e ssh "use um túnel SSH"

Para copiar na outra direção, alterne os caminhos (primeiro é de , segundo é para ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

Mas o rsync é útil mesmo para copiar coisas no mesmo servidor:

rsync -av /path-to/copy/from /path_to/copy/to

2
Observe que o @Piskvor deixou a -zopção de cópia local, uma vez que adiciona uma sobrecarga desnecessária. IMHO, você só deve usar -zao usar o rsync em um link de rede lento. Se copiar grandes quantidades de dados acima de 100Base-T, você pode ficar bem sem -z. Com uma conexão de rede rápida, o uso de compactação pode atrelar sua CPU e causar outros processos de fome.
tomlogic

@ tomlogic: Bom ponto - em outras palavras, não use -zpara copiar ou copiar LAN dentro de uma máquina; teste com e sem -zcópia na Internet (um ou outro pode ser mais rápido, dependendo de muitas coisas).
Piskvor saiu do prédio

1
Também deixaria de fora a compactação se você souber que seus arquivos já estão compactados, como sincronizar uma árvore de pastas cheia de JPEGs, pois não há nada a ganhar.
quebra de linha

Nota: -e sshagora é o padrão para hosts remotos, portanto, não é necessário passar a opção explicitamente.
Piskvor saiu do prédio 04/07/19

3

Outra palavra: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Para ofertas únicas, o scp é útil. Se houver muitos arquivos, o rsync é uma boa ideia. Se uma conexão cair, o rsync poderá continuar de onde parou.

Eu sabia que o rsync tinha compressão ( -z), e acabei de aprender que o scp também ( -C).


Bem, IIRC, ambos estão usando os algoritmos de compressão do SSH, pelo menos para operações de rede.
Piskvor saiu do prédio

0

Na sua configuração, o rsync provavelmente é suficiente ... mas, por exemplo, se houver muitos arquivos pequenos, pode ser mais rápido tar os arquivos primeiro do que transferi-los e depois via rsync. Isso ocorre porque a transferência das permissões do proprietário, de data e hora, é um pouco mais pesada que o próprio arquivo, se o arquivo for pequeno. O Tar mesclará todas essas informações em um arquivo e o rsync copiará blocos maiores.

Ou melhor ainda, se nenhuma segurança for necessária, use tar e nc:

No destino, prepare um daemon de recebimento, descompacte e descompacte:

nc -l -p 12345 | pigz -d | tar xvf - 

Na fonte, tar tudo, compactar em paralelo e enviá-lo para o destino:

tar cvf - ./ | pigz | nc host 12345
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.