Transfert d'environ 300 Go de fichiers d'un serveur à un autre

20

J'ai environ 200 000 fichiers que je transfère vers un nouveau serveur aujourd'hui. Je n'ai rien fait à une si grande échelle auparavant et je voulais obtenir des conseils sur la façon de procéder. Je les déplace entre deux distributions Centos 6, et elles se trouvent à différents endroits du pays. Je n'ai pas assez d'espace sur le disque dur sur le serveur d'origine pour tarer tous les répertoires et fichiers dans une seule archive tar, alors ma question est de savoir comment dois-je transférer tous ces fichiers? rsync? une façon spéciale d'utiliser rsync? Toute entrée / suggestion sur la façon de le faire serait incroyable.

Merci

EDIT: Pour ceux qui se demandent, je suggère fortement d'utiliser un screenlors de l'exécution d'une grande rsynccommande comme celle-ci. Surtout quand quelque chose de stupide peut se produire et que vous perdez la connexion au serveur A à partir duquel vous exécutez la rsynccommande. Détachez ensuite l'écran et reprenez-le plus tard.

MasterGberry
la source
4
Avez-vous déjà essayé rsync? Peut-être sur un petit ensemble de fichiers ou plus? Devrait être l'outil idéal pour cela.
slhck
Ce n'est certainement pas le meilleur outil pour ce travail, mais vous pouvez être intéressé par le fait que vous pouvez diffuser tar via une connexion ssh plutôt que d'avoir à compresser dans un fichier avant de déplacer le fichier:tar cz | ssh [email protected] tar xz
Aesin
2
cela pourrait être hors sujet, mais (surtout pour un chargement initial, puis à utiliser rsyncpour les mises à jour suivantes): "Ne sous-estimez jamais la bande passante d'un break plein de bandes" (c'est-à-dire: avez-vous envisagé de placer un 2ème hd (ou de brancher un usb2 / disque usb3), sauvegarder dessus et envoyer celui-ci via fedex à l'emplacement distant? Il pourrait être BEAUCOUP plus rapide que toute autre chose, et économiser de la bande passante pour d'autres utilisations.
Olivier Dulac
Je n'ai pas de limites BW sur un fournisseur et l'autre je n'atteindrai pas ce mois-ci. Je n'ai donc pas vraiment de problème à le gaspiller: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Bob

Réponses:

24

Juste pour étoffer la réponse de Simon , rsyncest l'outil parfait pour le travail:

   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.

En supposant que vous avez un accès ssh à la machine distante, vous voudriez faire quelque chose comme ceci:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Cela va copier le répertoire path/to/local/foopour /path/to/remote/barle serveur distant. Un nouveau sous-répertoire nommé bar/foosera créé. Si vous souhaitez uniquement copier le contenu d'un répertoire, sans créer un répertoire de ce nom sur la cible, ajoutez une barre oblique de fin:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Cela copiera le contenu de foo/dans le répertoire distant bar/.

Quelques options pertinentes:

 -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
terdon
la source
que pourrais-je faire rsync -hrtplu --progresssi je voulais voir les progrès au fur et à mesure?
MasterGberry
@MasterGberry yup, exactement. J'ai un script de sauvegarde qui s'exécute rsync --progress --stats -hrtl --update source destination.
terdon
Je semble avoir des problèmes pour le faire fonctionner. rsync -hrtplu --progress --rsh='ssh -p2202'est ce que j'utilise et il ne peut pas se connecter. Continuez à obtenir 255 erreur. Mais je suis sshd'd dedans. Donc je sais que ce n'est pas le pare-feu ... dois-je également fournir le mot de passe via la cmd? ou ne me le demanderait-on pas juste après?
MasterGberry
Derp, nvm. J'ai oublié le trafic sortant sur mon pare-feu. Merci
MasterGberry
Remarque importante: avec rsync, soyez très prudent lorsque vous utilisez le "--delete": lisez beaucoup à ce sujet, testez sur d'autres dossiers (/ tmp / ...), et méfiez-vous des changements lors de l'ajout ou non d'un "/" de fin. à la fin du ou des répertoires source ou de destination.
Olivier Dulac
14

Cela dépend de la vitesse à laquelle il doit être copié et de la quantité de bande passante disponible.

Pour une mauvaise connexion réseau, considérez la bande passante d'un camion rempli de bandes. (Lisez: envoyez un disque dur de 2,5 pouces par la poste ou installez-le vous-même. 300 lecteurs gigabits devraient être faciles à trouver).

Si c'est moins critique en temps ou si vous avez beaucoup de bande passante, alors rsync est génial. S'il y a une erreur, vous pouvez simplement continuer sans recopier les fichiers précédents.

[Modifier] J'ai oublié d'ajouter que vous pouvez exécuter rsync plusieurs fois si vos données sont utilisées pendant la copie.

Exemple:
1) Données utilisées. Rsync -> Toutes les données sont copiées. Cela peut prendre un certain temps.
2) Réexécutez rsync, seuls les fichiers modifiés sont copiés. Cela devrait être rapide.

