Script Bash : Rsync snapshot

Ceci est un script de rotation rsync, parmi tant d'autres...

 

#!/bin/bash
#
# need utils smbfs

declare -a DIR2CIFS=""  # répertoire local vers lequel sera monté le partage réseau
declare -a RSYNC_OPTIONS="-acRz --delete-during --delete-excluded --ignore-errors --force --numeric-ids --partial --stats --timeout=900"
declare -a DIR2BCKP="()"        # ne pas modifier !

DIR2BCKP[0]="/etc/"
DIR2BCKP[1]="/home/"
DIR2BCKP[2]="/root/"

declare -i NB_ARCHIVES=7

# ------------- system commands used by this script --------------------

declare -i count=${#DIR2BCKP[@]}
declare -i i=0
declare -i x=$(expr $NB_ARCHIVES - 1)

if (( `id -u` != 0 )); then { $ECHO "Sorry, must be root.  Exiting..."; exit; } fi

mount "$DIR2CIFS/"

# step 1: delete the oldest snapshot, if it exists:
if [ -d "$DIR2CIFS/daily.$NB_ARCHIVES" ] ; then
        rm -rf "$DIR2CIFS/daily.$NB_ARCHIVES" ;
fi ;

# step 2: shift the middle snapshots(s) back by one, if they exist
while [ "$x" -gt 0 ]; do
        if [ -d "$DIR2CIFS/daily.$x" ]; then
                y=$(expr $x + 1)
                mv "$DIR2CIFS/daily.$x" "$DIR2CIFS/daily.$y"
        fi
        x=$(($x-1))
done

#step 3: daily.0 -> daily.1
if [ -d "$DIR2CIFS/daily.0" ]; then
        cp -al "$DIR2CIFS/daily.0" "$DIR2CIFS/daily.1"
fi

#step 4: if not exists daily.0
[ -d "$DIR2CIFS/daily.0" ] && mkdir "$DIR2CIFS/daily.0"

#step 5: rsync
cd $DIR2CIFS
while [ "$i" -lt "$count" ]; do
        rsync $RSYNC_OPTIONS "${DIR2BCKP[$i]}" "$DIR2CIFS/daily.0"
        i=$(($i+1))
done

#step 6: uptime mtime
touch "$DIR2CIFS/daily.0"

umount "$DIR2CIFS/"
 

 

Ce n'est pas LE script de rotation rsync ... il existe pour comprendre le principe de snapshot par rsync.
Les étapes importantes sont numérotées de 1 à 5.

 

Ce script nécessite que vous montiez un répertoire réseau avec le protocole SaMBa, avec l'option CIFS, si possible, et que vous ayez paramétré votre fichier de configuration /etc/fstab pour que votre utilisateur puisse monter celui-ci à la demande.

 

Vous pouvez obtenir cet exemple !
Adaptez-le, à vos besoins ; exécutez-le avec les droits administrateurs ... mettez-le dans votre table de cron, bref, utilisez-le !

 

 


<<| Page : Bash : script : rsync_snapshot : |>>


 

 

^ Haut de page ^