Outils & Référence
💾 Scripts Sauvegarde — Backup — Scripts prêts à l'emploi
📜 Scripts Utiles
10 scripts de sauvegarde et restauration : rsync, tar, MySQL, rotation, vérification.
📜 3 scripts
🟢 0 débutant
🔵 2 confirmé
🔴 1 expert
›
Sauvegarde complète avec tar + chiffrement
Confirmé
tarbackupgpgchiffrement
Archive un dossier avec tar, compresse et chiffre avec GPG pour une sauvegarde sécurisée.
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
SOURCE="/var/www/html /etc /home"
DEST="/backup/archives"
GPG_KEY="admin@monsite.fr" # Clé GPG du destinataire
RETENTION=30 # Jours de rétention
DATE=$(date +%Y%m%d_%H%M)
NOM_ARCHIVE="backup_$(hostname)_${DATE}"
# ────────────────────────────────────────────────────
mkdir -p "$DEST"
LOG="/var/log/backup.log"
exec >> "$LOG" 2>&1
echo "[$(date)] === Début sauvegarde ==="
# Créer l'archive tar.gz
ARCHIVE_TMP="/tmp/${NOM_ARCHIVE}.tar.gz"
tar -czf "$ARCHIVE_TMP" $SOURCE 2>/dev/null
TAILLE=$(du -sh "$ARCHIVE_TMP" | cut -f1)
echo "[$(date)] Archive : $TAILLE"
# Chiffrer avec GPG
if command -v gpg &>/dev/null && gpg --list-keys "$GPG_KEY" &>/dev/null; then
gpg --recipient "$GPG_KEY" --output "$DEST/${NOM_ARCHIVE}.tar.gz.gpg" --encrypt "$ARCHIVE_TMP"
rm -f "$ARCHIVE_TMP"
FICHIER_FINAL="$DEST/${NOM_ARCHIVE}.tar.gz.gpg"
echo "[$(date)] ✅ Archive chiffrée : $FICHIER_FINAL"
else
mv "$ARCHIVE_TMP" "$DEST/${NOM_ARCHIVE}.tar.gz"
FICHIER_FINAL="$DEST/${NOM_ARCHIVE}.tar.gz"
echo "[$(date)] ⚠️ GPG non dispo — archive non chiffrée : $FICHIER_FINAL"
fi
# Rotation
find "$DEST" -name "backup_*.tar.gz*" -mtime +$RETENTION -delete
echo "[$(date)] Rétention ${RETENTION}j — anciens fichiers supprimés"
echo "[$(date)] === Fin sauvegarde ==="
›
Vérification intégrité des sauvegardes
Confirmé
backupintégritéchecksummd5
Vérifie l'intégrité des archives de sauvegarde en comparant les checksums MD5/SHA256.
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
BACKUP_DIR="/backup/archives"
CHECKSUM_FILE="$BACKUP_DIR/checksums.sha256"
EMAIL="admin@monsite.fr"
# ────────────────────────────────────────────────────
echo "=== Vérification intégrité sauvegardes — $(date) ==="
ERREURS=0
# Mode génération : créer les checksums de référence
if [ "$1" = "--generer" ]; then
echo "Génération des checksums de référence..."
find "$BACKUP_DIR" -name "*.tar.gz*" -type f | sort | xargs sha256sum > "$CHECKSUM_FILE"
echo "✅ Checksums générés : $(wc -l < $CHECKSUM_FILE) fichiers"
exit 0
fi
# Mode vérification
if [ ! -f "$CHECKSUM_FILE" ]; then
echo "❌ Fichier checksums introuvable. Lancer avec --generer d'abord."
exit 1
fi
while IFS= read -r line; do
EXPECTED_HASH=$(echo "$line" | awk '{print $1}')
FILE=$(echo "$line" | awk '{print $2}')
if [ ! -f "$FILE" ]; then
echo "❌ MANQUANT : $FILE"
ERREURS=$((ERREURS+1))
continue
fi
ACTUAL_HASH=$(sha256sum "$FILE" | awk '{print $1}')
if [ "$EXPECTED_HASH" = "$ACTUAL_HASH" ]; then
echo "✅ OK : $(basename $FILE)"
else
echo "❌ CORROMPU : $FILE"
ERREURS=$((ERREURS+1))
fi
done < "$CHECKSUM_FILE"
echo ""
echo "Résultat : $ERREURS erreur(s)"
if [ "$ERREURS" -gt 0 ]; then
echo "⚠️ $ERREURS sauvegardes corrompues/manquantes sur $(hostname)" | mail -s "❌ Intégrité sauvegardes KO" "$EMAIL"
fi
›
Sauvegarde Proxmox vzdump automatique
Expert
proxmoxvzdumpbackupVM
Lance des sauvegardes vzdump de toutes les VMs Proxmox avec rétention et notification.
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
STORAGE="local" # Stockage Proxmox cible
COMPRESS="zstd" # gzip, lzo, zstd
RETENTION=3 # Nombre de sauvegardes à garder
EMAIL="admin@monsite.fr"
EXCLURE_VMIDS="" # Ex: "100 105" — VMs à ignorer
# ────────────────────────────────────────────────────
LOG="/var/log/vzdump_auto.log"
exec >> "$LOG" 2>&1
echo "=== VZDUMP AUTO — $(date) ==="
# Récupérer la liste des VMs et LXC
ALL_VMS=$(qm list 2>/dev/null | awk 'NR>1{print $1}')
ALL_LXC=$(pct list 2>/dev/null | awk 'NR>1{print $1}')
backup_vm() {
local VMID=$1
local TYPE=$2
# Vérifier si dans la liste d'exclusion
if echo "$EXCLURE_VMIDS" | grep -qw "$VMID"; then
echo "⏩ VM $VMID ignorée (liste d'exclusion)"
return
fi
echo "📦 Sauvegarde $TYPE $VMID..."
vzdump $VMID --storage $STORAGE --compress $COMPRESS --mode snapshot --maxfiles $RETENTION --quiet 1
if [ $? -eq 0 ]; then
echo "✅ $TYPE $VMID — OK"
else
echo "❌ $TYPE $VMID — ERREUR"
fi
}
for vmid in $ALL_VMS; do backup_vm $vmid "VM"; done
for vmid in $ALL_LXC; do backup_vm $vmid "LXC"; done
echo "=== Fin vzdump — $(date) ==="
# Envoyer le log par email
mail -s "Rapport vzdump $(hostname) $(date +%d/%m)" "$EMAIL" < "$LOG"
# Cron : 0 1 * * 0 /opt/scripts/vzdump_auto.sh
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google