rsync (Français)
rsync est un utilitaire open source permettant des transferts de fichiers rapides et incrémentés.
Installation
rsync doit être présent sur les deux machines, source et destination.
Interfaces
- Grsync — Une interface GTK+.
- JotaSync — Application graphique en Java Swing avec planificateur intégré.
- luckyBackup — Interface Qt écrite en C++.
D'autres outils utilisant rsync sont rdiff-backup, et .
Comme alternative à cp/mv
rsync peut être utilisé comme alternative avancée aux commandes oumv
, particulièrement le transfert de de fichiers volumineux:
$ rsync -P source destination
L'option , soit garde les fichiers partiellement transférés et affiche une barre de progression.
Pour copier récursivement les sous-répertoires l'option est .
Les fichiers peuvent être copiés localement comme avec la commande cp, mais le but essentiel de rsync est la copie à distance, c.a.d.. d'un hôte à un autre. L'emplacement distant sera signifié par la syntaxe deux-points : , ex:
$ rsync source host:destination
ou
$ rsync host:source destination
Les transferts par le réseau utilisent le protocole SSH par défaut et peut être un nom réel d'hôte existant ou un profil/alias prédéfini dans .
Qu'il s'agisse d'un transfert de fichiers en local ou à distance, Rsync crée d'abord une liste des fichiers avec leurs données (par défaut, taille du fichier et dernier horodatage de modification) qui sera ensuite utilisée pour déterminer si un fichier doit être construit. Pour chaque fichier à construire, une somme de contrôle faible et forte est trouvée pour tous les blocs de sorte que chaque bloc est de longueur S octets, sans chevauchement, et ait un décalage divisible par S. En utilisant cette information, rsync peut construire un fichier de grande taille sans avoir à le transférer en entier. Pour une explication pratique et mathématique détaillée, reportez-vous respectivement au fonctionnement de rsync et à l'algorithme de rsync.
Pour utiliser rapidement des valeurs par défaut sensées, vous pouvez utiliser des alias :
cpr() { rsync --archive -hh --partial --info=stats1 --info=progress2 --modify-window=1 "$@" } mvr() { rsync --archive -hh --partial --info=stats1 --info=progress2 --modify-window=1 --remove-source-files "$@" }
- : affiche les chiffres dans un format lisible humainement
- :
stats1
affiche les statistiques de transfert rsync avec un niveau de verbosité de 1. imprime la progression totale du transfert par opposition à la progression du transfert par fichier (progress1
). - : lorsque vous comparez les horodatages de deux fichiers, traitez leurs horodatages comme étant équivalents si leur différence est inférieure à 1 seconde.
- : supprime les fichiers du répertoire source après qu'ils aient été synchronisés avec succès.
Mise en garde sur la terminaison par slash
Arch Linux utilise par défaut la convention GNU de la commande cp (du paquet ). Tandis que rsync suit la convention BSD de cp, qui accorde un traitement spécial aux répertoires sources avec barre oblique "/" finale (trailing slash). Ainsi la commande:
$ rsync -r source destination
créera le répertoire "destination/source" avec le contenu de "source", alors que la commande:
$ rsync -r source/ destination
ne copie que les fichiers de "source/" directement dans "destination", sans créer le sous-répertoire "destination/source" - comme si vous aviez lancé:
$ rsync -r source/. destination
Ce comportement est différent de celui de GNU/cp, qui traite "source" et "source/" de la même façon (mais non "source/."). De plus certains shells ajoutent automatiquement la barre oblique aux noms des répertoires en cas de complétion par touche <Tab>. En conséquence cette somme de facteurs pourraient amener des utilisateurs nouveaux ou occasionnels de rsync, oubliant ce comportement différent, à désorganiser ou même écraser des répertoires importants par le maintien d'une barre oblique en fin de la <source> dans la commande.
Aussi il peut être prudent d'envelopper la commande par un script enlevant automatiquement cette barre avant le lancement de rsync:
Ce script peut être placé quelque part dans le chemin, et aliasé à rsync dans le fichier de démarrage du shell.
Comme un utilitaire de sauvegarde
Le protocole rsync est facile à utiliser pour les tâches de sauvegarde, ne transférant que les fichiers modifiés depuis la précédente sauvegarde. Ce paragraphe décrit une sauvegarde programmée très simple avec un script utilisant rsync, typiquement utilisé lors de copies sur un support amovible.
Sauvegardes automatisées
Pour les besoins de cet exemple, le script est créé dans le répertoire , pour se lancer chaque jour si le daemon cron est installé et correctement configuré. Configurer et utiliser cron n'appartient pas à cet article.
D'abord, créer un script avec les options de commande appropriées:
- : indique quels fichiers doivent être archivés, entendu que la plupart de leurs attributs soient préservés (mais non les ACLs, liens matériels (hard links), ni attributs étendus tels les capabilités.
- : signifie que les fichiers supprimés sur la source doivent également être supprimés sur la sauvegarde.
Ici, /path/to/backup
sera remplacé par le chemin des données à sauvegarder (, par exemple) et sera le chemin de destination de la sauvegarde (, par exemple).
Terminer en rendant le script exécutable
Sauvegarde automatique avec SSH
Si vous sauvegardez sur un hôte distant en utilisant SSH, utilisez ce script à la place :
/etc/cron.daily/backup
#!/bin/bash rsync -a --delete --quiet -e ssh /folder/to/backup remoteuser@remotehost:/location/of/backup
- : indique à rsync d'utiliser SSH
- : est le nom de l'hôte distant
- : regroupe les options (recursive, links, perms, times, group, owner, devices)
Sauvegarde automatique avec NetworkManager
Ce script démarre une sauvegarde après connexion au réseau.
D'abord, créez un script avec les options de commande appropriées:
/etc/NetworkManager/dispatcher.d/backup
#!/bin/bash if [ x"$2" = "xup" ] ; then rsync --force --ignore-errors -a --delete --bwlimit=2000 --files-from=files.rsync /path/to/backup /location/of/backup fi
- : groupe toutes les options recursive, links, perms, times, group, owner, devices
- : lire le chemin relatif de /path/to/backup à partir de ce fichier
- : limite la bande passante E/S; Kilo-octets par seconde
Le script doit appartenir à root (consultez NetworkManager (Français)#Services réseau avec le répartiteur NetworkManager pour plus de détails).
Sauvegarde automatique avec systemd et inotify
- Au lieu d'exécuter des sauvegardes avec une programmation basée sur des intervalles temporels, comme avec cron, il est possible d'exécuter une sauvegarde à chaque modification d'un des fichiers à sauvegarder.
Les unités de chemin utilisent inotify
pour surveiller le système de fichiers, en conjonction avec des fichiers pour démarrer n'importe quel processus (dans ce cas, votre sauvegarde rsync) basé alors sur un événement dans le système de fichiers.
D'abord, créez l'unité de chemin , lançant la surveillance des fichiers à sauvegarder:
Puis le service qui sera activé par toute modification. Par défaut, un fichier de service du même nom que l'unité path (dans ce cas ) sera activé, mais avec l'extension au lieu de .path
(dans notre cas ).
Maintenant activez et démarrez simplement comme un service systemd normal et il commencera à surveiller les changements de fichiers et démarrera automatiquement .
Sauvegarde différentielle sur une semaine
Autre possibilité utile des option de rsync, qui permet d'obtenir une sauvegarde complète (à chaque exécution) et de conserver une copie de sauvegarde différentielle des fichiers modifiés uniquement dans un répertoire distinct pour chaque jour de la semaine.
D'abord, créez un script avec les options de commande appropriées:
L'option implique --partial
et met à jour les fichiers en place dans le répertoire de destination.
Sauvegardes par instantanés (Snapshots)
La même démarche peut servir au maintien d'un arbre d'instantanés de vos fichiers. Autrement dit, un répertoire avec des copies des fichiers rangées par date. Ces copies seront faites par utilisation de liens matériels (hard links, attribution d'un seul i-nœud) ce qui signifie que seuls les fichiers modifiés occuperont un espace supplémentaire. D'une manière générale, c'est l'idée qui sous-tend les TimeMachine d'Apple.
Ce script de base est facile à implémenter, il crée des snapshots incrémentaux rapides en utilisant l'option pour lier des fichiers non modifiés:
Il doit y avoir un lien symbolique vers une sauvegarde complète déjà existante en tant que cible pour . En cas d'effacement du plus récent des instantanés il faut recréer un lien symbolique vers le plus récent suivant. Si ne trouve pas de lien symbolique fonctionnel, rsync devra re-copier la source entière au lieu des seuls fichiers modifiés.
Une version plus sophistiquée conserve une sauvegarde complète à jour et dans le cas où un certain nombre de fichiers ont été modifiés depuis la dernière sauvegarde complète, elle crée un instantané $SNAP/$DATETAG
de la sauvegarde complète actuelle en utilisant pour lier les fichiers inchangés :
Pour faire très très simple ce script peut-être lancé depuis une unité systemd/Timers.
Sauvegarde système complète
Cette section concerne l'utilisation de rsync pour transférer une copie de l'arborescence entière, à l'exception de quelques répertoires sélectionnés. Cette approche est considérée comme meilleure que le clonage de disque avec car elle permet d'utiliser une taille, une table de partition et un système de fichiers différents, et meilleure que la copie avec également, car elle permet un meilleur contrôle des permissions de fichiers, des attributs, des listes de contrôle des accès (ACL) et des attributs étendus.
rsync fonctionnera même lorsque le système est en cours d'exécution, mais les fichiers modifiés pendant le transfert peuvent ou non être transférés, ce qui peut entraîner un comportement indéfini de certains programmes utilisant les fichiers transférés.
Cette approche fonctionne bien pour migrer une installation existante vers un nouveau disque dur ou SSD.
Exécutez la commande suivante en tant que root pour vous assurer que rsync peut accéder à tous les fichiers système et en préserver la propriété :
# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/home/*","/lost+found"} / /path/to/backup/directory
Les options , définissent un transfert en mode archive avec conservation des liens symboliques, des périphériques rattachés, autorisations et propriétés, dates de modification, ACLs et attributs étendus (à condition que le système de fichiers cible prenne en charge ces fonctions. L'option préserve les liens matériels mais consomme plus de mémoire.
L'option --exclude
définit les fichiers à exclure, correspondant aux motifs définis. Les répertoires , , , /tmp
, et sont inclus dans la commande ci-dessus, mais le contenu de ces répertoires est exclu. Cela est dû au fait qu'ils sont remplis au démarrage, mais que les répertoires eux-mêmes ne sont pas créés. est spécifique au système de fichiers. La commande ci-dessus dépend de l'expansion des accolades disponible dans les shells bash et zsh. Si vous utilisez un autre shell, les motifs --exclude
doivent être répétés manuellement. Citer les motifs d'exclusion évitera l'expansion par le shell, ce qui est nécessaire, par exemple, lors de la sauvegarde via SSH. Terminer les chemins exclus par garantit que les répertoires eux-mêmes sont créés s'ils n'existent pas déjà.
Vous pouvez inclure des options rsync supplémentaires, ou en supprimer certaines, comme les suivantes. Consultez pour la liste complète.
- Si vous travaillez sur un système avec très peu de mémoire, envisagez de supprimer l'option ; cependant, cela ne devrait pas poser de problème sur la plupart des machines modernes. Il peut y avoir de nombreux liens durs sur le système de fichiers en fonction du logiciel utilisé (par exemple, si vous utilisez Flatpak). De nombreux liens durs résident dans le répertoire .
- Vous pouvez ajouter l'option de rsync si vous l'exécutez plusieurs fois dans le même répertoire de sauvegarde. Dans ce cas, assurez-vous que le chemin d'accès à la source ne se termine pas par
/*
, ou cette option n'aura d'effet que sur les fichiers situés dans les sous-répertoires du répertoire source, mais elle n'aura aucun effet sur les fichiers résidant directement dans le répertoire source. - Si vous utilisez des fichiers épars, tels que des disques virtuels, des images Docker et autres, vous devez ajouter l'option .
- L'option désactivera le mappage des noms d'utilisateurs et de groupes ; à la place, les ID numériques des groupes et des utilisateurs seront transférés. Ceci est utile lors de la sauvegarde via SSH ou lors de l'utilisation d'un système actif pour sauvegarder un disque système différent.
- Choisir l'option au lieu de montrera l'information de progression globale et la vitesse de transfert au lieu de la liste des fichiers en cours de transfert.
- Pour éviter de traverser une frontière de système de fichiers lors d'une récursion, ajoutez l'option /. Ceci empêchera la sauvegarde de tout point de montage dans la hiérarchie.
Restauration de la sauvegarde
Si vous souhaitez restaurer la sauvegarde, utilisez la même commande rsync que précédemment, mais en inversant source et destination.
Clonage du système de fichiers
rsync fournit le moyen de copier toutes les données d'un système de fichiers en préservant autant d'information que possible, y compris les metadata du système. C'est une procédure de clonage de données au niveau du système de fichiers où les systèmes de fichiers source et destination n'ont pas besoin d'être du même type. Il peut être utilisé pour la sauvegarde, la migration de systèmes de fichiers ou la récupération de données.
Le mode archive de rsync (option -a) est presque adapté à cette tâche, sauf qu'il ne sauvegarde pas les métadonnées spéciales du système de fichiers telles que les listes de contrôle d'accès, les attributs étendus ou les propriétés de fichiers éparses. Pour un clonage réussi au niveau du système de fichiers, certaines options supplémentaires doivent être fournies:
rsync -qaHAXS SOURCE_DIR DESTINATION_DIR
Ce qui signifie (selon la page de manuel):
-H, --hard-links preserve hard links -A, --acls preserve ACLs (implies --perms) -X, --xattrs preserve extended attributes -S, --sparse handle sparse files efficiently
De plus, utilisez si vous avez d'autres systèmes de fichiers montés sous l'arbre que vous voulez exclure de la copie.
La copie produite peut être simplement relue et vérifiée (par exemple après une tentative de récupération de données) au niveau du système de fichiers avec l'option récursive de diff
:
diff -r SOURCE_DIR DESTINATION_DIR
Il est possible d'effectuer une migration réussie du système de fichiers en utilisant rsync comme décrit ici puis en mettant à jour les paramètres fstab et chargeur d'amorçage comme décrit dans Migrer une installation vers un nouveau matériel (en). Ceci fournit essentiellement un moyen de convertir n'importe quel système de fichiers racine à un autre.
Comme un daemon
rsync peut-être lancé en tant que daemon sur un serveur, à l'écoute du port .
Editez le modèle , configurez un partage et démarrez le .
rsyncd.service
et rsyncd@.service
. Le changement pour ProtectHome
a été commenté, la fonction de sécurité ProtectSystem=full
sous la section [Service]
est toujours active. Cela rend les répertoires /boot/
, /etc/
et /usr/
en lecture seule. Si vous avez besoin que rsyncd écrive les répertoires système, éditez l'unité et définissez ProtectSystem=off
dans la section [Service]
du snippet overriding.Utilisation depuis le client, par exemple lister le contenu du serveur:
$ rsync rsync://server/share
transférer le fichier du client au serveur:
$ rsync local-file rsync://server/share/
Penser à ouvrir le port dans iptables et l'authentification utilisateur.
Partage à partir d'une liste de fichiers
Dans la liste de fichiers, tous les chemins intermédiaires sont nécessaires, sauf lorsque le caractère générique est utilisé :
Voir aussi
- D'autres exemples d'utilisation peuvent être trouvées sur la page du projet, dans les Community Contributions, et General Programming forums
- Howto – local and remote snapshot backup using rsync with hard links Inclut la déduplication des fichiers avec des liens matériels, la vérification d'intégrité par somme-MD5 et integrité de signature, protection par 'chattr' , règles de filtrage, quota de disques, politique de rétention avec une distribution exponentielle (rotation des sauvegardes tout en sauvegardant des sauvegardes plus récentes que les anciennes)
- Usage des fichiers/clés d'identification SSH avec rsync
- Fil de discussion du forum international sur les Sauvegardes