Trasferimento di circa 300 GB di file da un server a un altro


20

Ho circa 200.000 file che sto trasferendo su un nuovo server oggi. Non ho mai fatto nulla su così vasta scala prima e volevo ottenere qualche consiglio su come dovrei farlo. Li sto spostando tra due distribuzioni Centos 6, e sono in diverse località del paese. Non ho abbastanza spazio sul disco rigido sul server originale per caricare tutte le directory e i file in un unico tarball, quindi la mia domanda è: come dovrei trasferire tutti questi file? rsync? un modo speciale di usare rsync? Qualsiasi input / suggerimento su come farlo sarebbe sorprendente.

Grazie

EDIT: Per coloro che si chiedono, consiglio vivamente di utilizzare a screenquando si esegue un rsynccomando di grandi dimensioni come questo. Soprattutto quando può verificarsi qualcosa di stupido e si perde la connessione al server A da cui si sta eseguendo il rsynccomando. Quindi basta staccare lo schermo e riprenderlo più tardi.


4
Ci hai già provato rsync? Forse su un piccolo set di file o giù di lì? Dovrebbe essere lo strumento ideale per quello.
Slhck,

Quasi certamente non è lo strumento migliore per questo lavoro, ma potresti essere interessato al fatto che puoi trasmettere in streaming tar attraverso una connessione ssh piuttosto che dover comprimere un file prima di spostare il file:tar cz | ssh user@example.com tar xz
Aesin

2
potrebbe essere fuori tema, ma (soprattutto per un caricamento iniziale, e quindi utilizzarlo rsyncper gli aggiornamenti successivi): "Non sottovalutare mai la larghezza di banda di una station wagon piena di nastri" (vale a dire: hai pensato di posizionare un secondo hd (o collegare un usb2 / USB3), eseguirne il backup e inviarlo tramite fedex alla posizione remota? Potrebbe essere MOLTO più veloce di ogni altra cosa e risparmiare larghezza di banda per altri usi.
Olivier Dulac

Non ho limiti di BW per un fornitore e l'altro non raggiungerò questo mese. Quindi non ho davvero un problema a sprecarlo: P
MasterGberry

1
@OlivierDulac what-if.xkcd.com/31
Bob

Risposte:


24

Giusto per dare corpo alla risposta di Simon , rsyncè lo strumento perfetto per il lavoro:

   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.

Supponendo che tu abbia accesso ssh al computer remoto, vorresti fare qualcosa del genere:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

Questo copierà la directory path/to/local/fooper /path/to/remote/baril server remoto. bar/fooVerrà creata una nuova sottodirectory denominata . Se vuoi solo copiare il contenuto di una directory, senza creare una directory con quel nome sulla destinazione, aggiungi una barra finale:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

Questo copierà il contenuto foo/nella directory remota bar/.

Alcune opzioni pertinenti:

 -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

quindi potrei fare rsync -hrtplu --progressse volessi vedere i progressi mentre procede?
MasterGberry

@MasterGberry sì, esattamente. Ho uno script di backup che viene eseguito rsync --progress --stats -hrtl --update source destination.
terdon,

Mi sembra di avere problemi a farlo funzionare. rsync -hrtplu --progress --rsh='ssh -p2202'è quello che sto usando e non riesco a connettermi. Continuare a ricevere 255 errori. Ma mi piace. Quindi so che non è il firewall ... devo fornire anche la password tramite il cmd? o non me lo chiederebbe dopo?
MasterGberry

Derp, nvm. Ho dimenticato il traffico in uscita sul mio firewall. Grazie
MasterGberry il

Nota importante: con rsync, fai molta attenzione quando usi "--delete": leggi molto su di esso, prova su altre cartelle (/ tmp / ...) e fai attenzione alle modifiche quando aggiungi o meno un "/" finale alla fine delle directory di origine o delle directory di destinazione.
Olivier Dulac,

14

Dipende dalla velocità con cui deve essere copiato e dalla larghezza di banda disponibile.

Per una connessione di rete scadente, considerare la larghezza di banda di un camion pieno di nastri. (Leggi: invia un HDD da 2,5 pollici o semplicemente guidalo lì da solo. Le unità da 300 gigabit dovrebbero essere facili da trovare).

Se è meno critico in termini di tempo o hai molta larghezza di banda, allora rsync è fantastico. Se si verifica un errore, è possibile continuare senza copiare nuovamente i file precedenti.

[Modifica] Ho dimenticato di aggiungere che è possibile eseguire rsync più volte se i dati vengono utilizzati durante la copia.

Esempio:
1) Dati in uso. Rsync -> Tutti i dati vengono copiati. Questo potrebbe richiedere del tempo.
2) Eseguire di nuovo rsync, vengono copiati solo i file modificati. Questo dovrebbe essere veloce.

