Sauvegardes incrémentielles sur un VPS à l'aide de rsync et de cron
Introduction
Les sauvegardes sont indispensables pour tout serveur virtuel (VPS). Elles vous protègent contre les suppressions accidentelles, les erreurs de configuration, la corruption des données ou la compromission du serveur.
Ce manuel explique comment configurer des sauvegardes incrémentielles à l'aide de :
- rsync — un outil efficace de copie de fichiers
- les liens physiques — pour éviter la duplication des données dans chaque sauvegarde
- cron — pour planifier des sauvegardes automatiques
Résultat : chaque instantané ressemble à une sauvegarde complète, mais seuls les fichiers modifiés occupent de l'espace supplémentaire. Cette approche est simple, fiable et adaptée à la plupart des configurations de VPS courantes.
Fonctionnement des sauvegardes incrémentielles avec rsync
rsync offre deux fonctionnalités clés :
- Synchronisation des fichiers modifiés uniquement
- L'option
--link-dest: crée des liens physiques pour les fichiers inchangés, ce qui permet d'avoir plusieurs répertoires de sauvegarde « complets » sans consommer d'espace supplémentaire.
Exemple de structure de répertoires :
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Chaque dossier apparaît comme une sauvegarde complète, mais seules les différences occupent de l'espace.
Prérequis
Sur le VPS :
- Installation Linux
- Accès en tant qu’administrateur (root) ou utilisateur disposant des droits sudo
- Espace disque suffisant pour les instantanés de sauvegarde
- Facultatif : stockage à distance si la sauvegarde est effectuée sur un autre serveur
Installez rsync si nécessaire :
sudo apt update sudo apt install rsync
Arrêtez vos serveurs de bases de données ou excluez leurs répertoires de données de la sauvegarde. Une sauvegarde en ligne des bases de données via rsync peut entraîner une corruption de la sauvegarde.
Création des répertoires de sauvegarde
Choisissez un emplacement pour les sauvegardes. Généralement :
- Système de fichiers local :
/backups/ - Disque externe :
/mnt/storage/backups/ - Serveur distant via SSH :
user@backup-server:/data/backups/
Exemple (local) :
sudo mkdir -p /backups sudo chmod 700 /backups
Commande rsync de base pour les sauvegardes incrémentielles
Voici la commande rsync principale :
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Explication :
-a— mode archive (conserve les droits d’accès, les propriétaires, les horodatages et les liens symboliques)--delete— supprime les fichiers supprimés sur la source--link-dest— crée des liens physiques vers les fichiers inchangés de l'instantané précédent/source/data/— répertoire que vous souhaitez sauvegarder/backups/daily.0/— instantané du jour
Script de rotation pour les instantanés quotidiens
Créez un script pour :
- Réaliser la rotation des sauvegardes existantes
- Créer une nouvelle sauvegarde incrémentielle
- Conserver N jours (exemple : 7)
Créer un fichier :
sudo nano /usr/local/bin/backup_daily.sh
Coller :
#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotate for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi
Enregistrer et quitter. Rendre le script exécutable :
sudo chmod +x /usr/local/bin/backup_daily.sh
Vous pouvez modifier les variables en haut du script pour l'adapter à vos besoins. Remplacez SOURCE par un répertoire spécifique si vous n'avez pas besoin d'une sauvegarde complète du système de fichiers racine, par exemple.
Exclure les répertoires inutiles
Créer un fichier d'exclusion :
sudo nano /etc/backup-exclude.txt
Exclusions courantes :
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Planification des sauvegardes avec cron
Modifier le fichier crontab :
sudo crontab -e
Ajouter (sauvegarde tous les jours à 3 h) :
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Cela garantit des sauvegardes automatiques régulières.
Sauvegarde sur un serveur distant (facultatif)
Si vous souhaitez effectuer une sauvegarde hors site, suivez les étapes suivantes. Créez un dossier de destination sur le serveur cible :
mkdir -p /backups
Assurez-vous que les clés SSH sont configurées. Exécutez la commande suivante pour générer votre clé SSH :
ssh-keygen
Remplacez <YOUR_REMOTE_USER> par votre nom d’utilisateur sur le serveur distant, <YOUR_REMOTE_SERVER> par le nom de domaine de votre serveur distant, puis exécutez la commande suivante pour copier votre clé SSH sur le serveur distant :
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Décommentez les variables REMOTE_USER et REMOTE_SERVER en haut de votre fichier backup_daily.sh, remplacez <VOTRE_UTILISATEUR_DISTANT> par votre nom d'utilisateur sur le serveur distant, <VOTRE_SERVEUR_DISTANT> par le nom de domaine de votre serveur distant, puis enregistrez le fichier backup_daily.sh pour activer la sauvegarde à distance.
Transfert des sauvegardes vers INTROSERV CloudBox
INTROSERV fournit un espace de stockage en ligne qui vous permet de sauvegarder automatiquement ou manuellement des copies sécurisées de vos fichiers et données importants sur des serveurs distants. Pour l’utiliser comme espace de stockage de sauvegarde à distance, connectez-vous à l’interface web de CloudBox et ajoutez votre clé SSH publique à votre profil. Les paramètres du profil se trouvent dans le coin supérieur droit.

Insérez votre clé SSH publique dans la section « Clés publiques » pour la télécharger sur le serveur.

Décommentez les variables REMOTE_USER et REMOTE_SERVER en haut de votre fichier backup_daily.sh, remplacez <YOUR_REMOTE_USER> par votre nom d’utilisateur sur le serveur CloudBox, <YOUR_REMOTE_SERVER> par le nom de domaine de votre serveur CloudBox, puis enregistrez le fichier backup_daily.sh pour activer la sauvegarde à distance.
Test des sauvegardes
Avant de compter sur votre système, testez les sauvegardes.
- Exécutez le script manuellement :
sudo /usr/local/bin/backup_daily.sh - Vérifiez les tailles :
du -sh /backups/*.Il ne doit y avoir qu’une seule sauvegarde volumineuse. - Vérifiez l'intégrité des fichiers :
ls -l /backups/daily.0/etc/
Restauration des données
Vous pouvez restaurer n'importe quel fichier individuellement :
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Ou tout restaurer :
sudo rsync -a /backups/daily.0/ /
La restauration des répertoires système écrase les fichiers actuels.
Considérations de sécurité
- Appliquez des droits d'accès stricts aux répertoires de sauvegarde (
chmod 700). - Si vous utilisez SSH, désactivez la connexion par mot de passe et utilisez uniquement des clés.
- Dans la mesure du possible, ne stockez pas les sauvegardes sur le même disque que le serveur.
- Chiffrez les sauvegardes à distance à l'aide de LUKS ou d'un stockage chiffré si nécessaire.
Surveillance et journalisation
La journalisation est déjà configurée dans cron : /var/log/backup.log
Vérifiez régulièrement :
tail -f /var/log/backup.log
Conclusion
L'utilisation de rsync avec cron offre :
- Des sauvegardes incrémentielles rapides
- Une utilisation efficace de l'espace disque grâce aux liens physiques
- Un processus de restauration simple
- Une planification entièrement automatisée
Cette méthode est fiable et facile à mettre en œuvre pour les administrateurs débutants ; elle fonctionne parfaitement sur les configurations de VPS Linux.