grimboite/articles/sys/2015-01-17-rsync.md

4.2 KiB

Title Date
rsync 2015-01-17

Pour transférer des fichiers de manière sécurisé, rien de mieux qu'SSH (ou qu'un disque externe coulé dans du béton. Au choix). [SCP](|filename|2013-03-25 scp-basics.md) permet par exemple de transférer des fichiers au travers du protocole ssh, mais ne gère pas la reprise d'un transfert échoué. Pour plus de fonctionnalités, il existe rsync, qui offre à nos petits yeux ébahis plein de nouvelles fonctionnalités super utiles: la reprise de transfert en cas de foirage complet, la synchronisation de dossiers, ... C'est un outil de sauvegarde pratique, sur lequel se basent notamment Duplicity et Deja-Dup.

Utilisation

$ rsync -r -P -e ssh login@server:path/ folder/

Dans l'exemple ci-dessus, les paramètres sont:

  • -r pour un transfert récursif. Sans ce paramètre, seul les fichiers présents dans le dossier racine seront transférés.
  • -P pour avoir le même effet que --partial --progress: une barre de progression s'affiche pour chaque fichier transféré, et le téléchargement de fichiers incomplets est repris à l'endroit où il avait été abandonné.
  • -e pour spécifier le shell à utiliser
  • Les deux derniers paramètres sont : SOURCE et DESTINATION. Ici, on va se connecter avec l'utilisateur login sur la machine server et rapatrier tous les dossiers qui se trouvent dans path vers le répertoire local qui s'appelle folder.

Parmi les autres paramètres intéressants:

  • -t pour garder les informations de dates de modifications sur les fichiers
  • -v pour entrer dans un mode verbeux
  • -u pour synchroniser les dossiers, en prenant en compte les dates de modifications des fichiers pour savoir s'il doit envoyer une nouvelle version ou non. Attention que ce paramètre n'a pas d'intérêt si le transfert précédent a échoué: comme le fichier (a moitié) transféré a la même heure et date de modification que le fichier qu'rsync tente d'envoyer, il sera simplement skippé, alors qu'il aurait dû continuer le transfert grâce au paramètre -P. Pour une sauvegarde/copie, évitez ce paramètre, sauf si vous êtes sûr que la copie précédente a réussi.
  • --delete pour supprimer les fichiers qui se trouvent dans la destination, mais pas dans la source
  • -z pour compresser les fichiers et gagner un peu au niveau du transfert.

Attention également aux / après les chemins vers les répertoires. Oubliez le, et cela créera un nouveau répertoire dans le répertoire cible. Ajoutez le pour ne synchroniser que le contenu.

Synology

Si vous comptez utiliser votre Synology comme répertoire de destination, il se peut que vous tombiez sur le message d'erreur suivant:

Permission denied, please try again.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

Si c'est le cas, vous devrez activer un service sur le NAS:

  • Dans Main Menu, cliquez sur Backup & Replication et sélectionnez Backup Services.
  • Dans cet onglet, cochez l'option Enable network backup service.

A présent, vous pourrez utiliser rsync pour transférer vos documents vers le NAS.

Mon but ici est de synchroniser mon profil utilisateur (~/ en gros). De nouveau, avec la commande ci-dessus, cela va synchroniser tous mes documents et fichiers. Problème: cela embarque également les dot files. Une solution pour ceci est d'ajouter le paramètre --exclude ".*".

Finalement

En combinant tous les paramètres, ma commande rsync ressemble est la suivante:

rsync -rtv -P -e "ssh -p 11111" my_folder/ login@server:path/ --exclude ".*" --delete

Sources