#!/bin/sh ######################### # SCRIPT BACKUP CON DAR # ######################### # Questo script vi permette di creare dei backup # personalizzati utilizzando il comando dar, più # versatile rispetto a tar per quanto riguarda il # backup su disco invece che su nastro. # Lo script è creato in maniera non-interattiva, per # permetterne l'integrazione con cron. # # Lo script crea, nella cartella in cui si effettua il # backup, varie sottocartelle, ognuna contenente un backup, # sia esso differenziale o completo. Questo perchè ogni backup # può essere formato da diversi files, e questo ne aumenta # l'organizzazione, anche se ci fermiano ad un livello per non # complicare troppo le cose. ### CONFIGURAZIONE ### # Cartella di cui effettuare il backup HOME_DIR=/home/daniele/daBackuppare # Percorso in cui andremo ad effettuare il backup BACKUP_DIR=/media/disco_backup/cartella_backup # Nome base del file di backup BACKUP_NAME=dar_backup # Dimensione massima di uno slice BACKUP_SLICE_SIZE=600M # Suffisso per il backup completo BACKUP_COMPLETE_SUF="_comp" # Suffisso per il backup differenziale BACKUP_DIFFERENTIAL_SUF="_diff" # Numero di backup (totale+differenziali), prima della # creazione del successivo backup completo BACKUP_INTERVAL=3 # Testare il backup BACKUP_TEST="yes" # Lista di path da escludere dal backup EXCLUDED_PATH[0]=Temp EXCLUDED_PATH[1]=Compilare EXCLUDED_PATH[2]=Download # Conservare i percorsi delle directory escluse dal backup # L'array precedente specifica che non deve essere effettuato # il backup dei file contenuti in queste directory, ma a volte # è utile conservare la gerarchia, per evitare di doverle rifare # a mano INCLUDE_EXCLUDED_PATH="no" # Lista dei pattern di file da escludere EXCLUDED_FILE_PATTERN[0]="*.tmp" EXCLUDED_FILE_PATTERN[1]="~*" # Utilizzare la compressione durante il backup USE_COMPRESSION="yes" # Tipo di compressione: scegliere fra gzip oppure bzip2 COMPRESSION_TYPE="bzip2" # Livello di compressione: 0-9 COMPRESSION_LEVEL=6 # Dimensione minima di un file per dover essere compresso COMPRESSION_MINIMUM_FILE_SIZE=512 # Modalità verbose VERBOSE="yes" # Pattern dei files da non comprimere NOT_COMPRESSED_FILES[0]="*.mp3" NOT_COMPRESSED_FILES[1]="*.jpg" NOT_COMPRESSED_FILES[2]="*.zip" NOT_COMPRESSED_FILES[3]="*.rar" NOT_COMPRESSED_FILES[4]="*.png" NOT_COMPRESSED_FILES[5]="*.gz" NOT_COMPRESSED_FILES[6]="*.gzip" ### ESECUZIONE DELLO SCRIPT ### # Analizziamo il contenuto della cartella di backup, per # contare il numero di backup differenziali, se ce ne sono, # e decidere se creare un backup completo o differenziale. # Contiamo il numero di directory di backup NUM_DIR=`ls -F ${BACKUP_DIR} | grep -c ${BACKUP_NAME}.*./` # Calcoliamo il modulo fra il numero di directory di backup # e quelle necessarie al prossimo backup completo let "MOD=$NUM_DIR % BACKUP_INTERVAL" # Se questo valore è pari a 0, o non esiste il backup # oppure abbiamo raggiunto il limite dei backup differenziali # per cui dobbiamo creare un backup completo # altrimenti creiamo il suffisso del backup differenziale # con il numero associato if [[ $MOD = "0" ]] then SUF=${BACKUP_COMPLETE_SUF} else SUF=${BACKUP_DIFFERENTIAL_SUF}_${MOD} DIFF_OPTION=`ls ${BACKUP_DIR} | grep ${BACKUP_NAME}.*.${BACKUP_COMPLETE_SUF} | tail --lines=1` fi # Path completo della directory di backup BACKUP_COMPLETE_PATH=$BACKUP_DIR/${BACKUP_NAME}_`date -I`${SUF} # creazione della directory di backup mkdir $BACKUP_COMPLETE_PATH # Esecuzione del backup con tutte le opzioni del caso dar \ -R ${HOME_DIR} \ -c ${BACKUP_COMPLETE_PATH}/${BACKUP_NAME}_`date -I`${SUF} \ -s ${BACKUP_SLICE_SIZE} \ `if [[ ${USE_COMPRESSION} = "yes" ]] then if [[ ${COMPRESSION_TYPE} = "bzip2" ]] then echo -y${COMPRESSION_LEVEL} else echo -z${COMPRESSION_LEVEL} fi for i in "${NOT_COMPRESSED_FILES[@]}" do echo -Z $i done fi` \ `if [[ ${VERBOSE} = "yes" ]] then echo -v fi` \ `if [[ ${INCLUDE_EXCLUDED_PATH} = "yes" ]] then echo -D fi` \ `for i in "${EXCLUDED_PATH[@]}" do echo -P $i done` \ `for i in "${EXCLUDED_FILE_PATTERN[@]}" do echo -X $i done` \ `if [[ ${MOD} -ne "0" ]] then echo -A ${BACKUP_DIR}/${DIFF_OPTION}/${DIFF_OPTION} fi` # Test del backup if [[ $BACKUP_TEST="yes" ]] then dar -t ${BACKUP_COMPLETE_PATH}/${BACKUP_NAME}_`date -I`${SUF} fi