Qual é a maneira mais rápida e confiável de transferir muitos arquivos?


10

Estou tentando transferir cerca de 100k arquivos, totalizando 90gb. No momento, estou usando o daemon rsync, mas seu lento 3.4mb / se preciso fazer isso várias vezes. Eu estou querendo saber quais opções eu tenho, que maximizariam uma conexão de 100mbit pela Internet e seriam muito confiáveis.


2
Você está recebendo quase um terço da sua conexão - isso é respeitável, mas não ótimo. A que distância os elétrons voam os arquivos estão sendo transferidos?
Shane Madden

Latência de 50 ms entre os dois servidores.
incognito2

5
Eu vi muitos arquivos uma vez que hyperboleandahalf.blogspot.com/2010/04/…
Smudge

Se você estiver usando o daemon rsync, não há ssh envolvido, certo? Então a explicação é provavelmente a infraestrutura entre os hosts. Você pode tentar o netperf, o iperf ou o flowgrind para testar a velocidade entre os hosts. Se este teste fornecer uma taxa de transferência mais alta, você deve observar como o rsync está tornando as coisas lentas: leia a E / S no servidor lentamente, escreva a E /
S

Respostas:


11

Você já considerou o Sneakernet ? Com grandes conjuntos de dados, o envio noturno geralmente será mais rápido e mais barato do que a transferência via Internet.


10
"Nunca subestime a largura de banda de uma caminhonete cheia de fitas rolando pela estrada." - AST
voretaq7

1
bem, considerando a acessibilidade do hardware da LAN de gigabit, se for uma transferência de LAN, o tempo gasto escrevendo por eSATA em um único eixo não é tão atraente.
memnoch_proxy

10

Quão? Ou TL; DR

O método mais rápido que encontrei é uma combinação de tar, mbuffere ssh.

Por exemplo:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Com isso, obtive transferências sustentadas de rede local acima de 950 Mb / s em links de 1Gb. Substitua os caminhos em cada comando tar para ser apropriado para o que você está transferindo.

Por quê? mbuffer!

O maior gargalo na transferência de arquivos grandes por uma rede é, de longe, a E / S do disco. A resposta para isso é mbufferou buffer. Eles são amplamente similares, mas mbuffertêm algumas vantagens. O tamanho padrão do buffer é 2 mbufferMB e 1 MB buffer. Buffers maiores têm maior probabilidade de nunca ficarem vazios. Escolher um tamanho de bloco que seja o menor múltiplo comum do tamanho de bloco nativo no sistema de arquivos de destino e de destino dará o melhor desempenho.

O buffer é a coisa que faz toda a diferença! Use-o se tiver! Se você não tiver, pegue! Usar (m}?buffermais qualquer coisa é melhor do que qualquer coisa por si só. é quase literalmente uma panacéia para transferências lentas de arquivos de rede.

Se você estiver transferindo vários arquivos, use-os tarpara "agrupá-los" em um único fluxo de dados. Se for um único arquivo, você poderá usar cato redirecionamento de E / S. A sobrecarga de tarvs. caté estatisticamente insignificante, então eu sempre uso tar(ou zfs -sendonde posso), a menos que já seja um tarball . Não é garantido que nenhum desses fornece metadados (e, em particular cat, não). Se você quiser metadados, deixarei isso como um exercício para você.

Finalmente, o uso sshde um mecanismo de transporte é seguro e carrega muito pouco em cima. Novamente, a sobrecarga de sshvs. ncé estatisticamente insignificante.


Às vezes, há sobrecarga de criptografia no uso do SSH como transporte. Veja: Cópia de arquivos entre máquinas Linux com autenticação forte, sem criptografia
ewwhite

2
Você pode usar mecanismos de criptografia mais rápidos, se precisar. Mas você não precisa necessariamente canalizar isso através do ssh. Eu prefiro definir as portas -O e -I no mbuffer de ambos os lados. Mesmo que agora sejam dois comandos, você pula a criptografia e maximiza a largura de banda da rede armazenando em buffer as duas extremidades. Estou enviando um fluxo tar a 720 + Mbps na minha LAN local com o equivalente atar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy

2
@memnoch_proxy: Essa é uma boa sugestão (que eu votei), mas nos dias de hoje em que a NSA está tocando linhas de dados privadas entre data centers (por exemplo, Google e Yahoo) usando criptografia, IMO, é sempre um bom hábito . Usar sshsimplifica isso. Usando stunnel, socatou opensslfunciona também, mas são mais complexos de configurar para transferências simples.
bahamat

1
@ Bahamat obrigado por me fazer olhar para a pergunta novamente. Minha sugestão só parece apropriada se a transferência puder ocorrer através de uma VPN. Para uma transferência pela Internet, eu certamente usaria o ssh também.
Novn

8

Você mencionou "rsync", então suponho que você esteja usando o Linux:

Por que você não cria um arquivo tar ou tar.gz? O tempo de transferência de rede de um arquivo grande é mais rápido do que muitos arquivos pequenos. Você pode até comprimir se desejar ...

Alcatrão sem compressão:

No servidor de origem:

tar -cf file.tar /path/to/files/

Então, no lado receptor:

cd /path/to/files/
tar -xf /path/to/file.tar

Alcatrão com compressão:

No servidor de origem:

tar -czf file.tar.gz /path/to/files/

Então, no lado receptor:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

Você simplesmente usaria o rsync para fazer a transferência real dos arquivos (tar | tar.gz).


somente se não estavam disponíveis lugar para armazenar arquivo ..
Tebe

5

Você poderia tentar o tare sshtruque descrito aqui :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"

isso deve ser regravável para o seguinte :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"

Você perderia os --partialrecursos do rsyncprocesso, no entanto. Se os arquivos não mudarem com muita frequência, viver com uma inicial lenta rsyncpode valer muito a pena, pois será muito mais rápido no futuro.


2

Você pode usar várias opções de compactação do rsync.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

A taxa de compactação para arquivos binários é muito baixa, portanto você pode pular esses arquivos usando --skip-compress, por exemplo, iso, tarballs já arquivados e compactados etc.


-6

Eu sou um grande fã do SFTP. Eu uso o SFTP para transferir mídia do meu computador principal para o meu servidor. Eu obtenho boas velocidades, através da LAN.

O SFTP é confiável, eu daria uma chance, pois é fácil de configurar e, em alguns casos, pode ser mais rápido.


5
O FTP precisa morrer. Ele não é criptografado, não lida bem com interrupções e há pelo menos meia dúzia de alternativas viáveis ​​para ele que não são completamente ruins.
MDMarra 21/11

1
Já ouviu falar de SFTP?
precisa saber é o seguinte

8
Sim você tem? Não está relacionado ao protocolo FTP em nada, exceto no nome e no fato de que ele move os arquivos.
precisa saber é o seguinte

5
O FTP também é notoriamente não confiável ao atravessar firewalls (data anterior a firewalls quando o cliente abre uma porta aleatória para aceitar conexões de volta era legal, e a invasão do FTP passivo e passivo estendido para contornar essa limitação é exatamente isso: hackery)
voretaq7
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.