Il backup perfetto

Il backup perfetto

Penso che il backup perfetto (in qualsiasi sistema operativo) debba soddisfare i seguenti requisiti.

Completamente automatico

L'utente non deve fare nulla dopo aver configurato il suo sistema di backup la prima volta. Il tutto deve essere automatico da quel momento in poi. Altrimenti la "qualità" del backup dipenderebbe dall'attenzione dell'utente e dalla sua scrupolosità, il che non è accettabile.

Separazione fisica dei supporti

Il backup deve essere contenuto in un supporto fisico che sia completamente separato e distante dal supporto sul quale sono memorizzati i dati originali. Il significato di "separato e distante" dipende dal livello di affidabilità che si richiede:

  • vuoi essere al sicuro nel caso di cancellazioni accidentali di file? allora una cartella separata o meglio ancora una partizione dedicata sul tuo hard disk è sufficiente
  • vuoi essere al sicuro nel caso di malfunzionamenti dell'hardware? allora hai bisogno almeno di un disco fisso separato per il tuo backup
  • vuoi essere al sicuro nel caso di malfunzionamenti del sistema nel suo complesso (tipo scarica elettrica) o anche nel caso di furti? allora un hard disk esterno è la scelta migliore (soluzione consigliata)
  • tenete presente che avere un computer e il backup su un hard disk esterno non è abbastanza per essere sicuri nel caso in cui, ad esempio, dei ladri entrano in casa oppure nel caso di eventi quali alluvioni o incendi. Per questo potreste voler tenere il backup in un altro edificio, per esempio al lavoro e non a casa.
  • volete addirittura essere sicuri anche nel caso di eventi geograficamente localizzati (grandi alluvioni, terremoti, guerra)? Le banche ad esempio lo vogliono. In questo caso dovete fare il backup in qualche altra parte del mondo, ad esempio su un server remoto in un altro paese.

Potreste pensare che tutto ciò sia oltre le vostre necessità, ed effettivamente a voi basterà un hard disk esterno sulla vostra scrivania. In ogni caso dipende dall'importanza dei vostri dati: non vorreste mai perdere la tesi di dottorato che avevate praticamente finito solo perché dei ladri sono entrati in casa vostra e hanno portato via sia il notebook che l'hard disk esterno...

Recupero semplice dei file

Recuperare i file di cui avete fatto il backup deve essere facilissimo! In particolare dovete avere la possibilità di recuperare anche solo alcuni dei vostri file, oppure di recuperare tutto in un colpo solo.

Inoltre, non deve essere necessario alcun software per poter ripristinare i propri file! Non è accettabile che il proprio backup dipenda da una certa software house, o scoprire che il proprio backup vecchio di 5 anni non è più recuperabile perché il software che avete usato non esiste per la nuova versione del sistema operativo (chiedete agli utenti di Win98 se riescono ad accedere ai backup che hanno fatto in quegli anni con il tool di backup ufficiale della Microsoft, quello incluso tra gli Accessori del computer...).

Dropbox

Dropbox

Prima di proseguire con la procedura per il backup in Linux, un breve commento su un altra possibile soluzione ai vostri problemi. Qualcuno infatti mi ha chiesto se Dropbox può essere un valido metodo per ottenere automaticamente un backup dei propri documenti.

Dropbox è qualcosa di leggermente diverso, anche se estremamente interessante. Con Dropbox voi potete avere una cartella condivisa tra tanti PC (Windows, Mac, Linux) ed eventualmente anche con altre persone. Tutto quello che buttate nella cartella viene automaticamente replicato nella stessa cartella degli altri computer. Comodissimo, quindi, se avete un portatile e un fisso, o magari se avete dei documenti in ufficio che volete avere a disposizione anche a casa, o semplicemente se volete che alcuni dei vostri file (o tutti) siano disponibili dovunque andate. Infatti è anche possibile accedere ai propri file tramite un'interfaccia web, perché Dropbox tiene anche un backup online dei vostri documenti. Una sicurezza in più!


dropbox

Backup con rsync

Backup con rsync

Lo strumento principale con il quale si riesce a fare quello che secondo me è il backup perfetto è RSync, un programma open source che permette di fare trasferimento incrementale e rapido di files. La ragione per la quale questa utility è così importante è perché permette di copiare il contenuto di una serie di cartelle in un'altra posizione trasferendo in realtà solo i file che sono cambiati dall'ultima "sincronizzazione".

C'è un bell'articolo che spiega come utilizzare questo programma per eseguire il backup dei propri files. L'idea principale è quella di fare regolarmente delle copie di tutti i propri dati sul supporto di backup. Rsync rende questa cosa veloce proprio per le caratteristiche che ho appena esposto.

