ZFS: Script de sauvegarde automatique

Publié le par 78.ultima

Voici un nouveau script de sauvegarde.

Cette fois ci, il est exclusivement pour le systeme de fichier ZFS.

En premier vous avez besoin d'un compte de sauvegarde et du logiciel sudo

Dans le compte root :
# creer un compte sauve sur votre machine ex: adduser ...

           aptitude install sudo
            visudo
            # Cmnd alias specification
            Cmnd_Alias      SAUVE_ZFS = /home/sauve/sauve_zfs.sh
            # %sudo ALL=NOPASSWD: ALL
            %sauve ALL=(ALL) ALL, NOPASSWD: SAUVE_ZFS
            :wq

            vi /etc/group
            # ajoute de
            sauve:x:1005:sauve
            :wq

Creation dans le cron de l'utilisateur le lancement du script
            crontab -eu sauve
            00 05 * * * sudo /home/sauve/sauve_zfs.sh 2>&1 >> /home/sauve/sauve_zfs.log
            :wq

            touch /home/sauve/sauve_zfs.log
            chown sauve:tape sauve_zfs.log

Dans le compte utilisateur sauve
vi /home/sauve/sauve_zfs.sh
#!/bin/sh
#set ${debug:-+x}
#  -----------------------------------------------------------------------------
#  Description   : Script de sauvegarde d'un systeme de fichier zfs
#  -----------------------------------------------------------------------------
#  Auteur        : 78.ultima.over-blog.com
#  Date creation : 06/10/2009
#  Version       : 0.1
#  -----------------------------------------------------------------------------
#  Modifications :
#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Date          :
#  Auteur        :
#  Objet         :
#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#  Date          :
#  Auteur        :
#  Objet         :
#  -----------------------------------------------------------------------------

#  -----------------------------------------------------------------------------
#  Definition de l'environnement
#  -----------------------------------------------------------------------------
PATH_SAUVE=/home/sauve
FILE_ROTATION=rotation.conf

ZFS_POOL=zfs-1T
ZFS_FILE=home
ZFS_SNAPSHOT=backupHome
destinataire="Adresse Email"

test -f $PATH_SAUVE/$FILE_ROTATION && . $PATH_SAUVE/$FILE_ROTATION

echo DEBUT...........................................................................
echo execution du fichier $0 a `date "+%H:%M:%S - %d %m %Y"`
echo .
echo ..
#  -----------------------------------------------------------------------------
#  Test de l'existance du fichier rotation.conf
#  -----------------------------------------------------------------------------
if [ ! -f "$PATH_SAUVE/$FILE_ROTATION" ]
then
        echo ROTATION=0 > $PATH_SAUVE/$FILE_ROTATION
        echo Creation du fichier $PATH_SAUVE/$FILE_ROTATION
        echo ..
fi

#  -----------------------------------------------------------------------------
#  Destruction du snapshot et des fichiers de sauvegardes
#  -----------------------------------------------------------------------------
echo ...


if [ "$ROTATION" != "9" ] ; then
        echo ....
   else
        INCI=0
        echo Destruction du snapshot et des fichiers de sauvegardes
        find $PATH_SAUVE -name "*.zfs.gz" -print | while read NOMFICHIER
        do
                echo $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$INCI
                zfs destroy $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$INCI
                rm $NOMFICHIER
                INCI=$(expr $INCI + 1)
                echo ROTATION=0 > $PATH_SAUVE/$FILE_ROTATION
        done
fi

#  -----------------------------------------------------------------------------
#  Creation du snapshot si n'existe pas
#  -----------------------------------------------------------------------------
echo .....
ROTATION=0
# Test de l'existence de fichier
find $PATH_SAUVE -name "*.zfs.gz" -print | while read NOMFICHIER
do

        if [ -f $NOMFICHIER ]
           then
                echo fichier existent : $NOMFICHIER
                ROTATION=$(expr $ROTATION + 1)
        fi
        echo ROTATION=$ROTATION > $PATH_SAUVE/$FILE_ROTATION
done

. $PATH_SAUVE/$FILE_ROTATION

echo creation du snapshot $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION
zfs snapshot $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION
echo ......

echo creation du fichier zfs de sauvegarde incrementale
echo Taille a sauvegarder : $( zfs list | grep -m 1 $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION \
                              | awk '{ print $4 }' )
if [ "$ROTATION" = "0" ]
then
        zfs send $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION | gzip > $PATH_SAUVE/$ZFS_SNAPSHOT$ROTATION.zfs.gz
        echo zfs send $INCRE $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION
        echo "sauvegarde rotative effectue, `date` !" | mailx -s "Sauvegarde: $ZFS_SNAPSHOT$ROTATION.zfs.gz" $destinataire
else
        ROTAPREC=$(expr $ROTATION - 1)
        zfs send -i $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTAPREC \
                           $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION | \
                           gzip > $PATH_SAUVE/$ZFS_SNAPSHOT$ROTATION.zfs.gz
        echo zfs send -i $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTAPREC \
                           $ZFS_POOL/$ZFS_FILE@$ZFS_SNAPSHOT$ROTATION
fi


echo ROTATION=$ROTATION > $PATH_SAUVE/$FILE_ROTATION
echo .......
echo FIN.............................................................................

:wq

chmod a+x /home/sauve/sauve_zfs.sh

Publié dans Linux

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article