Hanno detto:

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una vera potenza.

— Albert Einstein

ArchLinux Small Business Server (30) - Backup (4)

http://www.stenoweb.it/files/blog/archlogo.png Abbiamo visto come funziona la tecnica dello snapshot backup, ora non ci resta che metterla in pratica.
Come abbiamo imparato nel post precedente bastano le utility standard presenti in ogni distro Linux più rsync anch'esso facilmente reperibile ed installabile. Potremmo, quindi, farlo da noi utilizzando degli script in bash, ma perchè non utilizzare l'ottimo lavoro già fatto da qualche anima pia :) ?
E' quello che faremo.

Anzichè reinventare la ruota utilizziamo, dunque, rsnapshot, una ottima utility scritta in perl che, utilizzando i principi che conosciamo, mette in pratica il backup snapshot in base alla configurazione impostata da noi in modo abbastanza semplice..

Installazione

Rsnapshot è nel repo community, quindi basta un canonico e sempreverde :

sudo pacman -S rsnapshot

Configurazione

La configurazione di rsnapshot è abbastanza semplice. Come già preannunciato basta modificare il file /etc/rsnapshot.conf ben commentato e di facile comprensione avendo, noi, già letto e capito i precedenti post della serie backup (o almeno me lo auguro).
Vediamone uno di esempio :

config_version  1.2
snapshot_root   /snapshots/
no_create_root  1

cmd_cp      /bin/cp
cmd_rm      /bin/rm
cmd_rsync   /usr/bin/rsync
cmd_logger  /usr/bin/logger

interval    daily   6
interval    weekly  4

verbose     3
loglevel    3
logfile     /var/log/rsnapshot.log

lockfile    /var/run/rsnapshot.pid

rsync_short_args  -Aarlv
rsync_long_args   --delete --numeric-ids --delete-excluded
link_dest         1

backup  /samba/apps/            archi/apps
backup  /home/                archi/home
backup  /samba/netlogon/        archi/netlogon
backup  /samba/public/          archi/public

Attenzione: nel file /etc/rsnapshot.conf i parametri vanno separati con il TAB, non con uno spazio ! Pena un messaggio di errore di rsnapshot.

Vediamo i parametri più significativi di questo esempio (date comuque un occhio al file originale, ce ne sono molti altri e ben commentati):

snapshot_root

Dove viene creato lo snapshot, che presumibilmente corrisponde alla directory dove viene montata la vostra unità removibile.

no_create_root

Importante impostare a "1" questa direttiva, in pratica evita di eseguire lo snapshot se non avete correttamente montato l'unità removibile. Vi lascio immaginare cosa succede se viene eseguita la copia dei dati in questo caso ...

interval

Definisce i tipi e la quantità di snapshot che vogliamo "ruotare". Sono possibili quattro livelli (es, hourly, daily, weekly e monthly). nel nostro esempio ci limitiamo a 6 giornalieri e 4 settimanali. Il nome assegnato definisce anche il nome della cartella che verrà creata. Ad esempio :

interval daily 6

crea daily.0, daily.1, daily.2, daily.3, daily.4 e daily.5.

rsync_short_args & rsync_long_args

Definiscono i parametri con cui viene eseguito rsync. Sono consultabili con:

rsync --help

oppure sulla sua guida in linea.

link_dest

Se utilizzate rsync 3.0 e successivi (cosa molto probabile) è consigliato attivare questa direttiva che velocizza l'operazione di backup e che permette, in pratica, di saltare il comando cp -al che crea gli hard link, in quanto lo fà direttamente rsync di suo.

backup

Come possiamo ben immaginare qui definiamo sorgente e destinazione del nostro backup. Ad esempio :

backup /samba/public/ archi/public

crea la snapshot di /samba/public in /snapshots/daily.0/archi/public

Gli altri parametri li lascio alla vostra libera interpretazione.

Avvio dell snapshot

Ora, dopo aver montato il nostro supporto removibile con ad esempio :

mount -t ext2 /dev/sdb1 /snapshots

possiamo eseguire il backup (o schedularlo con cron):
rsnapshot daily

per il backup giornaliero, oppure
rsnapshot weekly

per quello settimanale.

Facile o no ?

Notifica dei backup

Andiamo un po' oltre: non sarebbe meglio essere avvisati con una mail sull'esito del backup ? Certamente che sì ! Creiamo, allo scopo, uno script in bash chiamato snapback che lo faccia, dal momento che rsnapshot non prevede questa funzionalità.

Ecco lo script:

#!/bin/bash
# snapback - Backup con rsnapshot
# by steno 2008

# variabili
MAILTO="admin@mede.it"
MAIL="/usr/bin/mail"
logfile="/var/log/rsnapshot.log"
device="/dev/sdb1"
bckiniz=`date`
bckdel=`date +"%A - %d/%b/%Y"`