In realtà si può fare anche di meglio: si possono tenere delle "fotografie", degli "snapshots" dei propri dati, per esempio ogni settimana, così non solo si ha un backup dei propri files, ma si hanno a disposizioni le versioni precedenti.

Si potrebbe pensare che conservare una serie di backup settimanali sia molto oneroso in termini di spazio, ma non è vero! Sfruttando gli hard link del filesystem Ext3, ci sarà bisogno solo dello spazio necessario a memorizzare i file che sono cambiati da uno snapshot al successivo. E il backup che si ottiene è semplicemente una serie di cartelle, contenenti tutti i propri dati "fotografati" in momenti diversi del passato. Gli hard link sono completamente "trasparenti" all'utente, cioè non c'è modo per accorgersi che si tratta di hard links e non di copie aggiuntive degli stessi file.

Tutte queste cose sono fatte in automatico ed in modo efficiente da un bellissimo programmino opensource: rsnapshot.

Rsnapshot

Rsnapshot

Rnapshot è un programma opensource che implementa quello che secondo me è il "backup perfetto". Quello che fa è di fare degli "snapshot" dei propri file alla frequenza desiderata (ad esempio ogni settimana). Poi queste copie vengono immagazzinate da rsnapshot sul proprio supporto di backup in modo veloce ed efficiente grazie a rsync.

Tutti gli snapshot acquisiti nel passato sono quindi accessibili come normalissime cartelle, anche se in realtà non occupano lo spazio di una serie di copie quasi uguali - solo le differenze sono effettivamente memorizzate.

In più, si può risparmiare ancora più spazio diradando la frequenza dei backup nel passato. Per esempio si possono fare snapshot settimanali, salvare gli ultimi 4, e poi tenere uno snapshot per mese per i backup più vecchi di 4 settimane. La rotazione di queste immagini è fatta automaticamente.

Un'altra caratteristica importante è che si può fare il backup non solo delle proprie cartelle sul disco fisso, ma anche di cartelle condivise (anche su un PC windows), cartelle remote (SSH, FTP, ...), ecc.

Ultimo ma non meno importante, per accedere ai propri backup basta avere un computer che riesca a leggere il filesystem Ext3, cioè praticamente ogni computer Linux, ma anche ogni computer Windows se si installa un piccolo driver, completamente gratuito (vedi Come accedere alle partizioni EXT3 da Windows).

L'unica cosa che richiede un attimo di tempo è configurare rsnapshot la prima volta. C'è un sacco di documentazione online sul sito ufficiale, anche un HOW TO con istruzioni passo passo, insieme a un sacco di guide non ufficiali in giro per internet. Qui semplicemente vi descrivo la mia configurazione, così chi vuole può usarla e adattarla alle proprie necessità. Per informazione, io uso ubuntu, ma tutti i passaggi che spiego dovrebbero funzionare per praticamente ogni distribuzione Linux.

