From b1edc2f977c3cfd09e578728b1dd9ac4e4a426bc Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Mon, 8 Jan 2018 00:34:45 +0100 Subject: [PATCH] =?UTF-8?q?relecture=20et=20am=C3=A9liorations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoRsync.md | 91 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 16 deletions(-) diff --git a/HowtoRsync.md b/HowtoRsync.md index 9d7918ee..48b865e5 100644 --- a/HowtoRsync.md +++ b/HowtoRsync.md @@ -1,13 +1,11 @@ --- title: Howto Rsync -categories: network +categories: sysadmin storage ... -**rsync** permet de réaliser des copies et synchronisations, depuis ou vers un serveur distant, ou encore localement. **rsync** propose de nombreuses options pour configurer le comportement avant/pendant/après les transfers. - -* [https://rsync.samba.org/](https://rsync.samba.org/) -* [https://fr.wikipedia.org/wiki/Rsync](https://fr.wikipedia.org/wiki/Rsync) +* Documentation : +[rsync](https://rsync.samba.org/) est un logiciel libre pour synchroniser des fichiers depuis ou vers un serveur distant, ou encore localement. **rsync** permet notamment de réaliser des synchronisations incrémentales que nous utilisons pour réaliser des migrations de données et des sauvegardes. ## Installation @@ -18,7 +16,23 @@ $ rsync --version rsync version 3.1.2 protocol version 31 ~~~ -## Utilisation de base + +## Utilisation de base + +Voici une utilisation basique pour transférer un répertoire vers un serveur distant via SSH (la première commande fait un _dry-run_ pour vérifier que tout est Ok, la seconde envoie les données) : + +~~~ +$ rsync -aASvn --delete --numeric-ids /home example.com:/home +$ rsync -aASv --delete --numeric-ids --stats /home example.com:/home +~~~ + +Notons l'utisation des **deux options fondamentales** pour lesquelles on doit se poser la question de leur utilisation à chaque commande **rsync** : + +* `--delete` : supprime les données (à utiliser dans 99.9% des cas et pourtant ce n'est pas le défaut !) +* `--numeric-ids` : conserve les UID/GID originaux même si owner/group ont des UID/GID différents sur la destination (à utiliser en général, sauf dans les cas de migration de données d'un serveur vers un autre) + + +## Utilisation Copier un fichier `foo.txt` vers un serveur distant `example.com` : @@ -50,37 +64,82 @@ Utiliser le mode archive, avec `-a` ou `--archive`. Ce mode est équivalent à ` $ rsync --archive /tmp/bar example.com:/tmp/ ~~~ +### Options -Liste des paramètres les plus communs : +**rsync** propose de nombreuses options pour configurer le comportement avant/pendant/après les transferts. + +Voici la liste des paramètres que nous utilisons souvent : * `-l`, `--links` : Préserve les liens symboliques +* `-L`, `--copy-links` : Transforme les liens symboliques en fonction du répertoire de destination +* `-H`, `--hard-links` : Préserve les liens (hardlinks) * `-o`, `--owner` : Préserve le propriétaire * `-g`, `--group` : Préserve le groupe * `-p`, `--perms` : Préserve les permissions -* `-n`, `--dry-run` = Les actions ne sont pas réalisées, juste listées -* `-z`, `--compress` = Compresse les fichiers pour accélerer le transfer +* `-A`, `--acls` : Préserve les ACLs (implique `-p`) +* `-t`, `--times` : Préserver les dates (autant que possible) +* `--numeric-ids` : Conserver les UID/GID originaux même si owner/group ont des UID/GID différents sur la destination (ceci n'est pas le défaut !) +* `-n`, `--dry-run` : Les actions ne sont pas réalisées, juste listées +* `-z`, `--compress` : Compresse les fichiers pour accélerer le transfert +* `-S`, `--sparse` : Traite efficacement les fichiers à trou (sparse files) * `-v`, `--verbose` : Mode verbeux * `-q`, `--quiet` : Pas de sortie en stdout -* `-h`, `--human-readable` : Les infos sont lisibles par un humain, conversion à l'unité de mesure la plus proche. Exemple 1249284o = 1.1M. +* `-h`, `--human-readable` : Les infos sont lisibles par un humain, conversion à l'unité de mesure la plus proche. Exemple 1249284o = 1.1M * `-d`, `--dirs` : Copie les dossiers sans avoir besoin de lui indiquer qu'il faut le faire récursivement -* `--bwlimit=RATE` : Limite le transfert. Attention c'est en unité de 1024 octets. On peut mettre des suffixes. Exemple 1.5m (1.5Mo/s). -* `--partial` : Conserve les fichiers transférés partiellement. Idéal pour reprendre un précédent transfert interrompu. +* `--bwlimit=RATE` : Limite le transfert. Attention c'est en unité de 1024 octets. On peut mettre des suffixes. Exemple 1.5m (1.5Mo/s) +* `--partial` : Conserve les fichiers transférés partiellement. Idéal pour reprendre un précédent transfert interrompu * `--stats` : Affiche des statistiques à la fin du transfert. Idéal si combiné avec `-h` pour avoir le résumé du transfert, vitesse moyenne, octets transférés, etc. * `-4`, `--ipv4` : Utiliser une connexion IPv4 * `-6`, `--ipv6` : Utiliser une connexion IPv6 * `-P`, `--progress` : Suivre la progression du transfère d'un fichier * `-r`, `--recursive` : Mode récursif -* `-a`, `--archive` : Archive, repecter les liens symboliques +* `-a`, `--archive` : Archive en preservant la plupart des attributs (équivalent à `-rlptgoD`) * `--delete` : Supprimer les données distantes qui sont absentes depuis la source +* `--exclude=PATTERN` : Ignore les fichiers correspondants au pattern (peut être utilisée plusieurs fois) +* `--exclude-from=FILE` : Ignore les fichiers correspondants aux patterns situé dans un fichier * `--delete-excluded` : Supprimer les données distantes qui sont exclus sur la source. -* `--ignore-errors` : Ignore les erreurs d'entrées/sorties sur les opérations de suppression. -* `-e`, `--rsh=COMMAND` : Permet de changer le remote shell par défaut. Très utilse pour spécifier le port à ssh. Exemple : `-e 'ssh -p 2222'`. +* `--ignore-errors` : Ignore les erreurs d'entrées/sorties sur les opérations de suppression +* `-e`, `--rsh=COMMAND` : Permet de changer le remote shell par défaut. Très utile pour spécifier un port différent pour SSH. Exemple : `-e "ssh -p 2222"` +* `-C`, `--cvs-exclude` : Ignore automatiquement les fichiers temporaires, à la manière de CVS + + +## Serveur rsync + +Activation via `/etc/default/rsync` : + +~~~ +RSYNC_ENABLE=true +~~~ + +Il faut définir au minimum des répertoires dans le fichier `/etc/rsyncd.conf` : + +~~~ +[rsync_shares] + path = /home/rsync_shares +~~~ + +Le démon tourne par défaut sur le port TCP/873 : + +~~~ +873/tcp open rsync +~~~ + +Et l'on peut l'utiliser ainsi : + +~~~ +$ rsync -aASvn --delete --numeric-ids /home example.com::rsync_shares/ +~~~ + ## FAQ +### file has vanished + +Cela signifie que des fichiers ont été modifiés pendant le transfert. + ### connection unexpectedly closed -Si l'on obtient un erreur ressemblant à : +Si l'on obtient une erreur ressemblant à : ~~~ Write failed: Broken pipe