Tar over SSH (Pipe Tar)
by z3n on May.05, 2009, under Linux Happyness, Tips & Hints
Problem:
Copy over 10 million files to a different server perserving the permissions, ownership, paths etc.
Solution:
tar -zcf – /path/to/local/dir | ssh remoteuser@remotehost.tld tar -C /path/to/remote/dir -zxf -
this will send a compressed (z parameter) stream to stdout (-) wich will be sent by ssh and uncompressed on the remote server. If you are on a local network you can supress the z parameter in order to keep it faster.
Many people would say that rsync is a better solution, however, rsync don’t work well with many files, specially million files. rsync tends to do a checksum of each file and time/date comparsions which slowdown the process and create lots of disk I/Os, in my case, it was impossible to rsync, the remote server loads were so high that it eventually got stuck and crashed. Tar wasn’t only faster but more effective, making the server able to serve pages while doing it.
Tar will also preserve the ownership and permissions of the files, just what you need to have an exact copy.
Sources:
Problema:
Copiar 10 milhões de arquivos para outro servidor, persevando os direitos, usuários, diretórios, etc.
Solução:
tar -zcf – /caminho/para/o/diretorio/local | ssh usuarioremoto@servidorremoto.ext tar -C /caminho/para/o/diretório/remoto -zxf -
Isto enviará um fluxo de dados compactados (parâmetro z) para o stdout (-) que irá ser enviado para o ssh e descompactado no servidor remoto. Se você estiver numa rede local não é necessário compactar os dados, então remova o parâmetro z de ambos os comandos.
Muitos podem dizer que o rsync é uma solução melhor, porém, ele não funciona bem com muitos arquivos, especialmente milhões deles, o rsync tende a fazer um checksum e comparar a data de cada arquivo, fazendo com que o processo seja muito mais lento, além de aumentar o número de E/S do disco. No meu caso, usando o rsync, foi impossível completar a operação, uma vez que, o servidor remoto ficou tão carregado com os checksums do rsync que eventualmente travou. O Tar foi, não somente, mais rápido, mas também não sobrecarregou o servidor, tornado possível até continuar servindo páginas enquanto rodava.
O Tar também irá perservar os direitos e usuários dos arquivos, tudo que você precisa para ter uma cópia exata.
Fontes: