Il arrive très souvent que l’on ait besoin de transférer des fichiers rapidement, d’un serveur à un autre par exemple.
Bien sûr, on peut utiliser le FTP mais il y a beaucoup plus rapide et efficace : je vous présente rsync.[no_toc]
Synchronisation distante
rsync (remote synchronization ou “synchronisation distante” en français) est un logiciel libre de synchronisation de fichiers (disponible sous toutes les plateformes).
La synchronisation est unidirectionnelle, c’est-à-dire qu’elle copie les fichiers de la source en direction de la destination.
rsync
est donc utilisé pour réaliser des sauvegardes incrémentales ou pour diffuser le contenu d’un répertoire de référence.
Je vous donne ici les deux commandes que j’utilise quotidiennement lors de ma gestion des serveurs.
Copier tous les fichiers d’un répertoire du serveur A dans le répertoire équivalent du serveur B
Premièrement, connectez-vous via SSH à votre serveur A. Voici la commande :
/* Copie tous les fichiers de /home/website/ vers serveur B. */
rsync --ignore-existing --progress /home/movies/*.* matt@serveurB.net:/home/movies/
Code language: PHP (php)
Explications:
--ignore-existing
signifie que si le fichier existe déjà, on ne le remplace pas.--progress
montre la vitesse du transfert et les noms des fichiers transférés.matt@serveurB.net
est le nom du login SSH (matt) associé à l’adresse du serveur B (IP ou nom de domaine)./home/website/
: répertoire vers lequel copier les fichiers.
En lançant cette commande, je récupère sur le serveur B tous les fichiers qui se trouvent dans le répertoire /home/movies/
du serveur A. Je ne remplace pas les fichiers existants : étant donné que je ne synchronise qu’avec rsync, ce serait inutile.
Copier tous les fichiers et sous-répertoires d’un répertoire (synchronisation récursive) sur le serveur B
/* Copie tous les fichiers et sous-dossiers de /home/series/ sur serveur B. */
rsync --ignore-existing --progress -r /home/series/*.* matt@serveurB.net:/home/series/
Code language: PHP (php)
Explications: -r
signifie de manière récursive, c’est-à-dire que tous les fichiers et sous-dossiers du répertoire /home/series/
seront copiés sur le serveur B.
C’est idéal pour sauvegarder les fichiers du site ou les ressources statiques. On lance la commande dans le terminal et hop, on peut aller se faire un café, tout tourne en fond de tâche.
Synchronisation récursive avec connexion SSH sur un autre port que le port 22
Reprenons l’exemple précédent mais connectons-nous maintenant sur le serveur B en SSH sur un autre port que le port par défaut (22) :
rsync --ignore-existing --progress -vr --rsh='ssh -p59222' /home/vids/*.* admin@example.com:/volume1/vids
Code language: PHP (php)
Ici, --rsh='ssh -p59222'
indique que la connexion SSH doit se faire sur le port indiqué (ici 59222). Cela me permet de sauvegarder tout un répertoire et de l’envoyer sur mon NAS Synology. Très pratique !
Petit exemple fictif
Allez, juste pour le fun, voici un transfert initié avec rsync entre deux serveurs distants d’à peu près 8 000 kilomètres :
Bref, rsync, ça dépote et c’est une commande extrêmement pratique à l’usage.
Recherchez-vous un expert WordPress ou WooCommerce sur qui vous pouvez compter? Ne cherchez plus.
Merci Matt pour ce petit tuto.
root@184.82.118.228 :
pwd ?
lol.
J’ai pris une seedbox pour un mois histoire de tester et d’étudier comment ça fonctionnait, c’est pour ça que je n’ai pas flouté l’IP ;-)
Bonjour,
merci pour cette commande bien utile, mais comment faire si le serveur B a un port autre que le port par defaut (22)?
merci :)
Bonjour,
Pour utiliser un autre port (par exemple 8023), il suffit d’ajouter :
à la commande.
il faut l ajouter a la fin de la commande?
pour ton exemple ça donnerait:
rsync –ignore-existing –progress /home/movies/*.* matt@serveurB.net:/home/movies/–rsh=’ssh -p8023′
merci de ton aide !
Mise à jour de l’article : ajout de la synchronisation récursive sur un autre port SSH que celui par défaut.
Bonsoir,
Super tuto mais comment éviter de taper le password après le lancement de le commande rsync. Merci.
Bonsoir,
Il faut générer une clé SSH et la copier sur le serveur distant.
Bonjour,
si je lance je me connecte sur le serveur A puis je lance Rsync vers le serveur B, qui execute le tache mon Pc, le serveurs A, le serveur B? les données passe t’il par ma machine? puis je éteindre mon pc sans interrompre la tache ?
est il possible d’avoir alors une journal ou de suivre? ( cas de gros transfert)
merci
Bonjour xalonecorp,
Si tu fermes le terminal de ton PC (qui se connecte au serveur A pour transférer vers serveur B), alors la tâche sera interrompue. Les données ne transitent pas par ton PC, elles sont transférées directement de A vers B – ton PC est juste le donneur d’ordre.
Pour pouvoir éteindre ton PC tout en gardant la tâche active, tu as plusieurs solutions:
A. lancer la tâche avec
nohup
. Syntaxe :B. lancer la tâche avec
disown
:ou
C. installer
screen
et suivre le guide :De serveur à serveur, le transfert n’est limité que par la bande passante des serveurs. Tu peux suivre la vitesse du transfert avec l’argument
--progress
dersync
.Bonjour,
J’ai testé la commande:
rsync –ignore-existing –progress /home/test/*.* DenisNAS@192.168.1.51:/DENIS
sur un PC avec Linux Mint et le dossier test dans le dossier personnel home
sur mon NAS Synology j’ai un dossier DENIS avec un utilisateur DenisNAS pour le service rsync..
Voici le retour de la commande rsync ci-dessus après avoir saisi le mot de passe de DenisNAS:
Could not chdir to home directory /var/services/homes/DenisNAS: No such file or directory
sending incremental file list
rsync: change_dir “/home/denis/test” failed: No such file or directory (2)
ERROR: module is read only
rsync error: syntax or usage error (code 1) at main.c(1131) [Receiver=3.0.9]
rsync: connection unexpectedly closed (112 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2]
Avez vous une idée du problème rencontré ?
Bien Cordialement
Merci
Bonjour Rémy,
Le problème vient du chemin que vous indiquez sur le NAS. Dans la commande, vous avez à la fin: `/DENIS` mais cela ne correspond pas au véritable chemin de votre dossier utilisateur sur un Synology.
Le bon chemin devrait commencer par `/volume1`. S’il s’agit du répertoire de l’utilisateur, ce serait `/volume1/homes/DENIS`.
Dîtes-moi si cela passe mieux,
Matt
Merci pour votre réponse hyper rapide !!!!
la nouvelle commande:
rsync –ignore-existing –progress /home/test/*.* DenisNAS@192.168.1.51:/volume1/homes/DENIS
et le même retour:
Could not chdir to home directory /var/services/homes/DenisNAS: No such file or directory
rsync: change_dir “/home/test” failed: No such file or directory (2)
ERROR: module is read only
rsync error: syntax or usage error (code 1) at main.c(1131) [Receiver=3.0.9]
rsync: connection unexpectedly closed (112 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2]
merci
Bonjour Remy,
Vérifiez dans Panneau de Configuration > Utilisateur > Avancé > Accueil utilisateur que la case Activer le service d’accueil de l’utilisateur soit bien cochée.