Script Bash Linux : comment automatiser vos sauvegardes de serveur

Script Bash Linux : comment automatiser vos sauvegardes de serveur

Image by: Brett Sayles

Pourquoi automatiser les sauvegardes est crucial

Saviez-vous que 40% des PME ne se remettent jamais d’une perte complète de données ? Ce chiffre alarmant souligne l’importance vitale des sauvegardes automatisées. Pour les administrateurs système débutants, concevoir un script Bash robuste n’est pas un luxe, mais une nécessité opérationnelle. L’automatisation des tâches répétitives comme l’archivage et le transfert de données élimine les erreurs humaines, garantit la régularité des sauvegardes et libère un temps précieux pour des missions à plus forte valeur ajoutée.

Imaginez devoir copier manuellement chaque jour des gigaoctets de données critiques entre serveurs. Non seulement c’est chronophage, mais un seul oubli peut compromettre la continuité d’activité. L’automatisation via des scripts offre plusieurs avantages décisifs :

  • Fiabilité accrue : Exécution identique à chaque fois, sans variations
  • Traçabilité complète : Journalisation systématique des opérations
  • Réactivité en cas d’incident : Restauration possible à tout moment
  • Économie de ressources : Jusqu’à 70% de temps administratif gagné selon une étude Gartner

Dans ce guide pratique, vous apprendrez à créer un système complet d’archivage sécurisé avec rotation intelligente des sauvegardes, le tout orchestré par un script Bash optimisé.

Préparation du serveur et vérifications

Avant d’écrire notre script Bash robuste, assurons-nous que l’environnement est correctement configuré. Ces étapes préalables sont essentielles pour garantir la stabilité de votre automatisation.

Vérification des outils système

Connectez-vous en SSH à votre serveur source et exécutez ces commandes :

# Vérifier la version de Bash
bash --version

# Tester la présence de rsync
rsync --version | head -n1

# Contrôler l'accès SSH vers le serveur cible
ssh utilisateur@backup-server "echo 'Connexion réussie !'"

Rsync est l’outil idéal pour les transferts incrémentiels sécurisés : il ne copie que les modifications, réduisant la bande passante utilisée de jusqu’à 90%. Pour les échanges entre serveurs, configurez une authentification par clé SSH plutôt que par mot de passe :

  1. Générez une paire de clés avec ssh-keygen -t ed25519
  2. Copiez la clé publique vers le serveur cible : ssh-copy-id utilisateur@backup-server
  3. Testez la connexion sans mot de passe

Créez une structure de répertoires logique sur le serveur de sauvegarde, par exemple :

  • /sauvegardes/applications/jour
  • /sauvegardes/basesdedonnees/semaine

Cette organisation facilitera la rotation ultérieure des sauvegardes. Consultez notre guide sur l’optimisation des serveurs Linux pour plus de bonnes pratiques.

Création du script Bash : archivage et compression

Passons maintenant au cœur de notre automatisation : le script d’archivage. Nous allons créer un fichier sauvegarde.sh avec les éléments suivants :

#!/bin/bash
# Script d'archivage automatique - v1.0
DATE=$(date +%Y%m%d-%H%M)
LOG="/var/log/sauvegardes/backup_$DATE.log"

Archivage avec tar et compression

Utilisez tar pour empaqueter les répertoires avec préservation des permissions :

tar -czpf "/sauvegardes/archive_$DATE.tar.gz" \
  --exclude="*.tmp" \
  --exclude="cache/*" \
  /var/www /etc/apache2 2>> "$LOG"

Explications des options :

  • -c : Crée une nouvelle archive
  • -z : Compression gzip (utilisez -j pour bzip2 si priorité à la taille)
  • -p : Préserve les permissions des fichiers
  • -f : Spécifie le nom du fichier d’archive

Pour une journalisation professionnelle, ajoutez ce snippet en début de script :

exec > >(tee -a "$LOG") 2>&1
echo "Début de la sauvegarde à $(date)"

Cette technique redirige tous les outputs (standard et erreurs) vers le fichier log tout en les affichant dans le terminal. Pensez à consulter la documentation officielle de tar pour personnaliser davantage.

Transfert sécurisé avec rsync et rotation des sauvegardes

Rsync est l’arme absolue pour des transferts sécurisés et efficaces. Voici la commande typique intégrée dans notre script :

rsync -avz --progress -e "ssh -p 2222" \
  /sauvegardes/archive_*.tar.gz \
  utilisateur@backup-server:/backups/ 2>> "$LOG"

