Pagina 1 di 1

Script di Backup

Inviato: dom 20 mag 2007, 12:15
da Litie
Opinioni? Critiche? Suggerimenti?

Il giorno 1 del mese effettuo un Backup Full, nei restanti giorni backupm incrementali.

che ne pensate?
MNT=0
if mount | grep backup > /dev/null; then MNT=1
# altrimenti prova a montarla
elif mount -t ext3 -o rw /dev/hdd1 /media/backup;
then
MNT=1
else
MNT=0
fi

if [ "$MNT" -eq 1 ]; then

echo Inizio Backup
NUM=$(date +%d)
DIR=("/home" "/etc" "/usr/local" "/var/www")

FBK=(home etc usr_local www)

DATE=`date +%m%d%y`

if [ "$NUM" -eq 1 ]; then
cd /media/backup/full && mkdir "$DATE"
DBK="/media/backup/full"/"$DATE"
NUM="full"
for i in 0 1 2 3 ; do
FILE="${FBK[$i]}"_"$NUM".tar.gz
tar --listed-incremental /media/backup/full/tmp/stato_full_"${FBK[$i]}" -czvf $DBK/$FILE ${DIR[$i]}
done

else
cd /media/backup/incremental && mkdir "$DATE"
DEF_DBK="/media/backup/incremental"/"$DATE"
for i in 0 1 2 3 ; do
cp /media/backup/full/tmp/stato_full_"${FBK[$i]}" /media/backup/incremental/tmp/stato_incr_"${FBK[$i]}"
FILE="${FBK[$i]}"_"$NUM".tar.gz
tar --listed-incremental /media/backup/incremental/tmp/stato_incr_"${FBK[$i]}" -czvf $DEF_DBK/$FILE ${DIR[$i]}
done
fi

cd /media
umount /media/backup

else
echo "Directory non montata - Backup Fallito";
fi

exit 0

Inviato: dom 20 mag 2007, 13:00
da targzeta
Nella parte iniziale io farei una cosa simile:

Codice: Seleziona tutto

if ! grep backup /proc/mounts ; then
    if ! mount -t ext3 -o rw /dev/hdd1 /media/backup; then
        echo "Directory non montata - Backup Fallito";
        exit 1
    fi
fi
...
# Qui tutto quello che devi fare (se era montato o è stato montato)
....
risparmiando la variabile MNT.

Mi sembra brutto il ciclo for in 0 1 2 3. Se aumenti il contenuto dell'array devi aumentare anche il numero, questo può portare a dei problemi.
Sarebbe meglio:

Codice: Seleziona tutto

i=${#FBK[*]} #Quanti elementi contiene FBK
e poi fare:

Codice: Seleziona tutto

k=0;
while (( $k < $i )); do
....
let ++k; #Come ultima operazione
done
oppure, se l'ordine non è importante.

Codice: Seleziona tutto

while (( $i != 0 )); do
let --i; #come prima operazione, altrimenti errore.
....
done
Per il resto, non conosco l'opzione "--listed-incremental" di tar, quindi assumo che funzioni bene.

Quando viene eseguito lo script?

Spina

Inviato: dom 20 mag 2007, 13:40
da Litie
Utilissimi sugerimenti, grazie mille.

Il job è schedulato in crontab...in pratica lo eseguo ogni giorno alle due di notte.

Adesso lo voglio ottimizzare in modo da mantenere 4 o 5 backup completi (con le relative parti incrementali ) in rotazione, ad esempio:

* Backup completo di Gennaio - Febbraio - Marzo - Aprile - Maggio

con Giugno cancello Gennaio mantenendo sempre un set di 5 backup completi


NB: ho provato una versione col comando DUMP ma è davvero troppo lenta, tar backuppa in maniera davvero veloce.