Passer au contenu principal

Administration (Linux)

Sauvegarde

Une sauvegarde qui n'a jamais été testée n'est pas une sauvegarde. C'est le principe fondamental : la valeur d'une sauvegarde se mesure à sa capacité à être restaurée, pas à son existence sur un disque.

La stratégie 3-2-1

La règle 3-2-1 est la base de toute politique de sauvegarde sérieuse :

  • 3 copies des données (production + 2 sauvegardes)
  • 2 types de supports différents (disque local + NAS, NAS + cloud, etc.)
  • 1 copie hors site (résistance aux sinistres physiques : incendie, vol, inondation)

Un seul serveur avec un disque de sauvegarde local satisfait "2 copies" mais pas "2 supports" ni "1 hors site". C'est insuffisant en production.

rsync : synchronisation incrémentale

rsync synchronise des fichiers localement ou via SSH, en ne transférant que les différences. C'est l'outil de référence pour les sauvegardes de fichiers sur Linux.

apt install rsync

# Sauvegarde locale
rsync -av /var/www/ /mnt/backup/www/

# Sauvegarde vers un serveur distant via SSH
rsync -avz -e ssh /var/www/ user@backup-server:/backups/www/

# Avec suppression des fichiers absents de la source
rsync -av --delete /var/www/ /mnt/backup/www/

# Avec exclusions
rsync -av --exclude="*.log" --exclude=".git" /var/www/ /mnt/backup/www/

Options clés : -a (archive : récursif + droits + timestamps + liens), -v verbose, -z compression en transit, --delete supprime sur la destination ce qui n'existe plus à la source.

La technique des hard link snapshots permet des sauvegardes incrémentielles indépendantes sans dupliquer les fichiers inchangés. Chaque répertoire daté est une copie complète apparente, mais les fichiers inchangés partagent le même inode que le snapshot précédent.

DATE=$(date +%Y-%m-%d)
DEST=/mnt/backup/snapshots

rsync -a --delete     --link-dest="$DEST/latest"     /var/www/     "$DEST/$DATE/"

# Mettre à jour le lien "latest"
ln -sfn "$DEST/$DATE" "$DEST/latest"

tar : archives ponctuelles

# Créer une archive compressée
tar -czf /mnt/backup/etc-$(date +%Y%m%d).tar.gz /etc/

# Lister le contenu sans extraire
tar -tzf archive.tar.gz

# Extraire dans un répertoire spécifique
tar -xzf archive.tar.gz -C /tmp/restore/

# Avec exclusions
tar -czf backup.tar.gz /etc/ --exclude=/etc/ssl/private

tar est adapté aux archives ponctuelles et aux sauvegardes de configuration. Pour les sauvegardes régulières de gros volumes, rsync est plus efficace.

Automatiser et surveiller

# /etc/cron.d/backup
0 2 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
#!/bin/bash
# /usr/local/bin/backup.sh
set -euo pipefail

DATE=$(date +%Y-%m-%d)
DEST=/mnt/backup/snapshots

rsync -a --delete     --link-dest="$DEST/latest"     /var/www/     "$DEST/$DATE/"

ln -sfn "$DEST/$DATE" "$DEST/latest"

# Purger les snapshots de plus de 30 jours
find "$DEST" -maxdepth 1 -type d -name "????-??-??" -mtime +30     | xargs rm -rf

Tester la restauration

# Restaurer un fichier depuis un snapshot rsync
cp /mnt/backup/snapshots/2026-02-23/var/www/index.html /var/www/index.html

# Restaurer depuis une archive tar dans un répertoire temporaire
tar -xzf /mnt/backup/etc-20260223.tar.gz -C /tmp/restore/

# Comparer avec la version actuelle
diff -r /etc/nginx/ /tmp/restore/etc/nginx/

En pratique

La stratégie minimale pour un serveur de production : rsync quotidien vers un serveur distant via SSH (hors site), tar hebdomadaire des configurations critiques (/etc/), test de restauration mensuel sur un environnement de test. Les deux erreurs les plus courantes : ne jamais tester la restauration, et ne pas surveiller les logs du script de backup. Un cron qui échoue silencieusement peut laisser plusieurs semaines sans sauvegarde sans que personne ne s'en aperçoive.