Transferindo cerca de 300 GB em arquivos de um servidor para outro

20

Eu tenho cerca de 200.000 arquivos que estou transferindo para um novo servidor hoje. Eu não fiz nada em larga escala antes e queria obter alguns conselhos sobre como eu deveria fazer isso. Estou movendo-os entre duas distribuições Centos 6, e elas estão em locais diferentes no país. Como não tenho espaço suficiente no disco rígido do servidor original para fazer o tar de todos os diretórios e arquivos em um tarball maciço, minha pergunta é como devo transferir todos esses arquivos? rsync? alguma maneira especial de usar o rsync? Qualquer entrada / sugestão sobre como fazê-lo seria incrível.

obrigado

Edição: Para aqueles que se perguntam, eu sugiro usar um screenquando executar um rsynccomando grande como este. Especialmente quando algo bobo pode ocorrer e você perde a conexão com o servidor A do qual está executando o rsynccomando. Em seguida, basta desconectar a tela e retomar depois.

MasterGberry
fonte
4
Você já tentou rsync? Talvez em um pequeno conjunto de arquivos ou algo assim? Deve ser a ferramenta ideal para isso.
slhck
Certamente não é a melhor ferramenta para este trabalho, mas você pode estar interessado no fato de que pode transmitir o tar através de uma conexão ssh, em vez de precisar comprimir em um arquivo antes de movê-lo:tar cz | ssh [email protected] tar xz
Aesin
2
pode estar fora de tópico, mas (especialmente para um carregamento inicial e depois rsyncpara atualizações subsequentes): "Nunca subestime a largura de banda de uma caminhonete cheia de fitas" (ou seja: você já pensou em colocar um segundo hd (ou conectar um usb2 disco / USB3), backup sobre ele, e de envio que uma via FedEx para a localização remota poderia ser muito mais rápido do que qualquer outra coisa, e poupar largura de banda para outros usos?.
Olivier Dulac
Não tenho limites de BW em um provedor e no outro não alcançarei este mês. Então, eu realmente não tenho um problema desperdiçando: P
MasterGberry 27/03
11
@OlivierDulac what-if.xkcd.com/31
Bob

Respostas:

24

Apenas para esclarecer a resposta de Simon , rsyncé a ferramenta perfeita para o trabalho:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Supondo que você tenha acesso ssh à máquina remota, convém fazer algo assim:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Isto irá copiar o diretório path/to/local/foopara /path/to/remote/baro servidor remoto. Um novo subdiretório chamado bar/fooserá criado. Se você deseja copiar apenas o conteúdo de um diretório, sem criar um diretório com esse nome no destino, adicione uma barra final:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Isso copiará o conteúdo do foo/diretório remoto bar/.

Algumas opções relevantes:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
Terdon
fonte
o que eu poderia fazer rsync -hrtplu --progressse quisesse ver o progresso à medida que ele avança?
MasterGberry
@MasterGberry sim, exatamente. Eu tenho um script de backup que é executado rsync --progress --stats -hrtl --update source destination.
terdon
Parece que estou tendo problemas para fazê-lo funcionar. rsync -hrtplu --progress --rsh='ssh -p2202'é o que estou usando e ele não pode se conectar. Continue recebendo erro 255. Mas eu sou sshd'd nele. Então, eu sei que não é o firewall ... preciso fornecer a senha também através do cmd? ou não me pedia depois?
MasterGberry
Derp, nvm. Esqueci o tráfego de saída no meu firewall. Graças
MasterGberry
Nota importante: com o rsync, tenha muito mais cuidado ao usar o "--delete": leia muito sobre isso, teste em outras pastas (/ tmp / ...) e tome cuidado com as alterações ao adicionar ou não um "" à direita no final dos diretórios de origem ou de destino.
Olivier Dulac 28/03
14

Depende de quão rápido ele precisa ser copiado e quanta largura de banda está disponível.

Para uma conexão de rede ruim, considere a largura de banda de um caminhão cheio de fitas. (Leia: envie um HDD de 2,5 polegadas ou apenas leve-o até você. É fácil encontrar unidades de 300 gigabit).

Se é menos tempo crítico ou você tem muita largura de banda, o rsync é ótimo. Se houver um erro, você pode continuar sem copiar novamente os arquivos anteriores.

[Editar] Esqueci de acrescentar que você pode executar o rsync várias vezes se seus dados forem usados ​​durante a cópia.

Exemplo:
1) Dados em uso. Rsync -> Todos os dados são copiados. Isto pode tomar algum tempo.
2) Execute o rsync novamente, apenas os arquivos alterados serão copiados. Isso deve ser rápido.

