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 !
| 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 |
| 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 |
# 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'
tar -tvf backup.tar.gz # Détails
tar -tf backup.tar.gz # Simplement noms
tar -tf backup.tar.gz | wc -l # Compter fichiers
# 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
# Sync locale
rsync -av source/ destination/
# Avec options courantes
rsync -avz source/ destination/ # z = compression
rsync -av --delete source/ dest/ # Supprimer si absent source
rsync -av --exclude='*.log' src/ dst/ # Exclure
rsync -av --exclude-from='exclusions.txt' src/ dst/
# dry-run (simulation)
rsync -avn source/ destination/
# Progress et stats
rsync -av --progress source/ destination/
rsync -av --stats source/ destination/
# Vers serveur distant
rsync -avz -e ssh dossier/ user@serveur:/backup/
# Depuis serveur distant
rsync -avz -e ssh user@serveur:/backup/ dossier-local/
# Port SSH personnalisé
rsync -avz -e 'ssh -p 2222' dossier/ user@serveur:/backup/
#!/bin/bash
# Script backup incrémental
BACKUP_DIR="/backup"
SOURCE="/home"
DATE=$(date +%Y%m%d)
# Première sauvegarde complète
if [ ! -d "$BACKUP_DIR/full" ]; then
rsync -av $SOURCE/ $BACKUP_DIR/full/
fi
# Sauvegardes incrémentales
rsync -av --delete --link-dest=$BACKUP_DIR/full $SOURCE/ $BACKUP_DIR/incr-$DATE/
# Mettre à jour le lien "latest"
rm -f $BACKUP_DIR/latest
ln -s $BACKUP_DIR/incr-$DATE $BACKUP_DIR/latest
# Download depuis GitHub
sudo wget https://github.com/restic/restic/releases/latest/download/restic_linux_amd64 -O /usr/local/bin/restic
sudo chmod +x /usr/local/bin/restic
# Ou via package manager
sudo apt install restic
# Initialiser un dépôt
restic -r /backup/myrepo init
# Avec mot de passe
restic -r /backup/myrepo init --password-command "echo monmotdepasse"
# Repository cloud (S3)
restic -r s3:s3.amazonaws.com/bucketname init
# Sauvegarder
restic -r /backup/myrepo backup /home
restic -r /backup/myrepo backup /home --exclude='*.log'
# Lister les snapshots
restic -r /backup/myrepo snapshots
# Restaurer
restic -r /backup/myrepo restore latest --target /restoration/
# Restaurer fichier spécifique
restic -r /backup/myrepo restore latest --path /home/fichier.txt --target /tmp/
# Supprimer anciens snapshots (garde 7 jours)
restic -r /backup/myrepo forget --keep-daily 7 --prune
# Vérifier intégrité
restic -r /backup/myrepo check
sudo apt install borgbackup# 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
#!/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 ==="
#!/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
# 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
# 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
# Sens inverse !
rsync -av /backup/ /home/
# Dernier snapshot
restic -r /backup/myrepo restore latest --target /restoration/
# Snapshot spécifique
restic -r /backup/myrepo restore <snapshot-id> --target /restoration/
# Configurer
rclone config
# Sync vers cloud
rclone sync /local backup-remote:backup
# Lister remote
rclone listremotes
# Vérifier size
rclone size backup-remote:backup
# Avec rclone
rclone sync /home wasabi:mon-backup
# Avec restic + S3
restic -r s3:s3.eu-central-003.backblazeb2.com/bucket backup /home
| Outil | Usage | Type |
|---|---|---|
tar | Archives locales | Manuel |
rsync | Sync incrémentale | Flexible |
restic | Backup moderne | Automatisé |
borg | Dédupliqué | Avancé |
rclone | Cloud sync | Cloud |
Maîtrise les sauvegardes pour protéger tes données ! 💾