← Sommaire SkyLinux

Leçon 19 : Sauvegardes et restauration

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ègleDescription
**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

TypeDescriptionAvantageInconvénient
**Complète**Tout copierRestaurer simpleTemps, espace
**Incrémentale**Modifiés depuis dernièreRapide, petitRestauration longue
**Différentielle**Modifiés depuis complèteCompromisMoyen
**Mirror**Clone exactSimpleRisque 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


3. RSYNC - Synchronisation

Commandes de base

# 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/

RSYNC distant (SSH)

# 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/

Sauvegarde incrémentale

#!/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


4. Restic - Backup moderne (recommandé)

Installation

# 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

Configuration initiale

# 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

Commandes Restic

# 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


5. Borg Backup

Installation

sudo apt install borgbackup

Utilisation

# 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

Depuis RSYNC

# Sens inverse !

rsync -av /backup/ /home/

Depuis Restic

# Dernier snapshot

restic -r /backup/myrepo restore latest --target /restoration/

# Snapshot spécifique

restic -r /backup/myrepo restore <snapshot-id> --target /restoration/


9. Services Cloud

rclone - Cloud sync

# Configurer

rclone config

# Sync vers cloud

rclone sync /local backup-remote:backup

# Lister remote

rclone listremotes

# Vérifier size

rclone size backup-remote:backup

Backblaze, Wasabi, etc.

# Avec rclone

rclone sync /home wasabi:mon-backup

# Avec restic + S3

restic -r s3:s3.eu-central-003.backblazeb2.com/bucket backup /home


10. Checklist bonnes pratiques


11. Tableau résumé

OutilUsageType
tarArchives localesManuel
rsyncSync incrémentaleFlexible
resticBackup moderneAutomatisé
borgDédupliquéAvancé
rcloneCloud syncCloud

Maîtrise les sauvegardes pour protéger tes données ! 💾