ZFS: Script de sauvegarde automatique
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
:wq
chmod a+x /home/sauve/sauve_zfs.sh
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............................................................................. |
chmod a+x /home/sauve/sauve_zfs.sh