# tmp files
mailfile="/tmp/rsmailfile"
tmplog="/tmp/tmprslog"

# controlla i parametri
if [ $# = 0 ] || ([ $1 != 'daily' ] && [ $1 != 'weekly' ])
 then
  echo "uso: snapback {daily|weekly}"
  exit;
fi;

# memorizza data e ora di inizio backup
bckiniz=`date`;
bckdel=`date +"%A - %d/%b/%Y"`;

# crea il backup snapshot :)
/usr/bin/rsnapshot $1

# memorizza data e ora di fine backup
bckfine=`date`;

# estrai log giornaliero ( formato 30/MAR/2008 )
cat /var/log/rsnapshot.log | tr A-Z a-z | grep `date +"%d/%b/%Y"` > $tmplog

# crea la mail di report
{
 echo "Backup snapshot report - ($1) - "$bckdel;
 echo "";
 echo "Inzio backup : "$bckiniz;
 echo "Fine  Backup : "$bckfine;
 echo "";

 # stampa le linee del log con "completed" o "error".
 egrep "completed|ERROR" $tmplog;
 echo "----------------------------";
 echo " Uso del disco :";
 echo "----------------------------";

 # stampa uso del disco di backup
 /usr/bin/rsnapshot du
 echo "";
 /bin/df -h $device
 echo "";
 echo "----------------------------";
 echo "log genarato da snapback";
 echo
} > $mailfile   

# Invia la mail di report
$MAIL -s "Backup snapshot report - ($1)" $MAILTO < $mailfile

# Rimuovi i file tmp
rm -f $tmplog
rm -f $mailfile

Credo non ci sia bisogno di commenti, admin@mede.it riceverà una mail del tipo:
Backup snapshot report - (daily) - Thursday - 24/Apr/2008

Inzio backup : Thu Apr 24 00:15:01 CEST 2008
Fine  Backup : Thu Apr 24 01:41:59 CEST 2008

----------------------------
 Uso del disco :
----------------------------
du -csh /snapshots/daily.0/ /snapshots/daily.1/ /snapshots/daily.2/
    /snapshots/daily.3/ /snapshots/daily.4/ /snapshots/daily.5/
    /snapshots/weekly.0/

114G    /snapshots/daily.0/
3.9G    /snapshots/daily.1/
43G     /snapshots/daily.2/
4.7G    /snapshots/daily.3/
2.8G    /snapshots/daily.4/
2.1G    /snapshots/daily.5/
5.2G    /snapshots/weekly.0/
175G    total

Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1             232G  175G   46G  80% /snapshots

----------------------------
log genarato da snapback

Con eventuali errori, la durata del backup e con l'occupazione disco dei vari snapshots (generato dal comando rsnapshot du) e con lo spazio residuo/occupato sul supporto removibile (che si ottiene con dh -h /dev/sdb1) .

Schedulazione

Ora non ci resta che impostare crontab per l'esecuzione dei nostri backup. Nel caso presentato :

sudo crontab -e

e impostiamolo :
# backup con rsnapshot
01 00 * * 1 /usr/bin/snapback weekly
15 00 * * 1-6 /usr/bin/snapback daily

Possiamo vedere che il lunedì viene eseguito prima lo snapshot weekly (che "mette via" daily.5 prima che venga eliminato) e successivamente il giornaliero.

Have fun :)

Conclusioni

Esistono altro considerazioni da fare, lo snapshot backup non è la panacea di tutti i mali e
l'esempio qui descritto deve solo fare da "spunto", molto più saggio far qualcosa di meglio.

Ma magari lo vedremo un'altra volta.

Byez.

Ottima guida (e ottimo programma rsnapshot)!
Io avevo scritto una paginetta simile tempo fa, con un paio di script simili (però invece che mandare una mail salva un .log con le operazioni eseguite)

In più, se può interessare, ho fatto uno scheduling più avanzato dei backup. In pratica faccio il backup settimanale ogni domenica, e mensile la prima domenica del mese. Però ho gestito anche il caso in cui una domenica il pc non sia acceso, quindi il lunedi seguente (o appena viene acceso) rsnapshot deve fare il backup che gli manca. A me è molto comodo, soprattutto perché preferisco che faccia il backup la domenica (visto che è il momento in cui sono a casa, con l'hard disk esterno collegato) ma che se per caso una domenica sono in giro recuperi appena possibile.

Spero di essere stato un po' d'aiuto! :-)
I miei script li potete trovare su
http://saverio.bolognani.googlepages.com/backupinlinux

Ciao!

Ne ho fatta una versione in italiano, se interessa:
http://saverio.bolognani.googlepages.com/backupinlinux3

Ciao,
Saverio

Grazie Saverio, ottima guida.