Script di Backup

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Litie
Linux 2.x
Linux 2.x
Messaggi: 291
Iscritto il: sab nov 26, 2005 11:30
Località: Pavia
Contatta:

Script di Backup

Messaggioda Litie » dom mag 20, 2007 12:15

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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6526
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggioda targzeta » dom mag 20, 2007 13:00

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

Avatar utente
Litie
Linux 2.x
Linux 2.x
Messaggi: 291
Iscritto il: sab nov 26, 2005 11:30
Località: Pavia
Contatta:

Messaggioda Litie » dom mag 20, 2007 13:40

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.