Comment planifier des sauvegardes incrémentielles en utilisant rsync et cron
Les sauvegardes sont comme une assurance ; vous n'en avez pas besoin tous les jours, mais lorsque survient une catastrophe, comme la suppression accidentelle de fichiers, une panne de disque ou une attaque par ransomware, cela peut suffire à tout ruiner si vous n'êtes pas préparé. C'est là qu'intervient une planification intelligente des sauvegardes.
Dans ce guide, je vais vous montrer comment planifier des sauvegardes incrémentielles en utilisant rsync et cron. Je vais expliquer ce que sont les sauvegardes incrémentielles, comment rsync fonctionne en coulisses, et comment automatiser tout le processus avec cron.
Qu'est-ce qu'une sauvegarde incrémentielle ?
Une sauvegarde incrémentielle signifie que vous ne sauvegardez que les fichiers qui ont été modifiés depuis la dernière sauvegarde. Ainsi, au lieu de tout copier à chaque fois, ce qui peut être lent et prendre beaucoup de place, vous ne sauvegardez que les fichiers nouveaux ou mis à jour.
Disons que vous avez 10 000 fichiers dans un dossier et que seulement 20 d'entre eux ont été modifiés aujourd'hui. Une sauvegarde incrémentielle ignorera les 9 980 fichiers inchangés et ne sauvegardera que les 20 qui ont réellement changé, ce qui est efficace et parfait pour les sauvegardes quotidiennes.
Pourquoi utiliser rsync ?
rsync est un outil puissant et fiable utilisé pour copier des fichiers et des répertoires sous Linux. Ce qui rend rsync spécial est sa capacité à synchroniser uniquement les différences entre la source et la destination.
Il fonctionne localement (d'un dossier à un autre sur le même système) ou à distance (via SSH vers un autre serveur). Il préserve également les permissions des fichiers, les horodatages, les liens symboliques, et prend même en charge la suppression des fichiers supprimés, ce qui est rapide, flexible et déjà installé sur la plupart des distributions Linux.
Si rsync n'est pas installé, vous pouvez l'obtenir avec :
sudo apt install rsync # Debian/Ubuntu
sudo yum install rsync # CentOS/RHEL
Notre plan de secours
Disons que vous avez des fichiers importants stockés sous /home/ravi/documents/, et que vous voulez les sauvegarder dans /backup/documents/. Nous allons écrire un script shell simple qui utilise rsync pour copier les fichiers modifiés dans le répertoire de sauvegarde. Ensuite, nous utiliserons cron pour exécuter ce script tous les jours à 2h00 du matin.
Étape 1 : Écrivez le script de sauvegarde
Tout d'abord, créons un script shell pour effectuer la sauvegarde.
sudo nano /usr/local/bin/rsync-backup.sh
Collez le script suivant dedans :
#!/bin/bash
SOURCE="/home/ravi/documents/"
DEST="/backup/documents/"
LOGFILE="/var/log/rsync-backup.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
rsync -av --delete "$SOURCE" "$DEST" >> "$LOGFILE" 2>&1
echo "Backup completed at $DATE" >> "$LOGFILE"
Ce script indique à rsync de synchroniser les fichiers du répertoire source vers la destination. L'option -a lui indique de fonctionner en mode archive, en préservant les permissions et les métadonnées.
L’option -v rend la sortie verbeuse (pour que nous puissions enregistrer ce qui se passe), et --delete supprime les fichiers de la sauvegarde s’ils n’existent plus dans la source. Toute la sortie est écrite dans un fichier journal à /var/log/rsync-backup.log afin que nous puissions vérifier plus tard si quelque chose a mal tourné.
Maintenant, rendez le script exécutable :
sudo chmod +x /usr/local/bin/rsync-backup.sh
Étape 2 : Planifier le script avec Cron
Ensuite, nous devons nous assurer que le script de sauvegarde s'exécute automatiquement tous les jours à 2h00 du matin, donc vous devez éditer vos tâches cron, tapez :
crontab -e
Ajoutez cette ligne en bas :
0 2 * * * /usr/local/bin/rsync-backup.sh
Pour confirmer que votre tâche cron a été ajoutée :
crontab -l
Étape 3 : Tester la configuration de la sauvegarde
Avant de laisser le système exécuter les sauvegardes automatiquement, il est important de tester le script manuellement pour s'assurer que tout fonctionne comme prévu, ce qui vous aidera à détecter tout problème de chemin, erreur de permission ou faute de frappe avant que cron ne l'exécute silencieusement en arrière-plan.
Tout d'abord, exécutez le script de sauvegarde manuellement, ce qui déclenchera immédiatement le processus de sauvegarde et vous verrez une liste des fichiers being copiés ou ignorés.
sudo /usr/local/bin/rsync-backup.sh
Une fois que le script est terminé, allez dans votre répertoire de sauvegarde et vérifiez que les fichiers ont été copiés correctement :
ls -lh /backup/documents/
Maintenant, vérifiez le fichier journal pour vous assurer que le script s'est exécuté sans erreurs et a enregistré l'heure de la sauvegarde :
cat /var/log/rsync-backup.log
Vous devriez voir une sortie similaire à ceci :
sending incremental file list
./
file1.txt
folder2/
folder2/file2.pdf
Backup completed at 2025-06-16 14:00:01
Cela confirme que le script a non seulement copié des fichiers, mais a également enregistré l'événement avec un horodatage.
Étape 4 : Créer des sauvegardes instantanées quotidiennes
Si vous voulez aller un pas plus loin et conserver des instantanés quotidiens de vos données (au lieu de simplement un seul dossier de sauvegarde), vous pouvez utiliser l'option --link-dest dans rsync, qui vous permet de créer des sauvegardes avec des liens physiques en créant essentiellement de nouveaux dossiers qui ressemblent à des sauvegardes complètes mais n'utilisent de l'espace que pour les fichiers qui ont changé.
Le premier jour, créez la sauvegarde complète initiale :
rsync -a /home/ravi/documents/ /backup/daily.0/
Le lendemain, utilisez le dossier du jour précédent comme référence pour créer une sauvegarde incrémentielle :
rsync -a --link-dest=/backup/daily.0/ /home/ravi/documents/ /backup/daily.1/
Les fichiers qui n'ont pas changé seront liés de manière directe, ce qui permet d'économiser de l'espace. Vous pouvez même faire tourner ces dossiers en utilisant un script simple qui renomme les anciens et crée un nouvel instantané chaque jour.
Voici un script de rotation de base pour 7 jours :
#!/bin/bash
rm -rf /backup/daily.7
mv /backup/daily.6 /backup/daily.7
mv /backup/daily.5 /backup/daily.6
mv /backup/daily.4 /backup/daily.5
mv /backup/daily.3 /backup/daily.4
mv /backup/daily.2 /backup/daily.3
mv /backup/daily.1 /backup/daily.2
mv /backup/daily.0 /backup/daily.1
rsync -a --delete --link-dest=/backup/daily.1 /home/ravi/documents/ /backup/daily.0/
Vous pouvez planifier ce script en utilisant cron, tout comme le script de sauvegarde de base. Par exemple, pour l’exécuter tous les jours à 2h00 du matin :
0 2 * * * /usr/local/bin/daily-rsync-rotate.sh
Conseil bonus : Sauvegarder sur un serveur distant
Si vous voulez sauvegarder vos données sur une autre machine (comme un serveur de sauvegarde), vous pouvez utiliser rsync via SSH, mais assurez-vous que les clés SSH sont configurées pour une connexion sans mot de passe, puis exécutez quelque chose comme ceci :
rsync -av -e ssh /home/ravi/documents/ ravi@backup-server:/backup/ravi/
Vous pouvez ajouter la commande ci-dessus à votre script ou créer un script séparé juste pour les sauvegardes à distance.
Pensées finales
Les sauvegardes peuvent ne pas sembler excitantes, mais perdre vos données, ça l'est sûrement. Une fois que vous avez configuré des sauvegardes incrémentielles avec rsync et cron, vous pouvez vous détendre en sachant que vos fichiers sont protégés chaque jour.
Testez toujours vos sauvegardes, assurez-vous que vos scripts fonctionnent, et n'oubliez pas de vérifier les journaux de temps en temps. Si vous devez un jour restaurer quelque chose, vous serez content d'avoir mis ce système en place.