Dans cette leçon, tu vas maîtriser toutes les stratégies et outils de sauvegarde sous Linux. La perte de données peut arriver à tout moment — une bonne sauvegarde peut tout sauver !
1. Stratégies de sauvegarde
La règle 3-2-1
Règle
Description
3 copies
Données originales + 2 sauvegardes
2 supports
Disque différent, support cloud
1 hors site
Copie géographique différente
Types de sauvegardes
Type
Description
Avantage
Inconvénient
Complète
Tout copier
Restaurer simple
Temps, espace
Incrémentale
Modifiés depuis dernière
Rapide, petit
Restauration longue
Différentielle
Modifiés depuis complète
Compromis
Moyen
Mirror
Clone exact
Simple
Risque d'effacement erreurs
2. TAR - Archivage de base
Créer des sauvegardes
# Archive gzip (rapide)
tar -czvf backup.tar.gz dossier/
# Archive bzip2 (meilleure compression)
tar -cjvf backup.tar.bz2 dossier/
# Archive xz (meilleure encore)
tar -cJvf backup.tar.xz dossier/
# Avec date automatique
tar -czvf backup-$(date +%Y%m%d).tar.gz dossier/
# Exclure des dossiers
tar -czvf backup.tar.gz /home/ \
--exclude='*.log' \
--exclude='.cache' \
--exclude='node_modules'
Lister le contenu
tar -tvf backup.tar.gz # Détails
tar -tf backup.tar.gz # Simplement noms
tar -tf backup.tar.gz | wc -l # Compter fichiers
Extraire/Restaurer
# Extraire tout
tar -xzvf backup.tar.gz
tar -xjf backup.tar.bz2
tar -xJf backup.tar.xz
# Extraire dans un dossier spécifique
tar -xzvf backup.tar.gz -C /tmp/restauration/
# Extraire un fichier spécifique
tar -xzvf backup.tar.gz -C /tmp chemin/fichier.txt
# Mode interactif
tar -xzvf backup.tar.gz --checkpoint=1
# Initialiser
borg init --encryption=repokey /backup/borg_repo
# Créer sauvegarde
borg create /backup/borg_repo::archive-$(date +%Y%m%d) /home
# Lister
borg list /backup/borg_repo
# Restaurer
borg extract /backup/borg_repo::archive-20240314 /restoration/
# Nettoyage (garde 7 quotidiens, 4 hebdomadaires)
borg prune /backup/borg_repo --keep-daily=7 --keep-weekly=4
6. Scripts de sauvegarde automatisés
Script complet avec rotation
#!/bin/bash
# ========== Configuration ==========
SOURCE="/home"
DESTINATION="/backup"
RETENTION_JOURS=7
LOGFILE="/var/log/backup.log"
# ========== Fonctions ==========
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOGFILE
}
# ========== Début ==========
log "=== Début de la sauvegarde ==="
# Créer le dossier de destination
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$DESTINATION/backup-$DATE"
mkdir -p $BACKUP_PATH
# ========== Sauvegarde ==========
if rsync -av --delete \
--exclude='.cache' \
--exclude='.local/share/Trash' \
--exclude='node_modules' \
--exclude='*.log' \
"$SOURCE/" "$BACKUP_PATH/" 2>&1 | tee -a $LOGFILE; then
log "Sauvegarde terminée avec succès"
# Créer lien symbolique latest
rm -f "$DESTINATION/latest"
ln -s "$BACKUP_PATH" "$DESTINATION/latest"
else
log "ERREUR lors de la sauvegarde"
exit 1
fi
# ========== Rotation ==========
log "Nettoyage des anciennes sauvegardes..."
find $DESTINATION -maxdepth 1 -type d -name "backup-*" -mtime +$RETENTION_JOURS -exec rm -rf {} \; 2>&1 | tee -a $LOGFILE
log "=== Sauvegarde terminée ==="
Script avec notification Telegram
#!/bin/bash
# ... (code de backup) ...
if [ $? -eq 0 ]; then
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=✅ Backup terminé avec succès"
else
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID" \
-d "text=❌ ERREUR backup"
fi
7. Planification avec Cron
Exemples cron
# Ajouter au crontab
crontab -e
# Sauvegarde quotidienne à 3h du matin
0 3 * * * /home/user/scripts/backup.sh
# Toutes les 6 heures
0 */6 * * * /home/user/scripts/backup.sh
# Tous les dimanches à 2h (complète)
0 2 * * 0 /home/user/scripts/backup-full.sh
# Tous les jours à midi (incrémentale)
0 12 * * * /home/user/scripts/backup-incr.sh
8. Restauration
Depuis TAR
# Restaurer tout
tar -xzvf backup.tar.gz -C /
# Fichier spécifique
tar -xzvf backup.tar.gz -C /tmp home/user/fichier.txt
# Vérifier avant
tar -tzvf backup.tar.gz | grep fichier