J'essaie de copier un tgz de 75 gigaoctets (instantané mysql lvm) d'un serveur Linux dans notre centre de données LA vers un autre serveur Linux dans notre centre de données NY sur une liaison de 10 Mo.
J'obtiens environ 20-30Kb / s avec rsync ou scp qui oscille entre 200-300 heures.
Pour le moment, c'est un lien relativement silencieux car le deuxième centre de données n'est pas encore actif et j'ai obtenu d'excellentes vitesses de transferts de petits fichiers.
J'ai suivi différents guides de réglage tcp que j'ai trouvés via google en vain (peut-être que je lis les mauvais guides, j'en ai un bon?).
J'ai vu l'astuce du tunnel tar + netcat, mais je crois comprendre que cela n'est bon que pour BEAUCOUP de petits fichiers et ne vous met pas à jour lorsque le transfert du fichier est effectivement terminé.
Avant de recourir à l'expédition d'un disque dur, quelqu'un a-t-il une bonne entrée?
MISE À JOUR: Eh bien ... ce peut être le lien après tout :( Voir mes tests ci-dessous ...
Transferts de NY à LA:
Obtenir un fichier vierge.
[nathan@laobnas test]$ dd if=/dev/zero of=FROM_LA_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.412 seconds, 164 MB/s
[nathan@laobnas test]$ scp -C obnas:/obbkup/test/FROM_NY_TEST .
FROM_NY_TEST 3% 146MB 9.4MB/s 07:52 ETA
Obtention de l'archive tar instantanée.
[nathan@obnas db_backup]$ ls -la db_dump.08120922.tar.gz
-rw-r--r-- 1 root root 30428904033 Aug 12 22:42 db_dump.08120922.tar.gz
[nathan@laobnas test]$ scp -C obnas:/obbkup/db_backup/db_dump.08120922.tar.gz .
db_dump.08120922.tar.gz 0% 56MB 574.3KB/s 14:20:40 ET
Transferts de LA à NY:
Obtenir un fichier vierge.
[nathan@obnas test]$ dd if=/dev/zero of=FROM_NY_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.2501 seconds, 165 MB/s
[nathan@obnas test]$ scp -C laobnas:/obbkup/test/FROM_LA_TEST .
FROM_LA_TEST 0% 6008KB 497.1KB/s 2:37:22 ETA
Obtention de l'archive tar instantanée.
[nathan@laobnas db_backup]$ ls -la db_dump_08120901.tar.gz
-rw-r--r-- 1 root root 31090827509 Aug 12 21:21 db_dump_08120901.tar.gz
[nathan@obnas test]$ scp -C laobnas:/obbkup/db_backup/db_dump_08120901.tar.gz .
db_dump_08120901.tar.gz 0% 324KB 26.8KB/s 314:11:38 ETA
Je suppose que je vais en discuter avec les gens qui gèrent nos installations, le lien est étiqueté comme un lien MPLS / Ethernet 10 Mo. (hausser les épaules)
tcpdump
. Cela peut vous aider à découvrir ce qui ralentit le transfert.Réponses:
Sneakernet Quelqu'un?
En supposant qu'il s'agit d'une copie unique, je ne pense pas qu'il soit possible de simplement copier le fichier sur un CD (ou autre support) et du jour au lendemain vers la destination.
Cela pourrait en fait être votre option la plus rapide car un transfert de fichiers de cette taille, via cette connexion, peut ne pas copier correctement ... dans ce cas, vous pouvez recommencer à zéro.
rsync
Mon deuxième choix / tentative serait rsync car il détecte les transferts en échec, les transferts partiels, etc. et peut reprendre là où il s'était arrêté.
Le drapeau --progress vous donnera des commentaires au lieu de simplement rester là et vous laisser vous remettre en question. :-)
Vuze (bittorrent)
Le troisième choix serait probablement d'essayer d'utiliser Vuze comme serveur torrent, puis de faire en sorte que votre emplacement distant utilise un client bitorrent standard pour le télécharger. Je connais d'autres qui l'ont fait mais vous savez ... au moment où ils ont tout mis en place, etc ... J'aurais pu passer la nuit à les données ...
Cela dépend de votre situation, je suppose.
Bonne chance!
MISE À JOUR:
Vous savez, j'ai réfléchi un peu plus à votre 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?
la source
Je l'ai fait dans le passé, avec un fichier tbz2 de 60 Go. Je n'ai plus le script mais il devrait être facile de le réécrire.
Tout d'abord, divisez votre fichier en morceaux de ~ 2 Go:
Pour chaque pièce, calculez un hachage MD5 (c'est pour vérifier l'intégrité) et stockez-le quelque part, puis commencez à copier les pièces et leur md5 sur le site distant avec l'outil de votre choix (moi: netcat-tar-pipe dans un écran session).
Après un certain temps, vérifiez auprès du md5 si vos pièces sont correctes, puis:
Si vous avez également effectué un MD5 du fichier d'origine, 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)
la source
Normalement, je suis un grand défenseur de rsync, mais lorsque vous transférez un seul fichier pour la première fois, cela ne semble pas avoir beaucoup de sens. Si, cependant, vous retransfertiez le fichier avec de légères différences, rsync serait le vainqueur incontestable. Si vous choisissez d'utiliser rsync de toute façon, je vous recommande vivement d'exécuter une extrémité en
--daemon
mode pour éliminer le tunnel ssh qui réduit les performances. La page de manuel décrit ce mode de manière assez détaillée.Ma recommandation? FTP ou HTTP avec des serveurs et des clients qui prennent 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 de pipe netcat fonctionnerait également bien. Tar n'est pas nécessaire lors du transfert d'un seul gros fichier. 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. Ajoutez un
-q0
indicateur côté serveur et il se comportera exactement comme vous vous y attendez.L'inconvénient de l'approche Netcat est qu'elle ne vous permettra pas de reprendre si votre transfert meurt 74 Go dans ...
la source
Donnez un coup de filet à 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 de destination:
Sur la boîte source:
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é.
la source
SCP et Rsync par défaut (qui utilise SCP) sont très lents pour les gros fichiers. Je suppose que je chercherais à utiliser un protocole avec des frais généraux inférieurs. Avez-vous essayé d'utiliser un chiffrement de chiffrement plus simple, ou pas du tout? Essayez d'examiner l'
--rsh
option pour rsync de modifier la méthode de transfert.Pourquoi pas FTP ou HTTP?
la source
Bien qu'il ajoute un peu de surcharge à la situation, BitTorrent est en fait une très bonne solution pour transférer des fichiers volumineux. BitTorrent possède de nombreuses fonctionnalités intéressantes, telles que la segmentation native d'un fichier et la somme de contrôle de chaque segment qui peut être retransmis s'il est corrompu.
Un programme comme Azureus [maintenant connu sous le nom de Vuze] contient toutes les pièces dont vous aurez besoin pour créer, serveur et télécharger des torrents dans une seule application. Gardez à l'esprit qu'Azureus n'est pas la plus légère des solutions disponibles pour BitTorrent et je pense qu'elle nécessite également son interface graphique - il existe cependant de nombreux outils torrent pilotés par ligne de commande pour linux.
la source
Eh bien, personnellement, 20-30 Ko / s semble assez faible pour une liaison de 10 Mo (en supposant 10 Mo et non 10 Mo).
Si j'étais vous, je ferais l'une des deux choses (en supposant que l'accès physique n'est pas disponible) -
Dans les deux cas, je vous conseille de diviser le gros fichier en plus petits morceaux, environ 500 Mo. Juste en cas de corruption en transit.
Lorsque vous avez les plus petits morceaux, utilisez à nouveau rsync, ou je préfère personnellement utiliser une session ftp sécurisée privée, puis CRC les fichiers à la fin.
la source
Quelques questions pourraient aider dans les discussions: à quel point les données à transférer sont-elles critiques? Est-ce pour la récupération après sinistre, la sauvegarde à chaud, le stockage hors ligne ou quoi? Avez-vous l'intention de sauvegarder la base de données lorsqu'elle est en marche ou en panne? Qu'en est-il de la mise en place d'une base de données sur le système distant et de les maintenir synchronisées à l'aide de la mise en cluster ou de la mise à jour via les journaux des modifications (je ne connais pas totalement les capacités d'un système de base de données MySql). Cela pourrait aider à réduire la quantité de données devant être transférées via le lien.
la source
bbcp va fragmenter le fichier pour vous et le copier avec plusieurs flux.
la source
Réponse tardive pour les googleurs:
Lors du transfert de grands ensembles de données, rsync peut être utilisé pour comparer la source et la destination, puis écrire un fichier de commandes sur un support amovible local à l'aide de l'indicateur --only-write-batch. Vous expédiez ensuite le média local à l'emplacement distant, le branchez et exécutez à nouveau rsync, en utilisant --read-batch pour incorporer les modifications dans l'ensemble de données distant.
Si les fichiers source changent pendant le transport physique, ou si le support de transport se remplit, vous pouvez simplement continuer à répéter --only-write-batch | navire | - cycle de lecture-batch jusqu'à ce que la destination soit entièrement rattrapée.
(Réf: j'étais l'un des auteurs de cette fonctionnalité dans rsync - pour plus de contexte et de cas d'utilisation, voir cette discussion sur la mise en œuvre du prototype: https://lists.samba.org/archive/rsync/2005-March/011964 .html )
la source