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


J'ai environ 200 000 fichiers que je transfère sur un nouveau serveur aujourd'hui. Je n'avais encore rien fait à une telle échelle et je voulais obtenir des conseils sur la manière 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 disque sur le serveur d'origine pour regrouper tous les répertoires et fichiers en une seule archive massive. Ma question est donc de savoir comment transférer tous ces fichiers? rsync? une façon particulière d'utiliser rsync? Toute contribution / suggestion sur la façon de le faire serait incroyable.

Merci

EDIT: Pour ceux qui se demandent, je suggère fortement l'utilisation d'un screen lors de l'exécution d'un grand rsync commande comme ça. Surtout quand quelque chose de stupide peut se produire et que vous perdez la connexion au serveur A sur lequel vous exécutez la rsync commande de. Ensuite, détachez simplement l'écran et reprenez-le plus tard.


17
2018-03-26 18:12


origine


As-tu essayé rsync encore? Peut-être sur un petit ensemble de fichiers? 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 du contenu via une connexion ssh plutôt que de devoir compresser dans un fichier avant de déplacer le fichier: tar cz | ssh user@example.com tar xz - Aesin
il pourrait être hors sujet, mais (surtout pour un chargement initial, puis en utilisant rsync pour les mises à jour ultérieures: "Ne sous-estimez jamais la bande passante d'un break rempli de bandes" (par exemple, avez-vous envisagé de placer un disque dur HD (ou branchez un disque USB / USB3) sur celui-ci? 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 aucune limite BW sur un fournisseur et l'autre que je n'atteindrai pas ce mois-ci. Donc, je n'ai pas vraiment de problème avec ça: P - MasterGberry
@OlivierDulac what-if.xkcd.com/31 - Bob


Réponses:


Juste pour étoffer Simon répondre, rsync est 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 ayez un accès ssh à la machine distante, vous voudriez faire quelque chose comme ceci:

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

Cela va copier le répertoire path/to/local/foo à /path/to/remote/bar sur le serveur distant. Un nouveau sous-répertoire nommé bar/foo sera créé. Si vous voulez seulement copier le Contenu d'un répertoire, sans créer un répertoire de ce nom sur la cible, ajoutez une barre oblique:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/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

22
2018-03-26 18:29



alors pourrais-je faire rsync -hrtplu --progress si 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 dedans. Donc, je sais que ce n'est pas le pare-feu ... Dois-je aussi fournir le mot de passe via le cmd? ou ne serait-ce pas juste me demander après pour ça? - MasterGberry
Derp, nvm. J'ai oublié le trafic sortant sur mon pare-feu. Merci - MasterGberry
Note importante: avec rsync, soyez très prudent lorsque vous utilisez le "--delete": lisez-en beaucoup, testez d'autres dossiers (/ tmp / ...) et méfiez-vous des modifications lors de l'ajout ou non d'un "/" final à la fin du répertoire source ou du répertoire de destination. - Olivier Dulac


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. (Lire: envoyer un disque dur de 2,5 pouces, ou simplement le conduire vous-même. Les lecteurs de 300 gigabits doivent être faciles à trouver).

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

[Edit] 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) Exécutez à nouveau 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 plus de modifications, ou vous pouvez le faire de manière intelligente / sécurisée en rendant les données en lecture seule pendant la copie. (Par exemple, s'il se trouve sur un ensemble partagé utilisé, le partage est en lecture seule ou synchronise les données, puis le soir, configurez le partage en lecture seule lorsque vous l'exécutez une seconde fois).


13
2018-03-26 18:22



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


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, il atteint 20-30 Go et fonctionne toujours sans problème.


5
2018-03-26 18:19





rsync sur NFS en 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 avez besoin de faire une copie de disque réellement, utilisez dd ou quelque chose comme ça pour créer une image brute du disque. L'utilisation de ssh (scp) entraîne une surcharge énorme. 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. J'imagine.


0
2018-03-27 06:43



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 quelques fois. La première fois, toutes les données sont copiées. Deuxième fois seulement ce qui a changé pendant la première (longue) copie. Une troisième fois se ferait la nuit ou avec les parts 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 à travers le pays, donc ça prend plus de temps. - Rob
@FSMaxB: Je le ferai plus tard, merci. - 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. Ce qui sera plus bénéfique - Pawel


première utilisation NFS et tar / untar (NFS est le protocole le plus rapide dans ce cas, tar pour économiser de la bande passante réseau par une utilisation accrue du processeur)

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

prochaine fois / s utiliser rsync


0
2018-03-28 11:29



Si vous avez suffisamment de puissance processeur, 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 4567 et nc -l 4567 | gunzip | tar xf -. - Hennes
merci Hennes, c'était mon idée, mais j'ai oublié gzip dans les tuyaux - jet