Trasferimento di milioni di file da un server a un altro


15

Ho due server. Uno di questi ha 15 milioni di file di testo (circa 40 GB). Sto cercando di trasferirli su un altro server. Ho pensato di comprimerli e trasferire l'archivio, ma mi sono reso conto che questa non è una buona idea.

Quindi ho usato il seguente comando:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

Ma ho notato che questo comando trasferisce solo circa 50.000 file e quindi la connessione viene persa.

Esiste una soluzione migliore che mi permetta di trasferire l'intera raccolta di file? Intendo usare qualcosa di simile rsyncper trasferire i file che non sono stati trasferiti quando si è persa la connessione. Quando si verifica un'altra interruzione della connessione, digitare nuovamente il comando per trasferire i file, ignorando quelli che sono già stati trasferiti correttamente.

Questo non è possibile con scp, perché inizia sempre dal primo file.

Risposte:


33

Come dici tu, usa rsync:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

Le opzioni sono:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

Come dice @aim nella sua risposta, assicurati di avere un trailing /sulla directory dei sorgenti (anche su entrambi va bene).

Maggiori informazioni dalla pagina man


1
Suggerisco di aggiungere la -hbandiera per usare unità leggibili dall'uomo. E se vuoi più verbosità, hai alcune opzioni: -ie / o -v/ -vv.
nyuszika7h,

2
Ci sono generalmente pochissime ragioni per non usare sempre rsync invece di scp. Il suo utilizzo di base è lo stesso e offre molte altre funzioni utili.
pimlottc,

se sshnon è un'opzione per te e non hai bisogno o desideri la crittografia puoi provare il mio script s3.amazonaws.com/skaperen/rsend
Skaperen

7

Basta usare rsync su ssh!

rsync -av username@ip:/var/www/html/txt /var/www/html/

Dalla pagina man:

-a , - archivio : questo equivale a -rlptgoD. È un modo rapido per dire che vuoi la ricorsione e vuoi preservare quasi tutto (con -H che è una notevole omissione). L'unica eccezione alla precedente equivalenza è quando viene specificato --files-from, nel qual caso -r non è implicito.

-v , - verbose : questa opzione aumenta la quantità di informazioni fornite durante il trasferimento. Per impostazione predefinita, rsync funziona in silenzio. Un singolo -v ti darà informazioni su quali file vengono trasferiti e un breve riepilogo alla fine. Due opzioni -v ti daranno informazioni su quali file vengono saltati e leggermente più informazioni alla fine. Più di due opzioni -v devono essere utilizzate solo se si esegue il debug di rsync.

Nota come ho usato le barre alla fine delle cartelle - è importante .


Probabilmente dovresti aggiungere ulteriori informazioni sul significato della barra finale. Dalla rsyncpagina del manuale: "Una barra rovesciata sulla fonte cambia questo comportamento per evitare di creare un livello di directory aggiuntivo nella destinazione. Puoi pensare a una coda / su una fonte che significa" copia il contenuto di questa directory "invece di" copia la directory per nome ", ma in entrambi i casi gli attributi della directory contenente vengono trasferiti nella directory contenitore sulla destinazione."
nyuszika7h,

... e il significato delle bandiere -av?
MrWhite,

0

Usa lftp, è molto più veloce di rsync ed è il migliore per il mirroring di siti Web (molti piccoli file). Può anche trasferire in parallelo utilizzando più connessioni:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

Se una connessione si interrompe, si riconnetterà e continuerà. Se interrompi il trasferimento, salterà i file esistenti e continuerà.

http://lftp.yar.ru/


0

Un altro modo è di eseguire il piping di un file tar (facoltativamente compresso) su ssh:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
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.