A maneira mais fácil de transferir arquivos rapidamente entre servidores linux?

16

Preciso transferir arquivos de um servidor CentOS para outro. Transferirá arquivos de 5 MB a cada 10 minutos. Não precisa de criptografia.

O que é fácil foi para uma rápida transferência de arquivos?

Existe algo mais simples que o ftp?

Obrigado!

Alex L
fonte
11
Eu tenho fé que tar sobre netcat triunfará ... heh heh ...: serverfault.com/questions/18125/...
Evan Anderson
Como não preciso de criptografia, mas preciso de velocidade, prefiro o rsync.
Alex L
Acabei de saber que as transferências HTTP não têm muita sobrecarga, então talvez eu possa usá-las.
Alex L
Não edite uma resposta na sua pergunta, publique-a como resposta. Reversão.
HopelessN00b
para "rápido", veja também unix.stackexchange.com/questions/48399/…
rogerdpack

Respostas:

25

rsync

Eu usaria o rsync antes de usar o ftp ou tftp.

Mais opções e (na minha experiência) transferência mais confiável.

KPWINC
fonte
11
Eu também constatou que rsync normalmente obtém um maior rendimento do que qualquer outra coisa (SCP, CIFS, NFS)
Ophidian
e quanto às transferências http?
Alex L
@Ophidian Você quer dizer usando o rsync como daemon? Caso contrário, como ele pode ser mais rápido que o scp, pois ambos usam ssh e há criptografia.
22411
@balki Sim, o daemon rsync. Não é particularmente falador, faz um bom trabalho de alimentar dados do disco para a linha e faz o pouco trabalho necessário para concluir a solicitação (aplica diferenças para arquivos de texto, por exemplo).
Ofidiana
21

tar sobre ssh é bom, mas o tar sobre TCP via netcat é o mais baixo possível! Se isso é algo único, experimente:

No receptor:

nc -l -p 8989 | tar x

No remetente:

tar cf - /source-path | nc (receiving host ip address) 8989

Se isso é algo que você fará regularmente, eu provavelmente usaria o rsync.

Evan Anderson
fonte
+1 para netcat, o canivete suíço
chmeee 10/07/09
O mesmo em você por não ler Evan. Ha ha ha! Na verdade, não é uma coisa única. Ele disse que vai transferir arquivos de 5 MB a cada 10 minutos. Talvez o envio via código Morse seja uma boa alternativa? ;-) (nota: piada particular entre Evan e eu) #
KPWINC 10/07/2009
8

Duas pessoas mencionaram tar sobre ssh, mas não disseram como fazê-lo. Para o registro, o procedimento básico é executar:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Ou, se você deseja iniciar transferências a partir do final de recebimento:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

A vantagem de fazê-lo dessa maneira sobre a solução netcat da Evan é que tudo pode ser iniciado em um computador; você não precisa coordenar duas invocações de netcat. Se você precisar executar automaticamente, poderá configurar uma chave ssh que permita fazer conexões sem uma senha e usar essa chave para essas conexões.

O ssh possui uma opção -C para compactar seu fluxo de dados ou você pode usar a capacidade de compactação interna do tar do GNU:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

O Rsync é outra opção, mas seu ponto forte é a atualização de arquivos que já existem no terminal de recebimento. Descobri que é mais lento que scp ou tar / ssh ao usá-lo para transferir arquivos que ainda não existem do outro lado.

Kenster
fonte
11
+1 Como assim, nem todo mundo sabe intuitivamente como fazer tar sobre ssh? Esquisito. :)
caos
O tar, por si só, não é confiável - não há verificação de integridade; no entanto, com o SSH (TLS), você obtém integridade devido à capacidade do TLS de detectar alterações em voo nos dados. O Rsync é uma escolha melhor e o Rsync, pois fará uma melhor verificação de integridade sem criptografia; a criptografia declarada pelo OP não era necessária.
1113 Kilo
De que verificação de integridade o tar precisa? As camadas TCP e ssh fornecem transporte de dados confiável. Se você está afirmando que o próprio tar pode ter bugs, você deve tratar o rsync da mesma maneira. Na verdade, tive transferências de rsync congeladas devido a problemas de protocolo. Não me lembro de um pipeline de tar / untar já fazendo isso.
21412 Kenster
6

Eu usaria scpou tarmais ssh, honestamente. A criptografia desacelera as coisas, mas a facilidade de configuração e uso, a confiabilidade e a familiaridade (subjetivamente, é claro) me deixam disposto a sofrer, a menos que eu realmente precise dessa velocidade.

Você pode acelerar a transferência ssh, dizendo-lhe para usar uma cifra mais rápida que a padrão também. O padrão é geralmente 3dese você geralmente pode fazê- -c deslo, de modo que obviamente será mais rápido e também -c blowfishserá representado tão rápido, embora eu não o tenha testado exatamente.

(Nos dias de SSHv1, você costumava fazer isso -c none, mas acho que alguém decidiu que isso era ruim.)

caos
fonte
4

Se você precisar passar por scp / ssh, minhas experiências mostram que a cifra mais rápida ativada por padrão atualmente é o RC4. Você especifica a cifra via ' -c arcfour ' no seu comando ssh / scp:

para cópia inicial:

  • scp -c arcfour -r foo/ desthost:/destdir

para atualizações:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir
allaryin
fonte
3

O Rsync é um bom caminho, pois se você transferir os mesmos arquivos mais de uma vez, ele acelerará a cópia, conforme mostrado nesta citação na página de manual.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.
thepocketwade
fonte
2

O FTP é bastante simples, mas uma maneira ainda mais simples pode ser criar um compartilhamento NFS em uma máquina e montá-lo na outra. Em seguida, copiar os arquivos consistirá em fazer um cp de um diretório para outro.

Swoogan
fonte
dependendo dos requisitos. Eu não usaria o NFS na Internet, por exemplo.
Kyle Hodgson
11
Bom ponto. Nesse caso, eu recomendaria o rsync, pois ele pode continuar de onde parou se interrompido. Também porque apenas transfere o delta entre a origem e o destino.
11309 Swoogan
a questão era muito geral, eu gosto soulution postado por Swoogan, especialmente o autor mencionou que necessidade solução mais simples e não exigem criptografia
integratorIT
2

Se você quer velocidade, pode usar netcat e tar. Será mais rápido que o ssh, rsync ou scp em uma rede local em que a criptografia não é uma preocupação. Google "netcat tar".

DestinationServer

nc -l -p 7878 | tar -C /target/dir -xzf -

SourceServer

tar -cz /source/dir | nc DestinationServer 7878

Obviamente, isso requer que o netcat esteja realmente instalado. Google "netcat tar" para mais informações.

robertmoggach
fonte
1

Eu acredito que você já resolveu o seu problema, mas caso o seu ssh funcione em outra porta (não na porta padrão 22), você pode usar isso

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / [email protected]: / remote / dir

Nota: - substitua XXXXX pelo número da porta - substitua 192.16.1.2 pelo IP do servidor remoto correto

mangia
fonte