Le moyen le plus simple de transférer rapidement des fichiers entre des serveurs Linux?

16

J'ai besoin de transférer des fichiers d'un serveur CentOS à un autre. Transfère des fichiers de 5 Mo toutes les 10 minutes environ. Pas besoin de chiffrement.

Qu'est-ce qui était facile pour un transfert rapide de fichiers?

Y a-t-il quelque chose de plus simple que ftp?

Merci!

Alex L
la source
1
J'ai la foi que le goudron sur netcat triomphera ... heh heh ...: serverfault.com/questions/18125/…
Evan Anderson
Comme je n'ai pas besoin de chiffrement mais de vitesse, je préfère rsync.
Alex L
Je viens d'apprendre que les transferts http n'ont pas beaucoup de frais donc je pourrais peut-être simplement l'utiliser.
Alex L
Ne modifiez pas une réponse dans votre question, postez-la plutôt comme réponse. Annulées.
HopelessN00b
pour "rapide" voir aussi unix.stackexchange.com/questions/48399/…
rogerdpack

Réponses:

25

rsync

J'utiliserais rsync avant d'utiliser ftp ou tftp.

Plus d'options et (selon mon expérience) un transfert plus fiable.

KPWINC
la source
1
J'ai également constaté que rsync obtient généralement un débit plus élevé que toute autre chose (scp, cifs, nfs)
Ophidian
qu'en est-il des transferts http?
Alex L
@Ophidian Voulez-vous dire d'utiliser rsync comme démon? Sinon, comment peut-il être plus rapide que scp, car les deux utilisent ssh et il y a un cryptage.
balki
@balki Oui, le démon rsync. Il n'est pas particulièrement bavard, fait un bon travail de chargement des données du disque sur la ligne, et il fait aussi peu de travail que nécessaire pour compléter la demande (applique des différences pour les fichiers texte par exemple).
Ophidian
21

tar over ssh est correct, mais tar over TCP via netcat est à peu près aussi faible que possible! Si c'est une chose unique, essayez ceci:

Sur le récepteur:

nc -l -p 8989 | tar x

Sur l'expéditeur:

tar cf - /source-path | nc (receiving host ip address) 8989

Si c'est quelque chose que vous allez faire régulièrement, j'utiliserais probablement rsync.

Evan Anderson
la source
+1 pour netcat, le couteau de l'armée suisse
chmeee
Même chose pour vous de ne pas avoir lu Evan. Hahaha! Ce n'est en fait pas une chose unique. Il a dit qu'il allait transférer des fichiers de 5 Mo toutes les 10 minutes environ. Peut-être que l'envoi via le code Morse serait une bonne alternative? ;-) (note: blague privée entre Evan et moi-même)
KPWINC
8

Deux personnes ont mentionné tar sur ssh, mais n'ont pas précisé comment procéder. Pour mémoire, la procédure de base consiste à exécuter:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Ou, si vous souhaitez commencer les transferts depuis le destinataire:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

L'avantage de procéder de cette façon par rapport à la solution netcat d'Evan est que le tout peut être démarré à partir d'un ordinateur; vous n'avez pas à coordonner deux appels netcat. Si vous avez besoin que cela s'exécute automatiquement, vous pouvez configurer une clé ssh qui vous permet d'établir des connexions sans phrase de passe et d'utiliser cette clé pour ces connexions.

ssh a une option -C pour compresser son flux de données, ou vous pouvez utiliser la capacité de compression intégrée de GNU tar:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync est une autre option, mais son point fort réside dans la mise à jour des fichiers qui existent déjà du côté de la réception. Je l'ai trouvé plus lent que scp ou tar / ssh lors de son utilisation pour transférer des fichiers qui n'existent pas déjà à l'autre extrémité.

Kenster
la source
1
+1 Quoi, vous voulez dire que tout le monde ne sait pas intuitivement comment tarer sur ssh? Bizarre. :)
chaos
tar, en soi, n'est pas fiable - il n'y a pas de vérification d'intégrité mais avec SSH (TLS), vous obtenez l'intégrité en raison de la capacité de TLS à détecter en vol les modifications des données. Rsync est un meilleur choix et Rsync car il fera une meilleure vérification d'intégrité sans chiffrement; le chiffrement déclaré par l'OP n'était pas nécessaire.
Kilo
De quelle vérification d'intégrité le tar a-t-il besoin? Les couches TCP et ssh fournissent un transport de données fiable. Si vous affirmez que tar lui-même peut contenir des bogues, vous devez traiter rsync de la même manière. J'ai en fait eu des transferts rsync bloqués sur moi en raison de problèmes de protocole. Je ne me souviens pas qu'un pipeline tar / untar ait jamais fait ça.
Kenster
6

J'utiliserais scpou tarplus ssh, honnêtement. Le cryptage ralentit les choses, mais la facilité de configuration et d'utilisation, la fiabilité et (subjectivement, bien sûr) la familiarité me rendent prêt à prendre le coup, sauf si j'ai vraiment besoin de cette vitesse.

Vous pouvez également accélérer le transfert ssh en lui disant d'utiliser un chiffre plus rapide que celui par défaut. La valeur par défaut est généralement 3deset vous pouvez généralement le faire -c des, ce qui sera évidemment plus rapide et -c blowfishest également représenté aussi rapidement, même si je ne l'ai pas testé avec précision.

(À l'époque de SSHv1, vous pouviez souvent le faire -c none, mais je suppose que quelqu'un a décidé que c'était du mauvais juju.)

le chaos
la source
4

Si vous devez passer par scp / ssh, mes expériences montrent que le chiffrement le plus rapide activé par défaut de nos jours est RC4. Vous spécifiez le chiffrement via ' -c arcfour ' dans votre commande ssh / scp:

pour la copie initiale:

  • scp -c arcfour -r foo/ desthost:/destdir

pour les mises à jour:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir
allaryine
la source
3

Rsync est un bon moyen de procéder car si vous vous retrouvez à transférer les mêmes fichiers plus d'une fois, cela accélérera la copie, comme le montre cette citation de la page de manuel.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.
thepocketwade
la source
2

FTP est assez simple, mais un moyen encore plus simple peut être de créer un partage NFS sur une machine et de le monter sur l'autre. Ensuite, la copie des fichiers consistera à faire un cp d'un répertoire à un autre.

Swoogan
la source
selon les besoins. Je n'utiliserais pas NFS sur Internet par exemple.
Kyle Hodgson
1
Bon point. Dans ce cas, je recommanderais rsync car il peut reprendre là où il avait été interrompu. Aussi parce qu'il transfère uniquement le delta entre la source et la destination.
Swoogan
la question était très générale, j'aime soulution posté par Swoogan, en particulier cet auteur a mentionné qu'il a besoin de la solution la plus simple et ne nécessite pas de cryptage
integratorIT
2

Si vous voulez de la vitesse, vous pouvez utiliser netcat et tar. Il sera plus rapide que ssh, rsync ou scp sur un réseau local où le chiffrement n'est pas un problème. Google "netcat tar".

DestinationServer

nc -l -p 7878 | tar -C /target/dir -xzf -

SourceServer

tar -cz /source/dir | nc DestinationServer 7878

Cela nécessite évidemment que netcat soit réellement installé. Google "netcat tar" pour plus d'informations.

robertmoggach
la source
1

Je crois que vous avez déjà résolu votre problème, mais si votre ssh fonctionne sur un autre port (pas sur le port standard 22), vous pouvez l'utiliser

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / [email protected]: / remote / dir

Remarque: - remplacez XXXXX par votre numéro de port - remplacez 192.16.1.2 par l'IP du serveur distant correct

mangia
la source