Sauvegardes incrémentielles sur un VPS à l'aide de rsync et cron
Introduction
Les sauvegardes sont essentielles pour tout 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 en utilisant :
- rsync — outil de copie de fichiers efficace
- liens physiques — pour éviter les doublons de 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 VPS courantes.
Comment fonctionnent les sauvegardes incrémentielles avec rsync
rsync offre deux fonctionnalités clés :
- Synchronisation des seuls fichiers modifiés
- Option
--link-dest: crée des liens physiques pour les fichiers inchangés, permettant plusieurs répertoires de sauvegarde "complets" sans consommer d'espace supplémentaire.
Exemple de structure de répertoire :
/backups/ daily.0/ - sauvegarde d'aujourd'hui daily.1/ - sauvegarde d'hier daily.2/ - sauvegarde d'il y a 2 jours
Chaque dossier apparaît comme une sauvegarde complète, mais seules les différences occupent de l'espace.
Prérequis
Sur le VPS :
- Installation de Linux
- Accès en tant que root ou utilisateur avec sudo
- Espace disque suffisant pour les instantanés de sauvegarde
- Optionnel : stockage distant si sauvegarde sur un autre serveur
Installez rsync si nécessaire :
sudo apt update
sudo apt install rsync
Avertissement : Arrêtez vos serveurs de base de données ou excluez leurs répertoires de données de la sauvegarde. La sauvegarde en ligne de la base de données via rsync peut entraîner une sauvegarde de base de données corrompue.
Création des répertoires de sauvegarde
Choisissez un emplacement pour les sauvegardes. Habituellement :
- 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 clé :
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Explication :
-a— mode archive (préserve les permissions, propriétaires, horodatages, liens symboliques)--delete— supprime les fichiers supprimés sur la source--link-dest— crée des liens physiques vers les fichiers inchangés dans l'instantané précédent/source/data/— répertoire que vous souhaitez sauvegarder/backups/daily.0/— instantané d'aujourd'hui
Script de rotation pour les instantanés quotidiens
Créez un script pour :
- Faire tourner les sauvegardes existantes
- Créer une nouvelle sauvegarde incrémentielle
- Conserver N jours (exemple : 7)
Créez le fichier :
sudo nano /usr/local/bin/backup_daily.sh
Collez :
#!/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/" # Rotation 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 # Préparer les répertoires de sauvegarde mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Effectuer la sauvegarde incrémentielle 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
Enregistrez et quittez. Rendez-le 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. Changez SOURCE pour un répertoire spécifique si vous n'avez pas besoin de sauvegarde complète du système de fichiers racine par exemple.
Exclusion des répertoires inutiles
Créez un fichier d'exclusion :
sudo nano /etc/backup-exclude.txt
Exclusions typiques :
/proc/sys/tmp/run/dev/mnt/media/var/cache/backups
Planification des sauvegardes avec cron
Modifiez le crontab :
sudo crontab -e
Ajoutez (sauvegarde à 03:00 tous les jours) :
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Cela garantit des instantanés automatiques réguliers.
Sauvegarde sur un serveur distant (optionnel)
Si vous souhaitez 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 et 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, REMOTE_SERVER en haut de votre backup_daily.sh, 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 et enregistrez backup_daily.sh pour activer la sauvegarde distante.
Téléchargement des sauvegardes vers INTROSERV CloudBox
INTROSERV fournit un 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 stockage de sauvegarde distant, connectez-vous à l'interface web de CloudBox et ajoutez votre clé ssh publique au profil. Les paramètres du profil se trouvent en haut à droite.

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

Décommentez les variables REMOTE_USER, REMOTE_SERVER en haut de votre 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 et enregistrez backup_daily.sh pour activer la sauvegarde distante.
Tester les sauvegardes
Avant de vous fier à 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 grande sauvegarde. - Vérifiez l'intégrité des fichiers :
ls -l /backups/daily.0/etc/
Restaurer les données
Vous pouvez restaurer n'importe quel fichier individuel :
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Ou tout restaurer :
sudo rsync -a /backups/daily.0/ /
Avertissement : La restauration des répertoires système écrase les fichiers actuels.
Considérations de sécurité
- Utilisez des permissions strictes sur les répertoires de sauvegarde (
chmod 700). - Si vous utilisez SSH, désactivez la connexion par mot de passe, utilisez uniquement des clés.
- Ne stockez pas les sauvegardes sur le même disque que le serveur si possible.
- Chiffrez les sauvegardes distantes en utilisant LUKS ou un stockage chiffré si nécessaire.
Surveillance et journalisation
La journalisation est déjà ajouté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 du disque via des liens physiques
- Un processus de restauration simple
- Une planification entièrement automatisée
Cette méthode est fiable et facile pour les administrateurs novices et fonctionne parfaitement sur les configurations VPS Linux.