Il file di configurazione più importante per rsnapshot (l'unico) è /etc/rsnapshot.com. È pieno di commenti dettagliati, quindi non dovreste avere problemi a configurarlo semplicemente scorrendolo e leggendo i commenti delle varie sezioni (una volta che avete letto la brevissima guida sul sito ufficiale). Qui riporto solo le sezioni che ho modificato per le mie esigenze specifiche.

Per chi non mastica l'inglese ho tradotto velocemente i commenti.

Snapshot root directory

# Tutti gli snapshot vengono salvati in questa cartella.

snapshot_root /media/LACIE_ext3/

# Se no_create_root è settato a 1, rsnapshot non creerà
# automaticamente la cartella snapshot_root. Ciò è particolarmente
# utile per fare backup su supporti rimovibili, come hard disk USB o
# FireWire.

no_create_root 1

Il significato di queste opzioni è banale, e ben spiegato dai commenti. /media/LACIE_ext3 è la mia partizione Ext3 su un hard disk esterno LaCie.

External program dependencies

In questa sezione non ho modificato nulla.

Backup intervals

# I nomi degli intervalli (weekly = settimanale, monthly = mensile, ...)
# sono solo nomi e non hanno nessun effetto sulla reale lunghezza
# dell'intervallo. I numeri impostano il numero di snapshot da
# conservare per ogni intervallo (weekly.0, weekly.1, ...).
# La lunghezza dell'intervallo viene impostato dall'intervallo temporale
# tra due esecuzioni di rsnapshot <nome intervallo>, generalmente
# tramite cron. Sentitevi liberi di adattare i nomi degli intervalli, e di
# conseguenza il file /etc/cron.d/rsnapshot secondo le vostre
# esigenze. L'unica vincolo è che gli intervalli devono essere elencati
# in ordine ascendente.

interval weekly 4
interval monthly 36

Quest sezione configure la struttura dei backup nel tempo. Nel mio caso ho decido di conservare 4 backup nel passato, distanziati di una settimana (quindi che coprono l'ultimo mese). Quando i backup sono più vecchi di un mese, viene conservato solo un backup al mese. Per esempio se guardo i miei backup oggi che è il 10 Febbraio 2008, appaiono così:

drwxr-xr-x 3 root root 4096 2008-02-03 11:03 weekly.0
drwxr-xr-x 3 root root 4096 2008-02-03 10:05 weekly.1
drwxr-xr-x 3 root root 4096 2008-01-28 21:04 weekly.2
drwxr-xr-x 3 root root 4096 2008-01-27 00:04 weekly.3
drwxr-xr-x 3 root root 4096 2008-01-22 20:18 monthly.0
drwxr-xr-x 3 root root 4096 2008-01-06 13:04 monthly.1
drwxr-xr-x 3 root root 4096 2007-12-07 16:03 monthly.2
drwxr-xr-x 3 root root 4096 2007-11-05 15:04 monthly.3
drwxr-xr-x 3 root root 4096 2007-10-29 10:04 monthly.4
drwxr-xr-x 3 root root 4096 2007-10-08 20:04 monthly.5
drwxr-xr-x 3 root root 4096 2007-09-02 10:03 monthly.6
drwxr-xr-x 3 root root 4096 2007-08-05 17:34 monthly.7
...

Fate attenzione che i nomi che assegnate ad ogni backup non hanno nessuna conseguenza sulla frequenza del backup! Servono solo all'utente come etichette. La reale frequenza dei backup dipende da come viene chiamata l'utility rsnapshot (vedi sotto).

L'unico effetto di queste righe di setup è quindi fare in modo che quando l'utente esegue

rsnapshot weekly

allora rsnapshot fa ruotare tutti i backup settimanali (weekly), cancellando l'ultimo (weekly.3), e rinominando gli altri (weekly.1 diventa weekly.2 e così via) e ovviamente creando un nuovo weekly.0 con il backup di oggi. Quando invece viene eseguito

rsnapshot monthly

allora rsnapshot rinomina tutti i backup mensili (monthly) (monthly.1 diventa monthly.2 e così via) e rinomina l'ultimo backup settimanale (weekly.3) in monthly.0.

Global options

Anche qui non ho cambiato nulla.

Backup points / scripts

# LOCALHOST
backup /home/saverio/ localhost/
backup /etc/ localhost/

In questa sezione specificate di quali cartelle volete fare il backup (nel mio caso solo la home directory e /etc. Il secondo argomento di ogni riga specifica sotto quale cartella vanno salvate le copie sul supporto di backup. Attenzione alle barre (/) alla fine dei percorsi!

Pianificare i backup

Il passo successivo consiste nel pianificare l'esecuzione dell'utility di backup. In Linux i comandi pianificati vengono gestiti da alcuni demoni (daemons, cioè programmi che girano in background). Io ho utilizzato cron, disponibile in Ubuntu e in moltissime altre distribuzioni. Sotto la cartella /etc ci sono una serie di sottocartelle per configurare cron:

/etc/cron.d contiene una serie di file, uno per ogni comando pianificato

/etc/cron.daily contiene una serie di eseguibili che vanno lanciati ogni giorno

/etc/cron.weekly contiene una serie di eseguibili che vanno lanciati ogni settimana

e così via. La soluzione che ho scelto è quella di aggiungere un file nella cartella cron.d. Il file si chiama /etc/cron.d/rsnapshot e contiene solamente la riga:

3 * * * * root /usr/bin/nice /home/saverio/bin/rsnapshot_weekly

che, secondo lo standard crontab, significa che il comando rsnapshot_weekly deve essere eseguito ogni ora, quando i minuti valgono 03 (cioè alle 9.03, 10.03, 11.03, etc...). Il comando viene eseguito con privilegi di superutente (root) e in background (vedi "man nice").

Diamo quindi un'occhiata al comando rsnapshot_weekly nella mia cartella /home/saverio/bin. È un piccolo script che ho scritto:

#! /bin/bash

# Esegue lo script di backup ogni Domenica se una Domenica è
# passata senza che il backup sia stato eseguito.
# Ogni mese esegue anche il backup mensile.

a_week=7
a_month=31

timestamp_file_weekly=/home/saverio/.backup_timestamp_weekly
log_file=/home/saverio/.backup.log

date_now=`date "+%Y%m%d"`
day_of_week=`date "+%u"`
time_now=`date "+%s"`

date >> $log_file

if [ -e $timestamp_file_weekly ]; then
    date_of_backup=`stat --format=%y $timestamp_file_weekly |
    ... tr -d - | awk '{print $1}'`
    time_of_backup=`stat --format=%Y $timestamp_file_weekly`
    echo last weekly backup $date_of_backup >> $log_file
    if (( $day_of_week % 7 >= $time_now / 86400 - $time_of_backup /
    ... 86400 )); then
        echo "no Sunday is passed without doing a backup,
        ... doing nothing" >> $log_file
        exit 0;
    fi
    echo "a Sunday is passed without doing a backup!" >> $log_file
    if (( $date_now - $date_of_backup >= $a_month )); then
        echo "a new month started: time to do a monthly backup" >> $log_file
        /usr/bin/rsnapshot monthly && echo "monthly backup: DONE!" >>
        ...$log_file
    fi
fi

echo "let's do a weekly backup" >> $log_file
date > /home/saverio/.today

/usr/bin/rsnapshot weekly && touch $timestamp_file_weekly && echo
..."weekly backup: DONE!" >> $log_file

Ho aggiunto i puntini quando la riga viene spezzata, quindi non fate copia e incolla perché non funzionerebbe. Potete scaricare lo script rsnapshot_script cliccando qui.

Quello che fa lo script, per chi non ha voglia di guardarne i dettagli, è di eseguire il backup settimanale ogni Domenica. Gestisce correttamente tutti i casi in cui, per esempio, l'hard disk esterno non è collegato al portatile. Inoltre, prevede la possibilità che una Domenica l'utente non accenda il PC, oppure non colleghi l'hard disk esterno. In questo caso lo script farà il backup non appena trova l'hard disk collegato nei giorni immediatamente successivi.

Esegue anche il backup mensile (che non è un backup, è solo la rotazione dei vecchi backup) la prima Domenica del mese.

Non dovete leggervi tutto lo script, l'unica cosa che dovete sapere è che ci sono due opzioni: timestamp_file_weekly che è un file vuoto che serve solo per tener traccia dell'ultimo backup. Potete creare questo file vuoto semplicemente eseguendo

touch timestamp_filename

Il secondo parametro che va impostato è il percorso per il log_file, che è il file dove verrà mantenuto il log di tutto quello che viene fatto (vedi sotto).

Log

Lo script che ho scritto tiene automaticamente un log di tutto quello che fa, per controllarne l'operato e per eventuale debugging. Questo è un esempio del log file sul mio PC

Sat Feb 2 23:03:01 CET 2008
last weekly backup 20080128
no Sunday is passed without doing a backup, doing nothing
Sun Feb 3 10:03:01 CET 2008
last weekly backup 20080128
a Sunday is passed without doing a backup!
a new month started: time to do a monthly backup
monthly backup: DONE!
let's do a weekly backup
Sun Feb 3 11:03:01 CET 2008
last weekly backup 20080128
a Sunday is passed without doing a backup!
a new month started: time to do a monthly backup
monthly backup: DONE!
let's do a weekly backup
weekly backup: DONE!
Sun Feb 3 12:03:01 CET 2008
last weekly backup 20080203
no Sunday is passed without doing a backup, doing nothing

Ogni voce comincia con data e orario, e si può vedere come i backup vengono fatti correttamente. Poiché il file di log cresce continuamente (ma lentamente, visto che è solo testo), bisogna gestire la cosa. Il modo più facile è quello di usare logrotate, che è già disponibile su Ubuntu e su molte altre distribuzioni. In pratica è un programmino che viene eseguito periodicamente e comprime i file di log, mantenendoli piccoli in dimensione e cancellandoli quando sono vecchi. Tutto quello che dovete fare per dire a logrotate di occuparsi del vostro log è creare il file /etc/logrotate.d/backup con le seguenti righe

/home/saverio/.backup.log {
    rotate 6
    monthly
    compress
    missingok
}

che dice a logrotate di "ruotare" i log mensilmente, tenendone solo gli ultimi 6 e comprimendo con gzip. Non vengono dati errori se un file di log manca, ad esempio perché lo cancellate a mano.

Finito! Ora avete un sistema di backup periodico e completamente automatico!

Per poter accedere ai vostri backup da un computer Windows, vedi Come accedere alle partizioni EXT3 da Windows.

Sapete cos'è GROUPON?
Si tratta di un sito internet che raccoglie delle offerte promozionali specifiche per ogni città italiana: buoni sconto per ristoranti, terme, go-kart, impianti sportivi, bar, concerti, e molto altro...
Gli sconti sono spesso molto buoni, alcuni coupon vengono quasi regalati, percé sfruttano il meccanismo dell'acquisto di gruppo: tante persone aderiscono all'offerta e quindi possono permettersi di contrattare sconti migliori.

Provate a vedere se c'è qualcosa che fa per voi. In alto, nel sito, potete selezionare la vostra città!


groupon

Smart Grid Electronics
Cos'è un inverter?