====== 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/. * ''-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/ ===== Sous Windows ===== 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/ ===== 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/{} * -n fait un dry run, n'execute rien * -r pour le récursif * -v pour le verbose On passe tout ça dans xargs pour faire un ls -l sur chaque fichier