Décryptage des options :

  • -a : Mode archive (préserve permissions, dates)
  • -v : Verbose (détail des opérations)
  • -z : Compression pendant le transfert
  • –progress : Affiche la progression en temps réel

Rotation intelligente des sauvegardes

Implémentez cette fonction dans votre script pour supprimer automatiquement les anciennes sauvegardes :

# Garder seulement les 7 dernières sauvegardes
ssh utilisateur@backup-server "ls -t /backups/archive_* | tail -n +8 | xargs rm -f"

Adaptez votre stratégie de rotation selon ce tableau comparatif :

Type de sauvegarde Période de rétention Commandes de rotation Espace estimé
Quotidienne 7 jours tail -n +8 500 Go
Hebdomadaire 4 semaines tail -n +5 250 Go
Mensuelle 12 mois find -mtime +365 1 To

Pour une sécurité maximale, combinez rsync avec une solution de chiffrement comme GPG pour les données sensibles. La documentation officielle de rsync propose des options avancées comme --partial pour reprendre les transferts interrompus.

Automatisation via les tâches Cron

Cron est le planificateur de tâches incontournable sous Linux. Pour exécuter notre script chaque nuit à 2h00 :

  1. Ouvrez le crontab : crontab -e
  2. Ajoutez cette ligne :
0 2 * * * /usr/local/bin/sauvegarde.sh

Décodons la syntaxe Cron :

  • 0 : Minute (0-59)
  • 2 : Heure (0-23)
  • * : Jour du mois (tous)
  • * : Mois (tous)
  • * : Jour de la semaine (tous)

Pour une gestion professionnelle :

  • Redirigez les sorties vers syslog : 0 2 * * * /usr/local/bin/sauvegarde.sh | logger -t sauvegarde
  • Testez votre syntaxe avec l’outil Crontab Guru
  • Placez le script dans /usr/local/bin/ pour un accès système

Configurez une alerte email en cas d’échec en ajoutant cette ligne dans le script :

MAILTO="[email protected]"
echo "Sauvegarde du $(date) terminée" | mail -s "Rapport de sauvegarde" $MAILTO

Frequently asked questions

Comment tester mon script Bash avant de le mettre en production ?

Utilisez l’option -n pour une vérification syntaxique : bash -n mon_script.sh. Testez en environnement isolé avec des répertoires fictifs. Exécutez avec -x pour un débogage détaillé : bash -x mon_script.sh, et simulez des erreurs en modifiant temporairement les permissions des fichiers.

Rsync est-il suffisamment sécurisé pour des données sensibles ?

Rsync sur SSH offre un chiffrement de niveau militaire (AES-256). Pour des exigences élevées, combinez-le avec du chiffrement côté client via gpg avant transfert. Évitez absolument le mode –password-file non sécurisé. Consultez notre guide de sécurité pour des configurations avancées.

Que faire si mon script Cron ne s’exécute pas ?

Vérifiez dans l’ordre : 1) Les permissions d’exécution du script (chmod +x), 2) Le chemin absolu des binaires dans le script, 3) Les logs système (grep CRON /var/log/syslog), 4) L’absence de retour chariot (CRLF) dans le crontab. Testez manuellement le contexte d’exécution de Cron avec su -s /bin/bash -c "votre_commande".

Comment gérer les sauvegardes de bases de données MySQL ?

Intégrez mysqldump dans votre script avant l’archivage : mysqldump -u user -p'motdepasse' --all-databases | gzip > backup_db.sql.gz. Pour minimiser l’impact, exécutez pendant les heures creuses ou utilisez –single-transaction pour les tables InnoDB. La documentation MySQL détaille les options avancées.

Conclusion

Automatiser les sauvegardes avec un script Bash robuste transforme une tâche rébarbative en processus fiable et invisible. En combinant tar pour l’archivage, rsync pour le transfert sécurisé, une rotation intelligente des sauvegardes et Cron pour la planification, vous bâtissez une infrastructure résiliente. Les débutants retiendront trois principes clés : tester rigoureusement chaque composant, documenter toutes les opérations, et surveiller systématiquement les logs. Cette approche réduit jusqu’à 90% des risques de perte de données selon le NIST.

Commencez dès aujourd’hui : implémentez un script de base avec archivage quotidien, puis enrichissez-le progressivement de notifications et de chiffrement. Votre future équipe vous remerciera lors du premier incident critique ! Explorez nos modèles de scripts prêts à l’emploi pour gagner du temps.