Vous pouvez le faire plusieurs fois jusqu'à ce qu'il n'y ait aucun changement, ou vous pouvez le faire de manière intelligente / sûre en rendant les données en lecture seule pendant la copie. (par exemple, s'il se trouve sur un ensemble partagé utilisé qui partage en lecture seule. Ou resynchronisez les données, puis la nuit, définissez le partage en lecture seule pendant que vous l'exécutez une deuxième fois).

Hennes
la source
1
Aucun serveur ne devrait vivre dans un endroit où la bande passante ne peut pas gérer 300G dans un délai raisonnable ...
Dan
1
Cela dépend de ce qui est «raisonnable». Disons que le lien le plus faible est de 100 mbit (peu m'importe si c'est la limite de téléchargement sur le bureau ou le téléchargement sur l'autre). Cela permet à peu près 10 Mo / s. (div par 10 semble raisonnable, je sais que vous pouvez obtenir un peu plus si tout se passe parfaitement bien. Par exemple, personne d'autre n'utilise la ligne pour rien du tout). 10 Mo / sec ~~ 600 Mo / min ~~ 36000 Mo / heure ~~ 36 Go / heure ~~ 300 Go est 8h20min. C'est faisable du jour au lendemain. Cela fait également beaucoup d'hypothèses. Par exemple, si le téléchargement n'est que de 2 mbit (nous avons des bureaux avec ces vitesses), cela prend 50 fois plus de temps (415h ou 17,3 jours).
Hennes
Oui! Oui, 8-10 est raisonnable, mais je faisais en effet un certain nombre d'hypothèses.
Dan
2
@Dan S'il est nécessaire que le serveur soit opérationnel et qu'il réponde aux demandes, saturer la bande passante en amont est probablement une mauvaise idée. Il faudrait donc étrangler artificiellement la vitesse de transfert pour en tenir compte.
Bob
6

J'irais pour rsync! Je l'utilise pour sauvegarder mon serveur sur un serveur hors site et cela fonctionne bien. Habituellement, il y a quelques Mo à copier, mais certains jours, cela va jusqu'à 20-30 Go et cela a toujours fonctionné sans problème.

Simon
la source
0

rsync sur NFS utilisant une connexion Gigabit prendra environ 10h. Il sera préférable de copier les données sur le disque dur et de les déplacer entre les serveurs. Si vous devez faire une copie un-à-un du disque réel, utilisez dd ou quelque chose comme ça pour créer une image brute du disque. L'utilisation de ssh (scp) entraîne une énorme surcharge. Testé empiriquement sur une connexion Gigabit. rsync est efficace pour effectuer une synchronisation incrémentielle entre deux serveurs utilisés en haute disponibilité ou en mode de sauvegarde. Je suppose.

Pawel
la source
Le langage et le style de cette réponse doivent être améliorés.
FSMaxB
Rsync est particulièrement utile si les fichiers peuvent changer pendant la copie. Il suffit de l'exécuter plusieurs fois. Première fois que toutes les données sont copiées. Deuxième fois seulement ce qui a été changé lors de la première (longue) copie. Une troisième fois se ferait la nuit ou avec les partages en lecture seule.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.sauf que c'est partout au pays, donc ça prendrait plus de temps.
Rob
@FSMaxB: Je le ferai plus tard, thx.
Pawel
@Rob: J'ai lu ceci;) Que les serveurs sont à deux endroits différents. Donc, vous devez calculer ce qui sera le mieux pour vous. Faire un voyage à travers le pays (vérifier le coût du carburant, etc.) ou utiliser une connexion réseau. Quoi de plus bénéfique.
Pawel
0

utiliser NFS et tar / untar pour la première fois (NFS est le protocole le plus rapide dans ce cas, tar pour économiser la bande passante du réseau en utilisant davantage le processeur)

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

la prochaine fois, utilisez rsync

jet
la source
Si vous avez suffisamment de puissance CPU, vous pouvez améliorer cela en ajoutant gzip à la boucle. Et sans NFS, vous pouvez utiliser netcat. (Ou même les deux: tar -cf - * | gzip | nc -p 4567et nc -l 4567 | gunzip | tar xf -.
Hennes
merci Hennes, c'était mon idée, mais j'ai oublié gzip dans les tuyaux
jet