Skip to content
GitHub

Synchronisation Rsync

Très pratique quand on change de PC par exemple et que l’on veux copier sa centaine de gigs du vieux PV au nouveau.

Au travers d’une connexion directe RJ45 :

rsync -az --size-only --delete /home/kevin/source/* kevin@server.example.com:/home/kevin/destination/
  • -a archive, conserve tout les attribut des fichiers en l’état (date, owner, …)
  • -z active la compression
  • --size-only ne teste que la taille du fichier pour savoir s’il doit être mis à jour. C’est plus rapide que le Hash.
  • --delete supprime de la destination les fichiers qui l’ont été de la source
  • --delay-updates Copie tout les fichiers à transférer dans un répertoire temporaire et les transfère à la fin. Pratique sur des environnements de prod.
  • --exclude-from=/root/sync_exclude liste des patterns de fichiers à exclure de la copie.

Autre point intéressant, il est facile de mettre cette ligne de commande dans un cron. Pour se dispenser du mot de passe on peut alors utiliser l’identification par clé de ssh.

Pour des transferts ultra-rapide avec du sudo en face:

rsync --rsync-path="sudo rsync" -aHA --delete --info=progress2 --stats -e "ssh -T -o Compression=no" 10.0.0.4:/var/lib/mysql/ ./data
  • --rsync-path="sudo rsync" on lance un sudo en face. Attention il faut un sudo sans mot de passe
  • -a on préserve les attributs des fichier
  • -H on préserve les Hard Links
  • -A on préserve les ACLs
  • -e on ajoute des options ssh
  • --delete on supprime les fichiers qui ont disparut sur la source
  • --info=progress2 on affiche seleument la progression pas tous les fichiers
  • --stats on affiche des stats

Pour le ssh

  • -T on forward l’agent
  • -o Compression=no on ne compresse pas

Le problème est que si vous avez mis un mot de passe sur le sudo de la machine d’en face, ça complique les choses. Le plus simple est de supprimer le password pour la commande rsync seulement. Pour ça il suffit de mettre un fichier 99-rsync-nopwd dans /etc/sudoers.d avec la ligne :

obiwan ALL = (root) NOPASSWD: /usr/bin/rsync