Backup incrementale con rsync
Nell’epoca dell’informatica i dati hanno sempre rappresentato una questione fondamentale e da diversi anni ormai si investono fonti in sistemi di back-up dei dati
Questo script vuole essere un punto di partenza per creare un sistema di back-up veloce e facile da mantenere sfruttando la potenza di rsync. Lo script in uscita invia una mail con il log dell’oprerazione di salvataggio.
L’uso dello script è molto semplice, basta salvare il code sottostante in un file di testo e dargli i pernessi di esecuzione.
#!/bin/sh
#Piccolo sistema di backup
#Richiede rsync e un server mail tipo sendmail
#usa mail per inviare l email di notifica
#Ver 0.1
######## SETTINGS ########
MAKER=`whoami`
# Destinatario mail di backup, i destinatari vanno separati da virgola (,)
DEST="user1@dominio1,user2@dominio1"
# FORMATO DATA
DATE=`date +"%d-%m-%y"`
#Device e dir dove salvare il back_up
DEV="/mnt/dati"
DIR_BACKUP="backup"
BIN_NAME="rsync"
BIN=`which $BIN_NAME`
#elenco directory del quale si vuole fare il basckup, + directory vanno separate a spazio
#NB và inserito il path completo
BKPATH="/boot /root /home/user"
#File di log
LOG="$DEV/$DIR_BACKUP/backup-$DATE.txt"
#File che contiene il corpo della mail
MLF="/tmp/mlbackup"
#monta, nel caso sia necessario il device dove eseguire il device
#la regola di montaggio deve essere contenuta in /etc/fstab
#esegue controlli su montaggio corretto ed esistenza dir di backup
MNT(){
TEST=`mount | grep $DEV 2>/dev/null`
echo -e "nVerifico se il device ($DEV) è già montato! \n" >>$MLF
if [ -z "$TEST" ];then #restituisce vero se $TEST è vuoto
mount $DEV 2>/dev/null
RMT=`echo $?` #se il mount và a buon fine restituisce 0
if [ "$RMT"=="0" ];then
echo -e "Device montato, proseguo! \n" >>$MLF
MNTR=0
else
echo -e "Non sono riuscito a montare $DEV \n" >>$MLF
MNTR=1
fi
else
echo -e "Il device $DEV risulta già montato, proseguo \n" >>$MLF
MNTR=0
fi
if [ "$MNTR"=="0" ];then
if [ ! -d $DEV/$DIR_BACKUP ]; then
mkdir -p $DEV/$DIR_BACKUP 2>/dev/null
RMD=`echo $?` #se il mkdir và a buon fine restituisce 0
if [ "$RMD"=="0" ];then
echo -e "Dir $DEV/$DIR_BACKUP creta. \n" >>$MLF
MNTR=0
else
echo -e "No sono riuscito a creare $DEV/$DIR_BACKUP. \n" >>$MLF
MNTR=1
fi
else
echo -e "$DEV/$DIR_BACKUP esiste già.\n" >>$MLF
MNTR=0
fi
else
echo -e "Non posso creare $DEV/$DIR_BACKUP:\n\t - $DEV non montato" >>$MLF
MNTR=1
fi
}
#Funzione nel caso non serva montare il device
NOMNT(){
if [ ! -d $DEV/$DIR_BACKUP ]; then
mkdir -p $DEV/$DIR_BACKUP 2>/dev/null
RMD=`echo $?` #se il mkdir và a buon fine restituisce 0
if [ "$RMD"=="0" ];then
echo -e "Dir $DEV/$DIR_BACKUP creta. \n" >>$MLF
NMNTR=0
else
echo -e "No sono riuscito a creare $DEV/$DIR_BACKUP.\n" >>$MLF
NMNTR=1
fi
fi
}
#Funzione che esegue il backup
RSYNC(){
DIR="`echo $DEV | sed -e 's/\/$//'`"
echo -e "\t Attendi....backup in corso";
$BIN -av $BKPATH \
$DIR/$DIR_BACKUP/ \
--progress --delete --links &> $LOG
RSR=`echo $?`
if [ "$RSR"=="0" ];then
echo -e "nBackup eseguito con sucesso \n">>$MLF
else
echo -e "\n Backup non riuscito \n">>$MLF
fi
}
#Funzion che controlla l'esistenza del file $LOG
RSLOG(){
if [ -f $LOG ];then
RSLR=0
else
echo -e "Il file $LOG non è stato trovato in $LOG \n" >>$MLF
RSLR=1
fi
}
#Funzione per l'invio della mail
MAIL(){
case $RSLR in
0)
less $MLF | mail -s "Back-up server del $DATE" -a $LOG $DEST
;;
*)
less $MLF | mail -s "Back-up server del $DATE" $DEST
;;
esac
#rimuove il file $MLF
rm $MLF
}
#MAIN
if [ "$MAKER" == "root" ]; then
echo -e "Ecco i log del backup del $DATE \n" >>$MLF
case $1 in
mount)
echo -e "$0 utilizzato con il parametro mount \n" >>$MLF
MNT
if [ "$MNTR"=="0" ];then
RSYNC
if [ "$RSR"=="0" ];then
RSLOG
MAIL
exit 0
else
RSLOG
MAIL
exit 1
fi
else
RSLOG
MAIL
exit 1
fi
;;
nomount)
echo -e "$0 utilizzato con il parametro nomount \n" >>$MLF
NOMNT
if [ "$NMNTR"=="0" ];then
RSYNC
if [ "$RSR"=="0" ];then
RSLOG
MAIL
exit 0
else
RSLOG
MAIL
exit 1
fi
else
RSLOG
MAIL
exit 1
fi
;;
*)
echo "Devi usare $0 {mount|nomount} "
exit 1
;;
esac
else
echo "tDevi essere root per eseguire $0 "
exit 1
fi
Lo script deve essere eseguito con il paramentro mount o nomount che servono a montare o non montare il device dove deve essere salvato il back-up ($DEV). NB: affinchè l’opzione di mantaggio vada a buon fine è necesario che il file /etc/fstab sia ben configurato.
Prima di essere lanciato è necessario personalizzare alcune variabili: $DEST, $DEV, $DIR, $BKPATH. Queste contengono rispettivamente i destinatari della mail, il device e la directory dove verranno salvati i file e le directory delle quli eseguire il back-up.
Segnalate pure eventuali consigli e migliorie.
Lo script è disponibile per il download sul server FTP.
Lascia un commento