Recherche de site Web

Comment automatiser les sauvegardes Linux en utilisant un script Bash


Sur un système Linux, avoir des sauvegardes régulières est essentiel pour protéger vos données, les garder en sécurité et faciliter la récupération en cas de problème. Que vous gériez des fichiers personnels, exécutiez un environnement de développement ou administriez des serveurs, vous avez besoin d'un plan de sauvegarde solide.

L'un des moyens les plus simples et les plus flexibles de gérer les sauvegardes est d'écrire un script personnalisé, ce qui vous permet de décider exactement ce qui est sauvegardé, quand et où il est stocké. Cela permet également de gagner du temps et de réduire le risque de perte de données.

Dans ce guide, vous apprendrez comment créer un script shell simple qui sauvegarde automatiquement des fichiers importants.

Pourquoi utiliser un script de sauvegarde ?

Utiliser un script de sauvegarde sous Linux offre aux administrateurs système plus de contrôle et de flexibilité en ce qui concerne la protection des données importantes.

Voici pourquoi c'est une décision intelligente :

  • Sauvegardes automatisées : Vous pouvez programmer le script pour qu'il s'exécute automatiquement en utilisant des outils comme cron, afin de ne pas avoir à vous souvenir de sauvegarder les choses manuellement.
  • Contrôle total : Vous décidez de ce qui est sauvegardé, où cela va et à quelle fréquence. Que ce soit des copies quotidiennes de /etc, des instantanés hebdomadaires des répertoires personnels, ou simplement des répertoires sélectionnés.

Créer un script de sauvegarde pour les fichiers importants

Ouvrez votre terminal et naviguez jusqu'au répertoire où vous souhaitez stocker le script (par exemple, votre répertoire personnel ou /usr/local/bin/ pour un accès système).

Créez le fichier script en utilisant un éditeur de texte comme nano ou vim :

nano backup_script.sh

Ci-dessous se trouve un script de base qui sauvegarde des fichiers vers un répertoire spécifié.

#!/bin/bash

Define source and destination directories
SOURCE_DIR="/home/user/Documents"     # Source directory to back up
BACKUP_DIR="/home/user/backups"       # Destination directory for backups

Create a timestamp for the backup folder
TIMESTAMP=$(date +'%Y%m%d%H%M%S')

Create a new backup folder with the timestamp
BACKUP_FOLDER="$BACKUP_DIR/backup_$TIMESTAMP"
mkdir -p "$BACKUP_FOLDER"

Copy files to the backup folder
cp -r "$SOURCE_DIR"/* "$BACKUP_FOLDER"

Log the completion of the backup
echo "Backup completed at $TIMESTAMP" >> "$BACKUP_DIR/backup_log.txt"

Optional: Remove backups older than 30 days
find "$BACKUP_DIR" -type d -name "backup_*" -mtime +30 -exec rm -rf {} \;

Explication du script :

  • SOURCE_DIR : Le répertoire contenant les fichiers que vous souhaitez sauvegarder (par exemple, /home/user/Documents).
  • BACKUP_DIR : Le répertoire où les sauvegardes seront stockées (par exemple, /home/user/backups).
  • TIMESTAMP : Une variable qui stocke la date et l'heure actuelles pour identifier de manière unique chaque dossier de sauvegarde.
  • mkdir -p : Crée le dossier de sauvegarde avec l'horodatage.
  • cp -r : Copie tous les fichiers et sous-répertoires du répertoire source vers le dossier de sauvegarde.
  • La commande echo enregistre la fin de la sauvegarde et ajoute un horodatage au fichier journal.
  • La commande find supprime les sauvegardes de plus de 30 jours, empêchant votre répertoire de sauvegarde de se remplir de fichiers anciens.

Enregistrez et fermez le script (dans nano, appuyez sur CTRL + X, puis sur Y pour confirmer, et appuyez sur Entrée).

Maintenant que le script est écrit, vous devez le rendre exécutable.

chmod +x backup_script.sh

Vous pouvez maintenant exécuter le script manuellement en exécutant :

./backup_script.sh

Si tout est correctement configuré, cela devrait créer une sauvegarde de vos fichiers dans le répertoire de sauvegarde spécifié.

Planifier le script de sauvegarde avec Cron

Pour automatiser le processus de sauvegarde, vous pouvez programmer le script pour qu'il s'exécute à des intervalles spécifiques en utilisant cron, le planificateur de tâches de Linux.

Ouvrez le fichier de configuration cron en tapant :

crontab -e

Ajoutez un travail cron pour exécuter le script à une heure spécifiée. Par exemple, pour exécuter le script de sauvegarde tous les jours à 2 heures du matin, ajoutez la ligne suivante dans le fichier cron :

0 2 * * * /path/to/backup_script.sh

Le script s'exécutera maintenant automatiquement à l'heure spécifiée.

Pour confirmer la sauvegarde, vous pouvez vérifier le répertoire de sauvegarde pour vérifier que les sauvegardes sont créées comme prévu, ou vous pouvez également examiner les journaux cron pour confirmer que le script de sauvegarde s'exécute à l'heure prévue.

grep CRON /var/log/syslog

Ajouter la compression avec tar et gzip

Au lieu de copier les fichiers directement, vous pouvez compresser l'ensemble de la sauvegarde dans une archive .tar.gz, ce qui permet de gagner de l'espace et de garder les choses en ordre.

Script modifié avec compression :

#!/bin/bash

Define source and destination directories
SOURCE_DIR="/home/user/Documents"
BACKUP_DIR="/home/user/backups"

Create a timestamp
TIMESTAMP=$(date +'%Y%m%d%H%M%S')

Define the backup filename
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.tar.gz"

Create the backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"

Create a compressed archive of the source directory
tar -czf "$BACKUP_FILE" -C "$SOURCE_DIR" .

Log the backup completion
echo "Compressed backup created at $TIMESTAMP" >> "$BACKUP_DIR/backup_log.txt"

Optional: Delete old backups (over 30 days)
find "$BACKUP_DIR" -type f -name "backup_*.tar.gz" -mtime +30 -exec rm -f {} \;

Envoyer une sauvegarde vers un serveur distant en utilisant scp

Si vous voulez stocker vos sauvegardes sur un serveur distant (comme un VPS de sauvegarde ou un NAS), vous pouvez télécharger l'archive en utilisant la commande scp.

Ajoutez ce qui suit à la fin du script :

# Define remote server info
REMOTE_USER="your_user"
REMOTE_HOST="your-server-ip"
REMOTE_DIR="/remote/backup/location"

Send the backup file to the remote server
scp "$BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"

Configurez l'authentification par clé SSH entre votre machine locale et le serveur distant pour éviter de saisir les mots de passe manuellement.

Conclusion

Créer un script de sauvegarde sous Linux est un moyen simple et pratique de protéger vos données contre les pertes accidentelles. En programmant le script avec cron, vous pouvez automatiser le processus de sauvegarde afin que vos fichiers importants soient enregistrés régulièrement sans avoir à le faire manuellement.