Script de sauvegarde automatique

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"

3 comments.

jeff1494
Comment on February 14th, 2008.

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.

Comment on February 25th, 2008.

Script de sauvegarde automatique

Voilà l’archive qui contient le script et les deux fichiers de configuration

ivi610
Comment on March 25th, 2008.

merci super mais ne manque t il pas le script de restauration de la sauvegarde?
en tout cas bravo

Leave a comment

Names and email addresses are required (email addresses aren't displayed), url's are optional.

Comments may contain the following xhtml tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>