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/.
-a
est le mode archive qui remplace les options -rlptgoD
recursive / copie liens symboliques / copie les permissions / copie la date et heure / copie le groupe / copie le propriétaire / copie les fichiers spéciaux-v
est le mode verbeux -z
permet la compression pour utiliser moins de bande passante-P
permet d’afficher la progression de transfert
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/
Télécharger cwRsync ⇒ https://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/
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
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)
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
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.
https://icesquare.com/wordpress/how-to-improve-rsync-performance/
rsync est plus performant lorsque l’on utilise le daemon rsyncd
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