Condividi su Facebook
rdiff-backup ~ Il backup incrementale
Scritto da: Monska il 20/03/2010 alle 14:40
Tag: Internet, Linux, Informatica, Sistemi Operativi, Reti.Visto 597 volte.


Backup

Il backup incrementale è un sistema di backup dei file che permette l'ottimizzazione delle risorse.
La tecnica consiste nel creare un full backup al primo lancio del backup, mentre a tutti i successivi generare solo dei file che descrivono i cambiamenti avvenuti.

Non è difficile intuire che attraverso questo sistema si ottiene una gestione dello spazio e della banda molto più efficiente.
Tale strategia, proprio per la sua ottimizzazione, viene utilizzata anche dai più famosi software per la gestione dello sviluppo collaborativo come Subversion.

In questo tutorial vedremo come implementare un servizio di backup incrementale automatizzato per cercare di preservare al meglio i nostri dati.

Il software che abbiamo scelto di presentare è un programma molto semplice, eseguibile da linea di comando, che integra però tutte le funzionalità necessarie.
Rdiff-backup ci permette sia di eseguire backup locali, utili per il ripristino immediato dei dati, sia backup geograficamente distribuiti offrendoci la possibilità di utilizzare svariati protocolli di trasferimento tra cui anche ssh.
Per chi fosse interessato a eseguire backup geograficamente distribuiti consigliamo di utilizzare su entrambi i nodi la stessa versione di rdiff-backup.

Vi proponiamo qui di seguito uno script tipo per lanciare rdiff:

Code:

#!/bin/bash

HOSTNAME=$(hostname)
DATA=$(date +%Y/%m/%d)
ORA=$(date +%H:%M:%S)
DESTINATARI="mail1@email.com, mail2@email.com"
LAST_CORRECT_BACKUP="last-correct-backup"
PATH_FILE_TO_EXCLUDE="list-exclude-files"
PATH_FILE_TO_INCLUDE="list-include-files"

USER="user_l"
HOST="example.com"
REMOTE_PATH="/home/$USER/backup"

rdiff-backup --terminal-verbosity 0 --exclude-filelist $PATH_FILE_TO_EXCLUDE --include-globbing-filelist $PATH_FILE_TO_INCLUDE --exclude / / $USER@$HOST::$REMOTE_PATH

RETVAL=$?

if [ $RETVAL -eq 0 ]
then
   touch $LAST_CORRECT_BACKUP
else
   echo -e "Backup terminato con errori!\nHostname: $HOSTNAME\nData: $DATA\nOra:$ORA" | mail -s "Errore Backup " $DESTINATARI -- -r "alert@$HOSTNAME"
fi

Quando viene eseguito lo script, rdiff-backup tenta di eseguire un backup - full la prima volta e solo incrementale le successive - sull'host settato nella variabile $HOST, con l'utente $USER nella path $REMOTE_PATH. Nel caso volessimo fare un backup locale basterà sostituire la stringa di path remota con una locale.
I file/dir che saranno backuppati sono quelli contenuti nel file

Code:

$ cat list-include-files
/home/user_l/documenti
/home/user_l/foto
/home/user_l/dati

mentre quelli esclusi sono quelli contenuti nel file

Code:
$ cat list-exclude-files
/home/user_l/.bash_history
/home/user_l/.Thunderbird

Per analizzare lo spazio occupato dal backup e le date/orari in cui è stato eseguito il backup possiamo utilizzare il seguente script:

Code:

#!/bin/bash

DIR=/home/user_l/backup

rdiff-backup --list-increments $DIR
rdiff-backup --list-increment-size $DIR


che restituirà una analisi dettagliata dello spazio disco con tutte le date in cui il backup è stato eseguito.

Abbiamo inoltre, se è stato utilizzato lo script sopra illustrato, un file la cui data di modifica viene aggiornata con la data/ora dell'ultimo backup avvenuto correttamente. Tale file è quello specificato nella variabile $LAST_CORRECT_BACKUP, settata a LAST_CORRECT_BACKUP="last-correct-backup".

Per ripristinare per esempio la cartella foto allo stato di 3 giorni prima possiamo usare il seguente comando:

Code:

rdiff-backup -r 3D /home/user_l/backup/foto /home/user_l/foto.3d-ago

Questo crea una nuova cartella /home/user_l/foto.3d-ago con il contenuto aggiornato a 3 giorni prima.

C'è un altra procedura che possiamo eseguire per ripristinare il backup, o anche ogni singolo file ad un determinato incremento.
Per ottenere questo risultato dobbiamo navigare all'interno dell'albero di backup. Per prima cosa ci posizioniamo nella cartella relativa agli incrementi, che per il nostro esempio sarà:

Code:

/home/user_l/backup/rdiff-backup-data/increments

in questa cartella, che è la root path del backup possiamo ripristinare l'intero tree di directory all'incremento voluto.
Se siamo invece interessati nei singoli file possiamo andare ancora più in profondità fino a giungere al file desiderato. Sia nel caso delle directory sia nel caso del file specifico ci troveremo ad operare con un file del tipo:

Code:
Nel caso di direcoty: <nome directory>.<data e ora>.dir
Nel caso dei file: <nome del file>.<data e ora>.diff.gz

e per ripristinare un file in questo modo possiamo dare il seguente comando:

Code:
rdiff-backup <path of increments>/<nome del file>.<data e ora>.diff.gz <path del restore>

Se volete fare il restore sovrascrivendo la cartella attualmente in uso ricordiamoci di passare a rdiff-backup il paramentro --force:

Code:
rdiff-backup --force <path of increments>/<nome directory>.<data e ora>.dir <path del restore>

Possiamo quindi costruire uno script che soddisfa le nostre esigenze e inserirlo nel servizio cron per rendere il nostro backup automatico e sistematico.
Vi consigliamo di eseguire il backup anche su un backup server remoto, possibilmente connesso con openvpn, in modo da rendere i vostri servizi dei servizi di alta affidabilità e backuppati in maniera sicura e sistematica.


Aggiungi un commento:
Nick:
captchaInserire il codice: