Script de sauvegarde automatique: ce script à pour but de faire une sauvegarde incrémentale et automatisée du système grâce au outils rsync et cron ainsi que le langage de script bash.
Le script et son fichier de configuration sont téléchargeable à la fin de l'article.
Préparation
Ce script de suppose l'utilisation d'un disque dur dédié qui sera monté dans l'arborescence uniquement le temps de la sauvegarde (ou de la récupération) des données.
Il faut donc ajouter l'option noauto à ce disque dans le fichier /etc/fstab. Vous devriez avoir un ligne de genre (remplacez les différentes valeur pour l'adapter à votre système):
/dev/hda1 /mnt/sauvegarde ext3 noauto 0 2
Les différents fichiers nécessaire à la sauvegarde sont situé dans les répertoire suivants:
- script principal: /usr/local/bin/sauvegarde-auto.sh
- fichiers de configuration: /etc/sauvegarde.conf
- liste des exclusions: /etc/sauvegarde.exclus
Le script
Fonctions
La fonction qui lance la synchro avec rsync
C'est la plus importante: elle lance rsync avec les paramètres qui vont bien et envoie le résultat dans le fichier journal.
do_rsync() { rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT > $LASTLOG }
La fonction qui enregistre les logs de sauvegarde
Cette fonction réalise un résumé de la quantité de données sauvegardées grâce à la commande du et l'ajoute à un journal:
do_logging() { echo >> $LOGFILE echo "Sauvegarde du $INCREMENTDIR de la machine $HOSTNAME:" >> $LOGFILE echo "################################################" >> $LOGFILE du -chs $ARCHIVEROOT/$INCREMENTDIR/* >> $LOGFILE echo "################################################" >> $LOGFILE FIN=`date +%Y-%m-%d_%Hh%M` echo "Sauvegarde fini le $FIN" >> $LOGFILE df -h $ARCHIVEDEV >> $LOGFILE echo >> $LOGFILE echo "***" >> $LOGFILE }
La fonction qui envoie un mail à la fin de la sauvegarde
Cette fonction crée un fichier à partir du résumé de la sauvegarde de la fonction précédente et l'envoie par e-mail (commande mail).
C'est optionnel. Je la garde "au cas où", mais je l'ai désactivée que le corps du scripts en commentant l'appel à cette fonction.
do_accounting() { echo "Rapport de sauvegarde du $INCREMENTDIR de $HOSTNAME:" > /tmp/rsync_script_tmpfile echo >> /tmp/rsync_script_tmpfile echo "####################################################">>/tmp/rsync_script_tmpfile cat $LOGFILE >> /tmp/rsync_script_tmpfile echo "Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile" Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile # mv -v /tmp/rsync_script_tmpfile $ARCHIVEROOT/archive.log echo "rm /tmp/rsync_script_tmpfile" rm /tmp/rsync_script_tmpfile }
Corps du script
Tout d'abord, on charge les paramètre contenu dans le fichier de configuration situé dans le répertoire /etc/ :
source /etc/sauvegarde.conf
Pour plus de sécurité le disque de sauvegarde ne doit pas etre monté automatiquement. On le monte ici explicitement:
mount $ARCHIVEDEV $ARCHIVEROOT
Pour être sur que le répertoire d'archivage existe
install -d $ARCHIVEROOT/$CURRENT
On peut commencer la sauvegarde après avoir vérifié que le répertoire de sauvegarde existe bien ainsi que le fichier contenu les dossiers et fichiers exclus de la sauvegarde.
On appelle ainsi les fonctions définies ci-dessus, à l'exception de do_accounting qui est commentée (symbole # en début ligne). Pour recevoir un mail résumant chaque sauvegarde, il suffit de décommenter cette ligne et remplir le fichier de configuration avec les paramètres nécessaires.
if [ -f $EXCLUDES ]; then if [ -d $BACKUPDIR ]; then do_rsync do_logging # do_accounting else echo "Le répertoire à sauvegarder n'existe pas: $BACKUPDIR"; exit fi else echo "Le fichier $EXCLUDES n\'existe pas"; exit fi
Par sécurité on démonte le périphérique de sauvegarde après la sauvegarde:
umount $ARCHIVEROOT
Automatisation
C'est relativement simple. En tant que root lancer la commande:
#crontab -e
et ajouter un ligne du type:
0 3 * * * /usr/local/bin/sauvegarde-auto.sh
Cette ligne permet de lancer chaque jour la sauvegarde à 3h00 le matin. Pour le paramétrage, de cron, je vous laisse lire la page man cron
Configuration
Le fichiers de configuration est situé dans le répertoire /etc.
- adresse mail pour le rapport de sauvegarde:
MAILADDR=root@localhost
- Nom de la machine pour le rapport envoyé par mail. Ce paramètre pert de distingué plusieurs machine dans un parc.
HOSTNAME=pc-principal
- Répertoire à sauvegarder. En l'occurrence la racine, donc tout le système.
BACKUPDIR=/
- Chemin vers le fichier listant les fichiers et répertoire à exclure au format de rsync
EXCLUDES=/etc/sauvegarde.exclus
- Répertoire de sauvegarde. Le cas échéant, c'est le point de montage du périphérique de sauvegarde
ARCHIVEROOT=/mnt/sauvegarde
- Périphérique de sauvegarde (disque dur dédié)
ARCHIVEDEV=/dev/hda1
- Activer le montage et le démontage du périphérique de sauvegarde ? 0 ou 1. Ce n'est pas encore implémenté dans le script.
MOUNTARCHIVE=1
- Nom du fichier journal global (résumés des sauvegarde)
LOGFILE=/var/log/archives.log
- Journal détaillé de la dernière sauvegarde
LASTLOG=/var/log/derniere_archive.log
- répertoire de la sauvegarde principale sur le périphérique de sauvegarde
CURRENT=mai
- répertoire de la sauvegarde incrémentale. Il est défini à partir de la date et de l'heure de la sauvegarde selon une arborescence par années puis par mois et par jour et heure.
INCREMENTDIR=`date +%Y/%m/%d_%Hh%M`
- options particulières à passer à rsync. Ne pas modifier sans avoir lu et relu la documentation de rsync et bien compris comment le script marche !!!
OPTIONS="--force --ignore-errors --delete --delete-excluded --exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av"
Bonjour;
Je suis très intéressé par ce script de sauvegarde. Par contre je n’ai pas trouvé le lien de téléchargement. Auriez vous l’amabilité de me dire comment faire pour l’obtenir.
Dans tous les cas merci de partager vos connaissances avec un débutant. Bonne journée à vous.
Cordialement.
Script de sauvegarde automatique
Voilà l’archive qui contient le script et les deux fichiers de configuration
merci super mais ne manque t il pas le script de restauration de la sauvegarde?
en tout cas bravo
En fait, je n’utilise pas de scritp de restauration, j’utilise simplement la fonction cp pour copier le ou les fichiers que je veux restaurer.
Ca marche d’ailleurs pour un système entier (tout est fichier
). La seule chose à faire en plus est de restaurer aussi le bootloader (grub par exemple) et vérifier que le fichier /etc/fstab et toujours à jour (si restauration sur un disque avec des partitions différentes).
Ping : 6 mois plus tard…. @ Aroblog 2.7
Bonjour,
Merci pour ce script vraiment interréssant qui peut sans doute m’aider si je n’étais pas trop bleu. Voilà donc mon problème: j’ai un serveur d’antivirus que je met à jour quotidiennement. Si quelqu’un peut bien m’aider j’aimerais faire cette mise à jour de façon automatique. Mon serveur est un Linux Redhat, je télécharge les mises à jour sur un lien internet.