Backup by Tongiu: differenze tra le versioni
| Riga 1: | Riga 1: | ||
| + | [[Category:Script]] |
||
= Descrizione = |
= Descrizione = |
||
Lo script proposto da Tongiu esegue il backup dei file contenuti in delle directory specificate nel file di configurazione |
Lo script proposto da Tongiu esegue il backup dei file contenuti in delle directory specificate nel file di configurazione |
||
Versione attuale delle 12:09, 12 set 2006
Indice |
[modifica] Descrizione
Lo script proposto da Tongiu esegue il backup dei file contenuti in delle directory specificate nel file di configurazione
[modifica] Readme
[modifica] Cosa fa
Lo script backup esegue il backup dei file contenuti in delle directory specificate nel file di configurazione /usr/local/etc/backup.conf dalle variabili SOURCE[1] SOURCE[2] etc. Per aggiungere una directory di cui fare il backup basta aggiungere le corrispondenti variabili nel file di configurazione.
[modifica] Backup Totale/Incrementale
Il backup sarà un backup totale, nel giorno della settimana specificato nella parte generale del file di
configurazione dalla variabile GIORNO_BACK_TOTALE. Il giorno della settimana deve essere specificato in
inglese secondo le
convenzioni del comando "date" (Sun = Sunday Mon = Monday etc).
Tutti gli altri giorni della settimana verrà fatto un backup incrementale, salvando solamente i file
modificati durante il giorno in corso. Affinchè tutto funzioni a dovere occorre lanciare lo script prima di mezzanotte.
Io eseguo lo script con cron tutte le sere alle 22.30 mediante l'aggiunta della riga : 22 30 * * * /usr/local/bin/backup 1> /root/log_backup in /var/spool/cron/crontabs/root. Ho scelto di reindirizzare l'output in /root/log_backup ma per chi non lo ritenesse necessario si può
reindirizare tutto a /dev/null.
[modifica] Dove mettere il Backup
I file di backup saranno messi sul disco specificato nel file di configurazione con la variabile DISCO_DI_BACKUP.
Ovviamente è il caso che sia un disco diverso da quello in cui ci sono i dati di cui fare i backup. Nel mio caso uso il disco di un altro PC.
E' necesario che ci sia una riga in fstab con i parametri per fare il mount di /mnt/backup. Viene generato un file di backup per ciascuna directory indicata nel file di configurazione. I file di backup
generati hanno i nomi indicati nelle variabili FILE_BACKUP[ .. ]. Mediante la variabile "date" i nomi generati comprenderanno anche l'indicazione del giorno in cui il backup è stato eseguito. I nomi saranno del tipo :
report_Mon_21Jun04.tgz Per ciascuna directory sorgente (in cui ci sono i file di cui fare il backup) viene generata una corrispondente
directory in /mnt/backup il cui nome deve essere specificato nelle variabili DIR_BACKUP[..]
[modifica] Log
Lo script genera un file di log per ciascuna directory di cui si è fatto il backup. Il file di log viene inserito
nella stessa directory in cui viene salvato il file di backup.
[modifica] Come aggiungere una directory di cui si vuol fare backup
Le righe da aggiungere al file /usr/loca/etc/backup.conf per aggiungere la n-esima directory sono le seguenti:
####### N-ESIMA DIRECTORY ########### SOURCE[n]="/home/directory_n" DIR_BACKUP[n]=$DISCO_DI_BACKUP"/directory_n" FILE_BACKUP[n]="directori_n_`date +"%a_%d%b%y"`.tgz"
con n= 1, 2, 3, etc
[modifica] Esempio di backup di due directory
Il file di configurazione è fatto per fare il backup delle directory
/home/report /home/directory2
nel disco /mnt/backup. I file di backup saranno:
/mnt/backup/report/report_Mon_21Jun04.tgz (oggi è il 21 giugno)
e
/mnt/backup/directory2/directory2_Mon_21Jun04.tgz
[modifica] Da fare
Lo script usa tar e zip per fare la compressione. Il prossimo passo è usare DAR
[modifica] Configurazione
# /usr/local/etc/backup.conf
# file di configurazione di /usr/local/bin/backup
# by Tongiu GIUGNO 2004
###### PARTE GENERALE ##############
# disco su cui mettere i file di backup
DISCO_DI_BACKUP="/mnt/backup"
# giorno della settimana in cui fare il backup totale
# in tutti gli altri giorni si fa il backup incrementale
GIORNO_BACK_TOT="Sun"
###### PRIMA DIRECTORY ###########
# directory dove ci sono i file di cui si vuole fare il backup
SOURCE[1]="/home/report"
# directory in cui ci saranno i file risultato del backup
DIR_BACKUP[1]=$DISCO_DI_BACKUP"/report"
# file risultato del backup
FILE_BACKUP[1]="report_`date +"%a_%d%b%y"`.tgz"
####### SECONDA DIRECTORY ###########
SOURCE[2]="/home/directory_2"
DIR_BACKUP[2]=$DISCO_DI_BACKUP"/directory_2"
FILE_BACKUP[2]="directory_2_`date +"%a_%d%b%y"`.tgz"#!/bin/sh
# esegure questo script con cron aggiungendo
# 22 30 * * * /usr/local/bin/backup 1> /root/log_backup
# in /var/spool/cron/crontabs
# così esegue il backup ogni sera alle 22.30
# e killare e riavviare cron
# by Tongiu GIUGNO 2004
esegui ()
{
SOURCE=$1
DIR_BACKUP=$2
FILE_BACKUP=$3
GIORNO_BACK_TOT=$4
LOG=$DIR_BACKUP"/log"
GIORNO=$(date '+%a')
if [ $GIORNO = $GIORNO_BACK_TOT ]; then
# se fa il backup totale cancella il log
rm -f $LOG
touch $LOG
fi
DATA=$(date '+%Y%m%d' )
# se non esiste la directory dove mettere il file di backup la crea
if [ ! -d $DIR_BACKUP ]; then
mkdir $DIR_BACKUP
echo Directory di backup $DIR_BACKUP non esisteva - directory creata >> $LOG
fi
echo >> $LOG
echo ++++++++++++++++++ BACKUP di $(date '+%c' ) +++++++++++++++++++++ >> $LOG
echo >> $LOG
DESTIN=$DIR_BACKUP"/"$FILE_BACKUP
#rimuove il backup della settimana scorsa se esiste
if [ -e $DIR_BACKUP"/"*$GIORNO* ]; then
echo esisteva backup $DIR_BACKUP"/"*$GIORNO* - rimuovo >> $LOG
rm $DIR_BACKUP"/"*$GIORNO*
fi
if [ $GIORNO != $GIORNO_BACK_TOT ]
then
# il backup incrementale
echo "backup incrementale" tar czvNf $DATA $DESTIN $SOURCE >> $LOG
tar czvNf $DATA $DESTIN $SOURCE 2>> $LOG
else
# fai il backup totale
echo "backup totale" tar czvf $DESTIN $SOURCE >> $LOG
tar czvf $DESTIN $SOURCE 2>> $LOG
fi
echo >> $LOG
echo ++++++++++++++++ FINE BACKUP +++++++++++++++++++++ >> $LOG
echo >> $LOG
}
[modifica] Script
######################
####### MAIN #########
######################
# prende le variabili dal file di configurazione in /usr/local/etc
source /usr/local/etc/backup.conf
# se il disco non è montato fa il mount
# opzione -q di grep elimina l output ma mantiene le condizioni vero e falso
if !(grep -q $DISCO_DI_BACKUP /proc/mounts) ; then
mount $DISCO_DI_BACKUP
fi
# conta quante volte è presente la variabile FILE_BACKUP per sapere
# quante sono le directory di cui deve fare il backup
NUM=$(grep -c FILE_BACKUP /usr/local/etc/backup.conf)
for i in `seq 1 $NUM`;
do
esegui "${SOURCE[$i]}" "${DIR_BACKUP[$i]}" "${FILE_BACKUP[$i]}" "$GIORNO_BACK_TOT"
done
umount $DISCO_DI_BACKUP
- Data: 03 Jun 2006
- Autore: Tongiu