Sauvegarder ses données avec rsync
rsync

Sauvegarder ses données avec rsync

Table des matières

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...

RSYNC!

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:

Préparer son disque sous Debian
Voyons comment initialiser un disque, supprimer une partition, créer une partition et formater une partition en ext4.

&

Monter un disque dur sous Linux
Comment monter un disque sous Linux et faire en sorte qu’il soit monté automatiquement au démarrage du serveur?

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

💡
Cette étape n'est pas obligatoire mais elle peut s'avérer pratique.

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:

Crontab.guru - The cron schedule expression generator
An easy to use editor for crontab schedules.

Conclusion

N'hésitez pas à creuser les possibilités de rsync, comme la compression par exemple.

rsync [Wiki ubuntu-fr]

zarev

🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.