Comment sauvegarder sous Linux? 15 exemples de la commande rsync
rsync (remote synchronistion) signifie synchronisation à distante.
rsync est utilisé pour effectuer des actions de sauvegarde sous UNIX / Linux.
L’utilitaire rsync synchronise des fichiers et répertoires d’un emplacement à l’autre de manière efficace.
L’emplacement de la sauvegarde peut se trouver soit sur la machine local soit un serveur distant.
Les importantes fonctionnalités de rsync
- Vitesse: A la première utilisation, rsync duplique tout le contenu des répertoires depuis la source vers la destination. Les fois d’après, rsync ne transfère vers l’emplacement de destination seulement les blocs ou octets modifiés, ce qui a pour conséquence de rendre le transfert très rapide.
- Sécurité: Pendant le transfert rsync permet le chiffrement des données en utilisant le protocole SSH.
- Moins de bande passante: rsync compresse et décompresse (envoie/réception) les données bloc par bloc.
- Privileges: Aucun privilège spécial n’est nécessaire pour installer et exécuter rsync.
syntaxe
1 | $ rsync options source destination |
La source et la destination peuvent être locales ou distantes. Lorsque c’est distant, il est nécessaire d’indiquer le nom de la connexion, du serveur distant ainsi que le chemin.
Exemple 1. Synchroniser deux répertoires au sein d’une même machine
Pour synchroniser deux répertoires sur une machine locale utiliser la commande rsync -zvr
1 2 3 4 5 6 7 | $ rsync -zvr /home/romain/Programmation/ /var/opt/application/ sending incremental file list memcpy.c memset.c sent 579 bytes received 54 bytes 1,266.00 bytes/sec total size is 683 speedup is 1.08 |
Dans l’exemple rsync ci-dessus:
- -z est pour activer la compression
- -v pour verbeux
- -r pour récursif
Maintenant, laissez moi vous montrer l’horodate sur l’un des fichiers qui a été copié. Comme vous pouvez le voir ci-dessous, rsync n’a pas préservé l’horodate lors la synchronisation.
1 2 3 | $ ls -l /home/romain/Programmation/memset.c /var/opt/application/memset.c -rwxrwxrwx 1 romain romain 371 3 nov. 2014 /home/romain/Programmation/memset.c -rwxr-xr-x 1 romain romain 371 11 juil. 10:31 /var/opt/application/memset.c |
Exemple 2. Préserver l’horodate lors de la synchronisation en utilisant rsync -a
L’option -a de rsync indique l’utilisation du mode archive. L’option -a possède les caractéristiques suivantes:
- Mode récursif
- Préserver les liens symboliques
- Préserver les permissions
- Préserver l’horodate
- Préserver les propriétaires et groupes
Maintenant, exécutons la même commande que celle fournie dans l’exemple 1 (mais avec l’option -a de rsync) comme représenté ci-dessous:
1 2 3 4 5 6 7 8 | $ rsync -azv /home/romain/Programmation/ /var/opt/application/ sending incremental file list ./ memcpy.c memset.c sent 600 bytes received 57 bytes 1,314.00 bytes/sec total size is 683 speedup is 1.04 |
Comme vous pouvez le voir ci-dessous rsync a préservé l’horodate:
1 2 3 | $ ls -l /home/romain/Programmation/memset.c /var/opt/application/memset.c -rwxrwxrwx 1 romain romain 371 3 nov. 2014 /home/romain/Programmation/memset.c -rwxrwxrwx 1 romain romain 371 3 nov. 2014 /var/opt/application/memset.c |
Exemple 3. Synchroniser un fichier seulement
Pour copier seulement un fichier, spécifiez le nom du fichier à la commande rsync, tel qu’indiqué ci-dessous:
1 2 3 4 5 | $ rsync -v /home/romain/Travail/essai/file.c /var/opt/application/ file.c sent 80 bytes received 35 bytes 230.00 bytes/sec total size is 0 speedup is 0.00 |
Exemple 4. Synchroniser des fichiers vers un serveur distant
Vous pouvez avec rsync synchroniser des fichiers et répertoires entre une machine locale et un serveur distant.
1 2 3 4 5 6 7 8 9 | $ rsync -avz /home/rom/tmp romain@192.168.2.1:/opt/app Password: building file list ... done ./ src/ bin/Linux sent 1721301 bytes received 510 bytes 5402111.10 bytes/sec total size is 21325458 speedup is 2.97 |
Pour se synchroniser avec un serveur distant, vous devez spécifier le nom d’utilisateur ainsi que l’adresse IP du serveur distant. Vous devez également spécifier le répertoire de destination du serveur distant. Le format est le suivant: utilisateur@nom_machine:chemin
Comme vous pouvez le constater ci-dessus, pour utiliser rsync avec un serveur distant, le mot de passe est requis.
Parfois vous ne voulez pas entrer de mot passe pour sauvegarder des fichiers locaux vers un serveur distant. Par exemple, si vous avez un script shell de sauvegarde, qui copie des fichiers locaux vers un serveur distant avec rsync, vous aurez besoin que rsync ne demande pas de mot de passe.
Pou ce faire, configurez ssh sans mot de passe de connexion.
Exemple 5. Synchroniser des fichiers depuis un serveur distant
Lorsque vous voulez synchroniser des fichiers depuis un serveur distant vers votre machine locale, spécifiez le chemin distant dans source et le chemin local dans la cible, comme indiqué ci-dessous.
1 2 3 4 5 6 7 8 9 | $ rsync -avz romain@192.168.2.1:/opt/app /home/rom/tmp Password: receiving file list ... done ./ src/ bin/Linux sent 1721301 bytes received 510 bytes 5402111.10 bytes/sec total size is 21325458 speedup is 2.97 |
Exemple 6. Shell distant pour synchronisation
rsync vous permet de spécifier le shell distant que vous souhaitez utiliser. Vous pouvez utiliser rsync ssh pour permettre la connexion à distance sécurisée.
Utilisez rsync -e ssh pour spécifier quel shell distant utiliser. Ici, rsync va utiliser ssh.
1 2 3 4 5 6 7 8 9 | $ rsync -avz -e ssh romain@192.168.2.1:/opt/app /home/rom/tmp Password: receiving file list ... done ./ src/ bin/Linux sent 1721301 bytes received 510 bytes 5402111.10 bytes/sec total size is 21325458 speedup is 2.97 |
Exemple 7. Ne pas écraser les fichiers de destination modifiés
Dans une situation de synchronisation typique, si un fichier est modifié à la destination, nous pourrions ne pas vouloir écraser le fichier avec l’ancien fichier de la source.
Utilisez l’option -u de rsync pour faire cela. (c.-à-d. ne pas écraser un fichier à la destination, s’il a été modifiée).
Dans l’exemple suivant, le fichier de destination appelé file.c a déjà été modifié. Ainsi, il ne sera pas écrasé avec rsync -u.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ ls -l /home/rom/Prog/file.c -rwxrwxrwx 1 romain romain 371 3 nov. 2014 /home/rom/Prog/file.c $ rsync -avz romain@192.168.2.1:/opt/Prog /home/rom/Prog/ Password: receiving file list ... done ./ src/ sent 1721301 bytes received 510 bytes 5402111.10 bytes/sec total size is 21325458 speedup is 2.97 $ ls -l /home/rom/Prog/file.c -rwxrwxrwx 1 romain romain 371 3 nov. 2014 /home/rom/Prog/file.c |
Exemple 9. Voir la progression de rsync durant le transfert
Lorsque vous utilisez rsync pour la sauvegarde, vous voudrez peut-être connaître la progression de la sauvegarde. Combien de fichiers sont copiés, à quel rythme, etc.
L’option rsync –progress affiche des informations détaillées d’avancement de l’exécution de rsync comme indiqué ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ rsync -avz --progress romain@192.168.2.1:/opt/application/ /root/temp/ Password: receiving file list ... 25 files to consider ./ file.c 6358528 100% 11.28MB/s 0:00:00 (xfer#1, to-check=17/19) memcpy.c 13388 100% 10.09kB/s 0:00:00 (xfer#2, to-check=16/19) . . . sent 506 bytes received 18818211 bytes 4188582.27 bytes/sec total size is 70305058 speedup is 2.87 |
Exemple 10. Supprimer les fichiers créés sur la cible
Si un fichier est absent à la source, mais présent sur la cible, vous voudriez peut-être que rsync supprime le fichier sur la cible.
Dans ce cas, utilisez l’option —delete comme indiqué ci-dessous. L’option –delete de rsync supprime les fichiers qui ne sont plus présent dans le répertoire source.
1 2 3 4 5 6 7 8 9 10 11 | # Source et cible sont synchronisés. Création d'un nouveau fichier dans la cible. $ > nouveau-fichier.txt $ rsync -avz --delete romain@192.168.2.1:/opt/application/ . Password: receiving file list ... done deleting nouveau-fichier.txt ./ sent 20 bytes received 290 bytes 42.92 bytes/sec total size is 423052338 speedup is 508001.51 |
La cible a le nouveau fichier appelé nouveau-fichier.txt, lors de la synchronisation depuis la source avec l’option —delete, nouveau-fichier.txt a était enlevé.
Exemple 11. Ne pas créer de nouveau fichier sur la cible
Si vous le souhaitez, vous pouvez mettre à jour (synchroniser), seulement les fichiers déjà existants sur la cible. En cas de nouveaux fichiers présents au sein de la source, donc absent sur la cible, vous pouvez interdire la création de ces nouveaux fichiers sur la cible. Pour cette fonction, utilisez la commande rsync avec l’option –existing.
Tout d’abord, ajout de nouveau–fichier.txt sur la source.
1 | [/home/romain/Prog ]$ > nouveau-fichier.txt |
Ensuite, exécution de rsync depuis la cible.
1 2 3 4 5 6 7 | $ rsync -avz --existing romain@192.168.1.2:/opt/application/ . romain@192.168.1.2's password: receiving file list ... done ./ sent 26 bytes received 419 bytes 45.24 bytes/sec total size is 18251424 speedup is 142991.96 |
En observant la sortie ci-dessus, nous pouvons constater que nouveau-fichier.txt n’a pas été reçu.
Exemple 12. Voir les modifications entre la source et la destination
Cette option est utile pour voir quels sont les différences des fichiers et répertoires entre la source et la cible.
À la source:
1 2 3 4 | $ ls -l Programmation/ -rw-r--r-- 1 romain romain 5 11 juil. 14:55 file.c -rwxrwxrwx 1 romain romain 341 11 juil. 14:53 memcpy.c -rwxrwxrwx 1 romain romain 389 11 juil. 14:53 memset.c |
À la destination:
1 2 3 4 | $ ls -l /tmp/Programmation -rw-r--r-- 1 romain romain 5 11 juil. 14:55 file.c -rwxrwxrwx 1 root root 341 11 juil. 14:53 memcpy.c -rwxrwxrwx 1 romain romain 1 11 juil. 15:05 memset.c |
Dans l’exemple ci-dessus, entre la source et la destination, il existe deux différences. Tout d’abord, le propriétaire et le groupe du fichier memcpy.c diffèrent. Ensuite, la taille diffère pour le fichier memset.c.
Voyons maintenant comment rsync affiche cette différence. L’option -i affiche les éléments modifiés.
1 2 3 4 5 6 7 8 | $ rsync -avzi Programmation/ romaint@192.168.1.2:/opt/Programmation/ Password: receiving file list ... done .f....og... memcpy.c >f.st...... memset.c sent 403 bytes received 38 bytes 882.00 bytes/sec total size is 735 speedup is 1.67 |
Sur la sortie, les modifications sont indiquées par 9 caractères placés devant le nom de chaque fichier ou répertoire.
Dans notre exemple, les caractères se trouvant devant les noms de memcpy.c (et memset.c) ont les significations suivantes:
1 2 3 4 5 6 | f indique que c'est un fichier o le propriétaire modifié g le groupe a changé > <span id="result_box" class="" lang="fr" tabindex="-1"><span class="hps">indique que le fichier</span> <span class="hps">est transféré</span> <span class="hps">à l'hôte local</span>. s indique une modification de la taille du fichier t modification de l'horodate</span> |
Exemple 13. Inclure et exclure des fichiers à l’aide de motif (pattern)
rsync vous permet de fournir un motif (pattern) pour les fichiers ou répertoires que vous souhaitez inclure ou exclure durant la synchronisation.
1 2 3 4 5 6 7 8 9 10 11 | $ rsync -avz --include 'r*' --exclude '*' romain@192.168.2.1:/opt/application/ /home/rom/temp/ Password: receiving file list ... done ./ renice resize rpm2cpio sent 829 bytes received 281738 bytes 2184913.78 bytes/sec total size is 72768000 speedup is 3.09 |
Dans l’exemple ci-dessus, seulement les fichiers commençant par « r » sonr inclus (rsync include) et tous les autres sont exclus (rsync exclude ‘*’).
Exemple 14. Ne pas transférer les gros fichiers
Vous pouvez demander à rsync de ne pas transférer des fichiers qui sont supérieures à une taille spécifique en utilisant l’option rsync —max–size.
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ rsync -avz --max-size='300K' romain@192.168.2.1:/opt/application/ /home/romain/temp/ Password: receiving file list ... done ./ archiv.cpi fichier fichier2 file file.c log.txt sent 222 bytes received 523181 bytes 19972.31 bytes/sec total size is 37305258 speedup is 366.35 |
max–size = 300K demande à rsync de transférer uniquement les fichiers qui sont inférieures ou égales à 300K. Vous pouvez indiquer M pour mégaoctets et G pour gigaoctets.
Exemple 15. Transférez les fichiers en entier
Une des caractéristiques principales de rsync est qu’au lieu d’envoyer des fichiers en entier, il n’envoie que les blocs modifiés.
Si la bande passante du réseau n’est pas un souci pour vous, mais que vous êtes par contre limité en CPU, vous pouvez demander à transférer les fichiers complets, en utilisant rsync –W.
Le processus rsync sera plus rapide, car les contrôles sur la source et la cible ne seront plus effectués.
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ rsync -avzW romain@192.168.2.1:/opt/application/ /home/romain/temp/ Password: receiving file list ... done ./ archiv.cpi fichier fichier2 file file.c log.txt sent 422 bytes received 923181 bytes 29972.31 bytes/sec total size is 37305258 speedup is 366.35 |