Effectuer des sauvegardes manuelles sur les systèmes Linux peut sembler une option viable au premier abord, mais cette méthode devient rapidement fastidieuse et peu fiable à mesure que le volume de données et la fréquence des sauvegardes augmentent. Le moindre retard ou oubli peut entraîner la perte de fichiers importants sans avertissement.

L'utilisation d'un simple script Bash, associé à une planification cron précise, constitue une solution pratique et stable pour automatiser entièrement les sauvegardes. Cette approche vous offre un contrôle total sur les données sauvegardées, leur fréquence et leur emplacement, sans avoir recours à des interfaces graphiques complexes ou limitées.
Les interfaces graphiques peuvent sembler plus simples pour l'utilisateur lambda, mais elles consomment souvent davantage de ressources, manquent de flexibilité et sont moins adaptées aux serveurs ou systèmes fonctionnant sans environnement graphique. À l'inverse, l'automatisation en périphérie garantit fiabilité, clarté et facilité de maintenance.
Adopter cette approche fait de la sauvegarde une partie intégrante du système, fonctionnant silencieusement et efficacement en arrière-plan, ce que recherchent les utilisateurs professionnels et les administrateurs système.
Sommaire
- Créez un script Bash qui contrôle le type, l'emplacement et la durée des sauvegardes.
- Planifiez l'exécution du fichier backup.sh à l'aide de cron et vérifiez les journaux système et la destination de la sauvegarde après chaque exécution.
- Testez le script, utilisez des chemins absolus pour éviter les erreurs cron et les erreurs d'exécution, et utilisez des commentaires pour la documentation.
Un outil comme Déjà Dup est une solution graphique simple et performante pour automatiser les sauvegardes sous Linux. Cependant, la création d'un script de sauvegarde reste la méthode la plus efficace. Elle offre un contrôle bien plus précis sur le type et l'emplacement des données, ainsi que sur la fréquence des sauvegardes. De plus, elle constitue une introduction ludique aux bases de la programmation. Voici comment créer un script de sauvegarde simple et utiliser cron pour automatiser vos sauvegardes.
Créez un script de sauvegarde simple et automatisez-le.
Du moment que vous modifiez et mettez à jour le script avec vos chemins absolus, l'emplacement de sauvegarde peut être un dossier local, une nouvelle partition de disque ou un disque externe.
Sélectionnez la destination de sauvegarde
L'objectif était de créer un simple script de sauvegarde, mais je souhaitais également une copie des dossiers Linux principaux, au cas où je devrais restaurer le système. La destination de la sauvegarde pour ce projet était une clé USB de 128 Go.
Préparation du site de sauvegarde
Que votre emplacement de sauvegarde soit une clé USB, un disque dur externe ou une nouvelle partition, faites attention aux chemins d'accès absolus aux dossiers et aux points de montage ; vous en aurez besoin lorsque vous commencerez à écrire le script.
Remarque : Ce script de sauvegarde utilise l’outil rsync, généralement préinstallé sur la plupart des distributions Linux. Vérifiez votre version de rsync ; si elle n’est pas installée, installez-la à l’aide de votre gestionnaire de paquets.
J'ai commencé le projet en créant un nouveau dossier nommé « Backup » sur la clé USB chargée. Vous pouvez créer ce dossier via l'interface de ligne de commande en accédant à l'emplacement de sauvegarde, puis en utilisant le raccourci clavier Ctrl+Maj+N. J'ai choisi d'utiliser la ligne de commande et j'ai utilisé les commandes lsblk, cd et mkdir.
lsblk
cd “/media/htg/DATA BACKUP”
mkdir backup
rsync --version
sudo apt update -y && sudo apt install rsync
Spécifiez les éléments à sauvegarder et créez un script backup.sh.
Pour restaurer mon système, j'ai choisi de copier un dossier contenant mes fichiers personnels et les répertoires Linux essentiels tels que /home, /etc, /var, /usr/local, /root et /opt. La plupart des terminaux Linux permettent d'écrire des scripts simples. J'ai utilisé nano pour créer et enregistrer un script backup.sh en bash dans mon répertoire personnel. Copiez et collez le script suivant dans votre terminal :
#!/bin/bash
# This bash script backs up Linux recovery directories and personal files
# Preserves ownership, permissions, timestamps, ACLs, and xattrs
set -euo pipefail
#------------This is the CONFIG script-----------
HOSTNAME="$(hostname)"
DATE="$(date +%F)"
BACKUP_ROOT="/media/htg/DATA BACKUP/Backup"
DEST_DIR="$BACKUP_ROOT/archives/${HOSTNAME}_${DATE}"
LOG_FILE="BACKUP_ROOT/logs/backup_${HOSTNAME}_${DATE}.log"
TMP_DIR="$BACKUP_ROOT/tmp"
#Don't forget to edit the BACKUP_ROOT, DEST_DIR, LOG_FILE and TMP_DIR paths
#Customize SOURCES=( to include the files and directories you want to back up
SOURCES=(
"/home"
"/etc"
"/var"
"/root"
"/opt"
"/usr/local"
"/home/htg/Backup"
)
EXCLUDES=(
"--exclude=/var/cache/"
"--exclude=/var/tmp/"
"--exclude=/var/lib/apt/lists/"
"--exclude=/home/*/.cache/"
"--exclude=/home/*/Downloads/"
"--exclude=/var/lib/docker/"
"--exclude=/var/lib/containers/"
)
# Add these flags for backup summary and progress:
# --info=progress2: Total progress line
# --info=name0: Hide individual filenames
# --stats: Final summary block
# --no-inc-recursive: Better progress accuracy
RSYNC_FLAGS=(-aAXH --numeric-ids --delete --human-readable --inplace --partial --info=progress2 --info=name0 --stats --no-inc-recursive)
# ---------- PREPARATION ----------
# Create destination folders on the flash drive
mkdir -p "$DEST_DIR" "$TMP_DIR" "$(dirname "$LOG_FILE")"
touch "$LOG_FILE"
# ---------- BACKUP ----------
echo "[$(date)] Starting backup to $DEST_DIR" | tee -a "$LOG_FILE"
for SRC in "${SOURCES[@]}"; do
echo "[$(date)] Backing up $SRC ..." | tee -a "$LOG_FILE"
# Run rsync and log output
rsync "${RSYNC_FLAGS[@]}" "${EXCLUDES[@]}" "$SRC" "$DEST_DIR" >>"$LOG_FILE" 2>&1
done
echo "[$(date)] Backup completed" | tee -a "$LOG_FILE"
# ---------- VERIFY ----------
echo "[$(date)] Listing destination sizes:" | tee -a "$LOG_FILE"
du -sh "$DEST_DIR"/* 2>/dev/null | tee -a "$LOG_FILE"
exit 0
Modifiez le script en remplaçant BACKUP_ROOT, DEST_DIR, LOG_FILE et TMP_DIR par vos chemins d'accès exacts, puis enregistrez les modifications et quittez. Dans l'éditeur de texte nano, utilisez Ctrl+O+Entrée et Ctrl+X. L'étape suivante consiste à utiliser la commande chmod pour rendre le script exécutable, et la commande ls pour vérifier son statut d'exécution (recherchez l'option -x).
nano ~/backup.sh
chmod +x ~/backup.sh
ls -l ~/backup.sh
Tester et automatiser le programme de sauvegarde à l'aide de tâches cron
~/backup.sh
sudo ~/backup.sh



Le script ne fonctionnera pas correctement en cas d'erreurs, mais le système les affichera pour vous permettre de les résoudre. Si tout se passe bien, les messages « Démarrer la sauvegarde » et « Sauvegarder /home » s'afficheront. En accédant au dossier de sauvegarde, vous y trouverez les dossiers sauvegardés.
Note
Si vous sauvegardez une grande quantité de données sur un disque externe, le processus peut prendre un certain temps. Tant qu'aucun message d'erreur ne s'affiche, patientez, même si la fenêtre de commande semble bloquée.
Après avoir testé le script et vérifié son bon fonctionnement, j'ai utilisé l'outil cron pour programmer son exécution à 8h00, la commande ls pour vérifier la tâche de sauvegarde planifiée et la commande systemctl pour vérifier l'état du service cron.



sudo crontab -e
0 20 * * * /usr/bin/bash /home/htg/backup.sh >> "/media/htg/DATA BACKUP/Backup/logs/cron_backup.log" 2>&1
sudo crontab -l
ls -l /home/htg/backup.sh
systemctl status cron
À ce stade, j'avais créé et testé avec succès le programme de sauvegarde, et utilisé l'outil cron pour l'automatiser. La dernière étape consistait à confirmer le processus de sauvegarde et à consulter les journaux après 20 h le lendemain.
Les trois leçons que j'ai apprises avec difficulté
La création de ce programme de sauvegarde a été une expérience amusante et enrichissante. Ce projet m'a permis de tirer trois leçons qui me servent encore aujourd'hui.
Testez toujours votre logiciel de sauvegarde.
Je n'ai pas testé le premier programme de sauvegarde. Devinez ce qui s'est passé ? Bingo ! Lors de mon test, le programme a planté. J'ai mis un moment à comprendre que j'avais fait une erreur avec une variable shell : j'avais tapé DATE+"$(date +%F)" au lieu de DATE="$(date +%F)", ce qui a provoqué une erreur « commande introuvable » à la ligne 10.



Tester les scripts de sauvegarde permet de déceler les erreurs de syntaxe et les problèmes d'autorisation susceptibles d'entraîner des erreurs d'exécution. C'est également une bonne pratique.
Utilisez des chemins absolus
Le système cron étant strict et les erreurs pouvant entraîner l'échec des tâches, prenez l'habitude d'utiliser des chemins d'accès complets et absolus aux dossiers et fichiers dans vos scripts. Cela réduit les erreurs, simplifie les sauvegardes et contribue à minimiser les erreurs d'exécution.
Commentez votre script

Commenter votre script revient à laisser des notes pour vous-même (et pour les autres) expliquant le but d'une partie ou d'une section particulière du script. En programmation Bash, le symbole dièse (#) est la manière la plus courante de commenter. Vous avez peut-être remarqué plusieurs commentaires dans mon script Bash.
Imaginons que vous deviez modifier un morceau de code six mois après l'avoir créé. Sans commentaires, le risque de modifier incorrectement des parties cruciales augmente, ce qui peut rendre le code inutilisable, car vous n'aurez plus le texte exact en tête.
Voici comment j'ai automatisé mes sauvegardes Linux à l'aide d'un simple script Bash, et voici les trois leçons que j'en ai tirées après une expérience difficile. Bien que l'utilisation de scripts ne soit pas la méthode la plus simple pour automatiser les sauvegardes, c'est une approche ludique et utile, surtout si vous souhaitez apprendre les bases de la programmation Bash.
L'automatisation des sauvegardes sous Linux à l'aide de Bash et de cron n'est pas seulement une option technique avancée, mais une étape cruciale pour garantir la continuité des données et minimiser les erreurs humaines. Cette approche allie simplicité, fiabilité et contrôle total.
Si vous recherchez une solution stable qui fonctionne sans intervention quotidienne et vous apporte la tranquillité d'esprit, commencez par créer un script simple et programmez-le régulièrement ; vous constaterez alors la réelle différence par rapport à l'utilisation d'interfaces graphiques.




