qual è il modo più rapido e affidabile per trasferire molti file?


10

Sto cercando di trasferire circa 100.000 file per un totale di 90 GB. In questo momento sto usando il demone rsync ma è lento 3,4mb / se devo farlo diverse volte. Mi chiedo quali opzioni ho che potrebbero massimizzare una connessione a 100 mbit su Internet ed essere molto affidabili.


2
Stai ricevendo quasi un terzo della tua connessione: è rispettabile, ma non eccezionale. Quanto lontano sono gli elettroni che volano i file trasferiti?
Shane Madden,

Latenza di 50 ms tra i due server.
incognito2

5
Ho visto un sacco di file una volta hyperboleandahalf.blogspot.com/2010/04/…
Smudge

Se stai usando il demone rsync, non è coinvolto ssh, giusto? Quindi la spiegazione è probabilmente l'infrastruttura tra gli host. È possibile provare netperf o iperf o flowgrind per testare la velocità tra gli host. Se questo test ti dà una velocità di trasferimento più alta, allora dovresti vedere come rsync sta rallentando le cose: leggi gli I / O sul server lentamente, scrivi gli I / O sul client, molti piccoli file, filesystem ecc.
AndreasM

Risposte:


11

Hai considerato Sneakernet ? Con insiemi di dati di grandi dimensioni, la spedizione durante la notte sarà spesso più veloce ed economica rispetto al trasferimento via Internet.


10
"Non sottovalutare mai la larghezza di banda di una station wagon piena di nastri che sfrecciano lungo l'autostrada." - AST
voretaq7,

1
bene, vista la convenienza dell'hardware LAN gigabit, se si tratta di un trasferimento LAN, il tempo impiegato per scrivere via eSATA su un singolo mandrino non è poi così attraente.
memnoch_proxy,

10

Come? O TL; DR

Il metodo più veloce che ho trovato è una combinazione di tar, mbuffere ssh.

Per esempio:

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

Usando questo ho ottenuto trasferimenti di rete locale sostenuti oltre 950 Mb / s su collegamenti da 1Gb. Sostituisci i percorsi in ciascun comando tar per essere appropriati per quello che stai trasferendo.

Perché? mbuffer!

Il maggiore collo di bottiglia nel trasferimento di file di grandi dimensioni su una rete è, di gran lunga, l'I / O del disco. La risposta è mbuffero buffer. Sono in gran parte simili ma mbufferpresenta alcuni vantaggi. La dimensione del buffer predefinita è 2 MB per mbuffere 1 MB per buffer. I buffer più grandi hanno maggiori probabilità di non essere mai vuoti. La scelta di una dimensione del blocco che è il minimo comune multiplo della dimensione del blocco nativo sul filesystem di destinazione e di destinazione fornirà le migliori prestazioni.

Buffering è la cosa che rende tutto la differenza! Usalo se ce l'hai! Se non lo hai, prendilo! Usare (m}?bufferpiù qualsiasi cosa è meglio di qualsiasi cosa da solo. è quasi letteralmente una panacea per i trasferimenti di file di rete lenti.

Se si trasferiscono più file, utilizzare tarper "raggrupparli" in un unico flusso di dati. Se si tratta di un singolo file è possibile utilizzare cato il reindirizzamento I / O. Il sovraccarico di tarvs. catè statisticamente insignificante, quindi uso sempre tar(o zfs -senddove posso) a meno che non sia già un tarball . Nessuno di questi è garantito per darti metadati (e in particolare catnon lo farà). Se vuoi metadati, lo lascerò come esercizio per te.

Infine, l'utilizzo sshper un meccanismo di trasporto è sia sicuro che comporta un carico minimo. Ancora una volta, l'overhead di sshvs. ncè statisticamente insignificante.


C'è talvolta un sovraccarico di crittografia nell'uso di SSH come mezzo di trasporto. Vedere: Copia di file tra macchine Linux con autenticazione
avanzata

2
È possibile utilizzare meccanismi di crittografia più veloci, se necessario. Ma non hai necessariamente bisogno di passare attraverso questo ssh. Preferisco impostare le porte -O e -I su mbuffer su entrambi i lati. Anche se ora ci sono due comandi, salti la crittografia e massimizzi la larghezza di banda della rete bufferando entrambe le estremità. Sto inviando un flusso tar a 720 + Mbps sulla mia LAN locale con l'equivalente ditar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy

2
@memnoch_proxy: questo è un buon suggerimento (che ho votato) ma al giorno d'oggi in cui la NSA sta anche toccando le linee di dati private tra i data center (ad esempio, Google e Yahoo) usando la crittografia, IMO, è sempre una buona abitudine fare . L'uso lo sshrende semplice. Utilizzando stunnel, socato opensslfunziona troppo, ma sono più complessi da configurare per i trasferimenti semplici.
Bahamat,

1
@bahamat grazie per avermi fatto rivedere la domanda. Il mio suggerimento sembra appropriato solo se il trasferimento può avvenire su una VPN allora. Per un trasferimento su Internet, utilizzerei sicuramente anche ssh.
memnoch_proxy,

8

Citi "rsync", quindi suppongo che tu stia usando Linux:

Perché non crei un file tar o tar.gz? Il tempo di trasferimento in rete di un file di grandi dimensioni è più veloce di molti file di piccole dimensioni. Potresti anche comprimerlo se lo desideri ...

Tar senza compressione:

Sul server di origine:

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

Quindi alla fine della ricezione:

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

Tar con compressione:

Sul server di origine:

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

Quindi alla fine della ricezione:

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

Dovresti semplicemente usare rsync per eseguire l'effettivo trasferimento dei file (tar | tar.gz).


solo se ci fosse posto disponibile per la memorizzazione dell'archivio ..
Tebe

5

Si potrebbe provare l' tare sshtrick descritto qui :

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

questo dovrebbe essere riscrivibile come segue :

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

Perderesti comunque le --partialcaratteristiche di rsyncquesto processo. Se i file non cambiano molto frequentemente, rsyncvale la pena vivere con un'iniziale lenta, poiché in futuro andrà molto più veloce.


2

È possibile utilizzare varie opzioni di compressione di 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

il rapporto di compressione per i file binari è molto basso, quindi puoi saltare quei file usando --skip-compress, ad es. iso, tarball già archiviati e compressi ecc.


-6

Sono un grande fan di SFTP. Uso SFTP per trasferire file multimediali dal mio computer principale al mio server. Ottengo buone velocità, tramite LAN.

SFTP è affidabile, ci proverei, dato che è facile da configurare e in alcuni casi potrebbe essere più veloce.


5
FTP deve morire. Non è crittografato, non gestisce bene l'interruzione e ci sono almeno una mezza dozzina di alternative praticabili che non fanno completamente schifo.
MDMarra,

1
Hai mai sentito parlare di SFTP?
Tillman32,

8
Si Non è in alcun modo correlato al protocollo FTP in nulla tranne il nome e il fatto che sposta i file.
MDMarra,

5
L'FTP è notoriamente inaffidabile anche quando attraversa i firewall (risale a un tempo prima dei firewall quando il tuo client apriva una porta casuale per accettare le back-connessioni era interessante, e l'hacking di FTP passivo ed passivo passivo per aggirare quella limitazione è proprio questo: Hackery)
voretaq7,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.