Puoi farlo più volte fino a quando non ci sono cambiamenti, oppure puoi farlo in modo intelligente / sicuro rendendo i dati di sola lettura durante la copia. (ad es. se si trova su un set condiviso usato che condivide in sola lettura. Oppure sincronizza i dati, quindi di notte imposta la condivisione in sola lettura mentre la esegui una seconda volta).


1
Nessun server dovrebbe vivere in un posto dove la larghezza di banda non può gestire 300 G in un ragionevole lasso di tempo ...
Dan

1
Dipende da ciò che è "ragionevole". Supponiamo che il collegamento più debole sia 100 mbit (non mi interessa se questo è il limite di upload dall'ufficio o il download dall'altro). Ciò consente all'incirca di 10 MB / sec. (div per 10 sembra ragionevole, so che puoi ottenere un po 'di più se tutto va perfettamente bene. Ad esempio nessun altro sta usando la linea per niente). 10 MB / sec ~~ 600 MB / min ~~ 36000 MB / ora ~~ 36 GB / ora ~~ 300 GB è 8h20min. Questo è fattibile dall'oggi al domani. Anche questo fa molte ipotesi. Ad esempio, se il caricamento è solo 2 mbit (abbiamo uffici con quelle velocità) impiega 50 volte di più (415 ore o 17,3 giorni).
Hennes,

Yikes! Sì, l'8-10 è ragionevole, ma in realtà stavo facendo una serie di ipotesi.
Dan

2
@Dan Se è necessario che il server sia attivo e che soddisfi le richieste, saturare la larghezza di banda a monte è probabilmente una cattiva idea. Quindi dovresti limitare artificialmente la velocità di trasferimento per tenerne conto.
Bob,

6

Vorrei andare per rsync! Lo sto usando per fare il backup del mio server su un server esterno e funziona benissimo. Di solito ci sono alcuni MB da copiare ma in alcuni giorni arriva fino a 20-30 GB e ha sempre funzionato senza problemi.


0

rsync su NFS utilizzando la connessione Gigabit impiegherà circa 10 ore. Sarà meglio copiare i dati sull'HDD e spostarli tra i server. Se devi creare una copia uno-a-uno del disco, usa dd o qualcosa del genere per creare un'immagine non elaborata del disco. L'uso di ssh (scp) causa un enorme sovraccarico. Testato empiricamente sulla connessione Gigabit. rsync è utile per eseguire la sincronizzazione incrementale tra due server utilizzati in HA o in modalità backup. Suppongo.


La lingua e lo stile di questa risposta devono essere migliorati.
FSMaxB,

Rsync è particolarmente utile se i file possono cambiare durante la copia. Eseguilo poche volte. La prima volta che tutti i dati vengono copiati. Solo la seconda volta ciò che è cambiato durante la prima (lunga) copia. Una terza volta sarebbe fatto di notte o con le condivisioni di sola lettura.
Hennes,

will took nearly about 10h. It will be better to copy data on HDD and move them between server.tranne che è in tutto il paese, quindi ci vorrebbe più tempo.
Rob,

@FSMaxB: lo farò più tardi, grazie.
Pawel,

@Rob: ho letto questo;) Che i server si trovano in due posizioni diverse. Quindi, devi calcolare, cosa sarà meglio per te. Fare un viaggio attraverso il paese (verificare il costo del carburante, ecc.) O utilizzare la connessione di rete. Quale sarà più vantaggioso.
Pawel,

0

usa NFS e tar / untar per la prima volta (in questo caso NFS è il protocollo più veloce, tar per risparmiare larghezza di banda della rete grazie a un maggiore utilizzo della CPU)

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

la / e prossima / e usare rsync


Se hai abbastanza potenza della CPU, puoi migliorare aggiungendo gzip al loop. E senza NFS puoi usare netcat. (O anche entrambi: tar -cf - * | gzip | nc -p 4567e nc -l 4567 | gunzip | tar xf -.
Hennes,

grazie Hennes, questa era la mia idea, ma ho dimenticato gzip nei tubi
jet
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.