Repository 32bit  Forum
Repository 64bit  Wiki

Backup by Tongiu

Da Slacky.eu.

Indice

Descrizione

Lo script proposto da Tongiu esegue il backup dei file contenuti in delle directory specificate nel file di configurazione

Readme

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.

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.

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[..]

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.

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


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

Da fare

Lo script usa tar e zip per fare la compressione. Il prossimo passo è usare DAR

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
}

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
Strumenti personali
Namespace

Varianti