Il est puissant, il est fiable, il est beau... Oui, enfin, c'est discutable, mais il est terriblement efficace et facile à mettre en place... J'ai nommé... J'ai nommé...
Merde, j'ai un trou de mémoire...
Bien que ce ne soit pas considéré comme un backup à part entière, en effet, pas de versioning ni de restauration, on va plutôt parler de sauvegarde.
Mais c'est très bien aussi!
Rsync va donc synchroniser un dossier vers un autre dossier.
Si vous avez suivi les deux tutoriels:
&
Vous avez donc un disque prêt à l'emploi et totalement vierge. Dans mon exemple j'ai choisi de monter le disque dans /mnt/backup.
Vous verrez qu'il y a plusieurs façons de régler rsync. Soit il fait de la synchronisation à l'identique, c'est à dire que si vous ajoutez un fichier, il va ajouter le fichier, si vous supprimer un fichier il va supprimer le fichier. Vous pouvez aussi très bien lui dire que si vous supprimer un fichier sur votre disque principal, qu'il ne le supprime par sur le disque cible, celui qui reçoit la sauvegarde.
Installer rsync
La première chose à faire, s'il n'est déjà pas installé, c'est de l'installer:
sudo apt update && sudo apt install rsync -y
Créer un dossier sur votre disque de sauvegarde
Donc mon disque, qui est monté dans /mnt/backup, est prêt à recevoir les données. Je vais commencer par créer un dossier dans /mnt/backup nommé appdata car c'est le dossier qui contient toutes mes applications Docker et les données.
Cela me permettra d'y voir plus clair si j'ai envie de sauvegarder d'autres dossiers dans un autre dossier de destination pour classer mes sauvegardes.
Créons ce dossier appdata dans /srv/backup:
mkdir /mnt/backup/appdata
Informations utiles
- -a => Mode archive, cette option indique à rsync de synchroniser les répertoires de manière récursive, de transférer les périphériques spéciaux et bloqués, de conserver les liens symboliques, les heures de modification, les groupes, la propriété et les autorisations.
- -v => Cette option augmente la quantité d'informations qui vous sont fournies lors du transfert.
- -h => Affichez les nombres dans un format plus lisible par l'homme.
Synchroniser des données
Comme je vous l'ai dit plus haut, rsync peut-être configuré de différente panières.
A) Synchronisation simple
C'est à dire que même si vous effacez des fichiers dans le disque source, sur le disque cible ces fichiers seront conservés.
Au départ nous n'avons rien dans /mnt/backup/appdata:
Il y a une petite subtilité à comprendre dans cette commande:
rsync -avh /srv/appdata/ /mnt/backup/appdata/
- Si vous indiquez /srv/appdata/, donc qui termine par un /, il va copier le contenu du dossier.
- Si vous indiquez /srv/appdata, donc sans le / à la fin, il va copier le dossier appdata.
Vous faites comme bon vous semble. Dans ce cas il n'est pas opportun de créer le dossier appdata dans le dossier de destination /mnt/backup/appdata. Si non vous allez retrouver un chemin comme ça: /mnt/backup/appdata/appdata/xxxx.
Je lance donc la commande:
Maintenant nous avons bien le contenu de /srv/appdata/:
B) Synchronisation avec --delete
Dans ce cas nous allons dire à rsync que si on efface un fichier dans le disque source, sur le disque cible il va également effacer le fichier:
rsync -avh --delete /srv/appdata/ /mnt/backup/appdata/
C) Synchronisation avec --progress
Si vous ajoutez --progress, vous aurez une vue sur la progression de la synchronisation en cours.
La commande:
sudo rsync -avh --progress /srv/appdata/ /mnt/backup/appdata/
--progress en action:
D) Synchronisation avec --partial
Si vous interrompez pour je ne sais quelle raison votre synchronisation en plein milieu d'un gros fichier, de base, la partie déjà envoyée sera effacée. Avec --partial, non, la partie déjà envoyée sera conservée et quand vous relancerez la commande de synchronisation, cela reprendra au moment ou la synchronisation a été arrêtée. Pratique non?
La commande:
sudo rsync -avh --partial /srv/appdata/ /mnt/backup/appdata/
E) Synchronisation avec --partial et --progression
Si vous avez envie de combiner --partial et --progression, il suffira de remplacer ces deux options par -P.
La commande:
sudo rsync -avh -P /srv/appdata/ /mnt/backup/appdata/
La commande ultime?
Si j'ai détaillé les options pour plus de clarté, on pourrait résumer tout cela en deux commandes finalement.
Synchronisation des données avec --partial --progression et que rsync n'efface pas le fichier dans le disque cible si vous effacez une fichier dans le disque source:
sudo rsync -avh -P /srv/appdata/ /mnt/backup/appdata/
Synchronisation des données avec --partial --progression et que rsync efface le fichier dans le disque cible si vous effacez une fichier dans le disque source:
sudo rsync -avh -P --delete /srv/appdata/ /mnt/backup/appdata/
rsync sur un serveur distant
Il est possible de le faire sur un serveur distant:
rsync -avh -P --delete /srv/appdata user@ip:/chemin/distant/
Pas de gros changement si ce n'est que le user@ip qui correspond respectivement à votre nom d'utilisateur du serveur distant et son ip.
Automatiser rsync
Petite astuce si vous voulez que tout cela se fasse automatiquement à une heure précise.
On va faire appel à Cron.
Il faut éditer Cron, tapez cette commande...
crontab -e
... et choisir la première option:
En bas du fichier, vous ajoutez 00 00 * * * suivi d'un espace et votre commande préférée:
Dans cette configuration, tous les jours à minuit, la synchronisation va débuter.
Vous pouvez changer les heures, voici un site qui vous permet de configurer ça à votre guise:
Conclusion
N'hésitez pas à creuser les possibilités de rsync, comme la compression par exemple.