Table des matières

rsync

Usage courant

Pour copier simplement des fichiers d’un serveur à l’autre, vous pouvez utiliser rsync qui est plus rapide que scp et qui en plus permet de préserver les informations de propriétaire des fichiers.

Pour copier un fichier ou dossier

rsync -avzP [SOURCE] [DESTINATION]
rsync -a /home/users toto@serveur:/sauvegarde/.
rsync -avP tata@serveur:/var/archives/mysql.tar.gz /var/archive/.

Ici seul l’option -a est importante.

Si votre source contient des liens physiques (hard link), alors ajoutez l’option -H

Si votre serveur de destination a un port ssh spécifique (ex: 2222)

rsync -avP -e "ssh -p 2222" user@serveur:/path/to/files/ /local/path/

Sous Windows

Télécharger cwRsynchttps://www.itefix.net/cwrsync#

Parametrer les variables d’environnement, lancer dans un terminale le script cwrsync.cmd

c:\Program Files\cwRsync\cwrsync.cmd

Comme rsync est un programme unix à la base, on ne peut pas spécifier un chemin avec c:\ car les caractères : et \ seront interprétés pour autre chose.

Pour accèder au lecteur C:, il faut écrire /cygdrive/c et remplacer les back slash par des slashs

Exemple:

rsync -avi /cygdrive/c/work/ /cygdrive/d/work/doc/

Serveur

Fichier de config de base à la con vite fait mal fait…

cat /etc/rsyncd.conf
log file = /var/log/rsyncd.log

[backup]
   path = /backup/
   comment = Synchro fichiers 
   read only = false
   hosts allow = 88.888.888.888, 172.16.43.0/24
   #auth users = toto
   #secrets file = /etc/rsyncd.secrets

Client

Ma commande sur la machine client pour sauvegarder

rsync -r -t -l -p -o -g -v --progress --stats --delete-after /home/commun/ 172.16.43.53::backup/

-r, –recursive visite récursive des répertoires
-t, –times préserve les dates
-l, –links copie les liens symboliques comme liens symboliques
-p, –perms préserve les permissions
-o, –owner préserve le propriétaire (root uniquement)
-g, –group préserve le groupe
-v, –verbose plus loquace
–progress montre l’avancement pendant le transfert
–stats affiche quelques statistiques de transfert de fichiers
–delete-after efface après transfert, pas avant

Avec cette commande, je fais une synchronisation entre mon répertoire /home/commun/ et la config “backup” du serveur rsync (172.16.43.53)

Je fais un –delete-after afin de supprimer les fichiers qui n’existent plus dans la source, mais la suppression se fait à la fin de la synchro !! (Important selon moi)

Message d'erreur

rsync: failed to set times on "/." (in backup): Operation not permitted (1)

Pour résoudre ce problème, j’ai simplement fait un

chown nobody.nogroup repertoire_de_sauvegarde

Déplacement de gros volume avant un rsync

Initialement pour synchroniser on lance la commande

rsync -a dossier/ serveur:dossier/

Puis un jour on veut déplacer nos données sur la source et on synchronise

mv dossier/fichierA dossier/fichierB
rsync -a dossier/ serveur:dossier/

Et là c’est le drame. Il retransfère le fichierB.

L’astuce c’est d’utiliser l’équivalence entre mv a b et ln a b; rm a, mais on va rajouter un rsync entre les deux.

cp -al dossier/fichierA dossier/fichierB
rsync -aH dossier/ serveur:dossier/
rm dossier/fichierA
rsync -aH --delete dossier/ serveur:dossier/

J’utilise cp -al et non ln, car ça permet de conserver les permissions et de faire le machin recursivement pour un répertoire si c’est un répertoire qui est bougé.

Et comme ça, ça passe très bien, il détecte que fichierA et fichierB sont des hard link, il crée fichierB comme un hard link sur fichierA dans la destination, et à l’étape suivante il supprime fichierA.

Performance

https://icesquare.com/wordpress/how-to-improve-rsync-performance/

rsync est plus performant lorsque l’on utilise le daemon rsyncd

Voir ce qui va être transféré

rsync -nrv --ignore-existing source/ destination/ | xargs -I {} ls -l source/{}

On passe tout ça dans xargs pour faire un ls -l sur chaque fichier