GNU/Linux >> Tutoriels Linux >  >> Linux

Copier un fichier volumineux d'un serveur Linux à un autre

Solution 1 :

Sneakernet Quelqu'un ?

En supposant qu'il s'agit d'une copie unique, je ne suppose pas qu'il soit possible de copier simplement le fichier sur un CD (ou un autre support) et de le faire passer du jour au lendemain à la destination ?

Cela pourrait en fait être votre option la plus rapide car un transfert de fichier de cette taille, sur cette connexion, pourrait ne pas copier correctement... auquel cas vous pouvez tout recommencer.

rsync

Mon deuxième choix/tentative serait rsync car il détecte les transferts échoués, les transferts partiels, etc. et peut reprendre là où il s'est arrêté.

rsync --progress file1 file2 [email protected]:/destination/directory

L'indicateur --progress vous donnera des commentaires au lieu de rester assis là et de vous laisser deviner vous-même. :-)

Vuze (bittorrent)

Le troisième choix serait probablement d'essayer d'utiliser Vuze comme serveur torrent, puis de faire en sorte que votre site distant utilise un client bitorrent standard pour le télécharger. J'en connais d'autres qui l'ont fait mais vous savez... au moment où ils ont tout mis en place, etc... j'aurais pu mettre les données du jour au lendemain...

Cela dépend de votre situation, je suppose.

Bonne chance !

MISE À JOUR :

Tu sais, j'ai réfléchi un peu plus à ton problème. Pourquoi le fichier doit-il être une seule énorme archive tar ? Tar est parfaitement capable de diviser des fichiers volumineux en plus petits (pour couvrir les médias par exemple), alors pourquoi ne pas diviser cette énorme archive tar en morceaux plus gérables, puis transférer les morceaux à la place ?

Solution 2 :

Je l'ai déjà fait dans le passé, avec un fichier tbz2 de 60 Go. Je n'ai plus le script mais ça devrait être facile de le réécrire.

Tout d'abord, divisez votre fichier en morceaux d'environ 2 Go :

split --bytes=2000000000 your_file.tgz

Pour chaque morceau, calculez un hachage MD5 (c'est pour vérifier l'intégrité) et stockez-le quelque part, puis commencez à copier les morceaux et leur md5 sur le site distant avec l'outil de votre choix (moi :netcat-tar-pipe dans un écran séance).

Au bout d'un moment, vérifiez avec le md5 si vos pièces sont bonnes, puis :

cat your_file* > your_remote_file.tgz

Si vous avez également fait un MD5 du fichier original, vérifiez-le également. Si tout va bien, vous pouvez décompresser votre fichier, tout devrait bien se passer.

(Si je trouve le temps, je réécrirai le script)

Solution 3 :

Normalement, je suis un grand défenseur de rsync, mais lors du transfert d'un seul fichier pour la première fois, cela ne semble pas avoir beaucoup de sens. Si, toutefois, vous transfériez à nouveau le fichier avec seulement de légères différences, rsync serait clairement le gagnant. Si vous choisissez quand même d'utiliser rsync, je vous recommande fortement d'exécuter une extrémité dans --daemon mode pour éliminer le tunnel ssh qui tue les performances. La page de manuel décrit ce mode assez en détail.

Ma recommandation? FTP ou HTTP avec des serveurs et des clients prenant en charge la reprise des téléchargements interrompus. Les deux protocoles sont rapides et légers, évitant la pénalité ssh-tunnel. Apache + wget crierait vite.

L'astuce du tuyau netcat fonctionnerait également très bien. Tar n'est pas nécessaire lors du transfert d'un seul fichier volumineux. Et la raison pour laquelle il ne vous avertit pas quand c'est fait, c'est parce que vous ne le lui avez pas dit. Ajouter un -q0 côté serveur et il se comportera exactement comme prévu.

server$ nc -l -p 5000 > outfile.tgz

client$ nc -q0 server.example.com 5000 < infile.tgz

L'inconvénient de l'approche netcat est qu'elle ne vous permettra pas de reprendre si votre transfert meurt 74 Go dans...

Solution 4 :

Essayez netcat (parfois appelé nc). Ce qui suit fonctionne sur un répertoire, mais il devrait être assez facile de le modifier pour ne copier qu'un seul fichier.

Sur la case destination :

netcat -l -p 2342 | tar -C /target/dir -xzf -

Sur la boîte source :

tar czf * | netcat target_box 2342

Vous pouvez essayer de supprimer l'option 'z' dans les deux commandes tar pour un peu plus de vitesse car le fichier est déjà compressé.


Linux
  1. Comment copier les paramètres d'une machine à une autre ?

  2. Copier les dernières N-lignes d'un fichier à un autre ?

  3. Comment retrouver des mots d'un fichier dans un autre fichier ?

  4. Comment copier des commits d'un dépôt Git à un autre ?

  5. pscp copier le fichier à distance de Windows vers Linux

Copier des fichiers sous Linux

Commande Cp sous Linux (Copier des fichiers)

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Copie exacte des fichiers de NTFS vers un autre NTFS en utilisant Linux

Pourquoi rsync ne parvient-il pas à copier les fichiers de /sys sous Linux ?