Você pode fazer isso várias vezes até que não haja alterações, ou pode fazê-lo da maneira inteligente / segura, tornando os dados somente leitura durante a cópia. (por exemplo, se estiver em um conjunto compartilhado usado que compartilhe como somente leitura. Ou sincronize novamente os dados, à noite defina o compartilhamento como somente leitura enquanto você o executa pela segunda vez).

Hennes
fonte
11
Nenhum servidor deve estar vivendo em algum lugar onde largura de banda não pode lidar com 300G em uma quantidade razoável de tempo ...
Dan
11
Isso depende do que é "razoável". Digamos que o link mais fraco seja 100 mbit (não me importo se esse é o limite de upload no escritório ou o download no outro). Isso permite aproximadamente 10 MB / s. (div por 10 parece razoável, eu sei que você pode obter um pouco mais se tudo correr perfeitamente bem. Por exemplo, ninguém mais está usando a linha para nada). 10 MB / s ~~ 600 MB / min ~ ~ 36000 MB / hora ~ ~ 36 GB / hora ~ ~ 300 GB é 8h20min. Isso é possível durante a noite. Isso também faz muitas suposições. Por exemplo, se o upload for de apenas 2 mbit (temos escritórios com essas velocidades), leva 50 vezes mais (415h ou 17,3 dias).
Hennes 27/03
Caramba! Sim, 8-10 é razoável, mas eu estava realmente fazendo uma série de suposições.
Dan
2
@ Dan Se for um requisito que o servidor esteja ativo e atendendo solicitações, saturar a largura de banda upstream provavelmente é uma má idéia. Então você teria que acelerar artificialmente a velocidade de transferência para explicar isso.
28413 Bob
6

Eu iria para o rsync! Estou usando-o para fazer backup do meu servidor em um servidor externo e funciona bem. Geralmente, existem alguns MBs para copiar, mas em alguns dias ele chega a 20 a 30 GB e sempre funcionou sem problemas.

Simon
fonte
0

O rsync sobre NFS usando conexão Gigabit demorará cerca de 10h. Será melhor copiar dados no disco rígido e movê-los entre servidores. Se você precisar fazer uma cópia individual do disco, use dd ou algo parecido para criar uma imagem bruta do disco. Usar ssh (scp) causa uma enorme sobrecarga. Testado empiricamente na conexão Gigabit. O rsync é bom na sincronização incremental entre dois servidores usados ​​no HA ou no modo de backup. Eu acho.

Pawel
fonte
O idioma e o estilo dessa resposta precisam ser aprimorados.
FSMaxB
O Rsync é especialmente bom se os arquivos podem mudar durante a cópia. Apenas execute-o algumas vezes. Primeira vez que todos os dados são copiados. Na segunda vez, apenas o que foi alterado durante a primeira (longa) cópia. Uma terceira vez seria feita à noite ou com as ações somente leitura.
Hennes 27/03
will took nearly about 10h. It will be better to copy data on HDD and move them between server.exceto que está em todo o país, então levaria mais tempo.
27413 Rob
@FSMaxB: Farei isso mais tarde, thx.
Pawel
@ Rob: Eu li isso;) Que os servidores estão em dois locais diferentes. Então, você precisa calcular o que será melhor para você. Fazer uma viagem pelo país (verificando o custo do combustível, etc.) ou usando a conexão de rede. O que será mais benéfico.
Pawel
0

use NFS pela primeira vez e tar / untar (o NFS é o protocolo mais rápido nesse caso, tar para economizar largura de banda da rede com mais utilização da CPU)

tar cf - * | ( cd /target; tar xfp -)

próxima vez / s usar rsync

jato
fonte
Se você possui CPU suficiente, pode melhorar isso adicionando gzip ao loop. E sem o NFS, você pode usar o netcat. (Ou até os dois: tar -cf - * | gzip | nc -p 4567e nc -l 4567 | gunzip | tar xf -.
Hennes
obrigado Hennes, foi minha ideia, mas eu esqueci o gzip nos canos
jet