Backup del Sistema con rdiff-backup

rdiff-backup è uno strumento per eseguire il backup dei tuoi file. (Può essere utilizzato su molti sistemi *nix).

Eseguite i comandi come root in konsole, a meno di altre istruzioni

*utile per ripristinare il sistema in seguito a problemi con dist-upgrade, kernel upgrade, etc. (ma anche solo per recuperare singoli file).
*esegue il backup soltanto dei file modificati come rsync (ogni backup quindi non impiega molto tempo).
*tiene traccia dei cambiamenti (significa che puoi recuperare un file cancellato da tre settimane!)
*esegue backup sicuri attraverso una rete (usando ssh).
*esegue il backup delle partizioni mentre sono montate (è facile quindi automatizzare un backup giornaliero ... non è necessario alcun unmount).
*può ripristinare tutto qualora il tuo hard disk si rompa e tu debba comprarne uno nuovo.
*si adatta (bene con linux, con qualche difficoltà con windows) al backup di grandi reti ed è utilizzato a livello professionale e commerciale.
*è un'applicazione controllabile da command-line, è fantastica quindi per coloro che amano eseguire in modo potente operazioni come backup automatici (per esempio con uno script bash e cron).
*ricorda e gestisce proprietà e permessi dei file, ma anche link simbolici (e ogni cosa di questo genere), così quando esegui un ripristino ottieni tutto esattamente come era.

Di cosa avrete bisogno

rdiff-backup mantiene un'intera copia (non compressa) dei file di cui stai facendo il backup, e anche una cronologia (backup incrementali), il che significa che lo spazio necessario per il backup deve essere maggiore delle dimensioni dei file di cui stai facendo il backup. Se state eseguendo il backup di 100 GB di dati, potreste avere bisogno di 120 GB di spazio (su un altro hard drive preferibilmente!).

Come configurarlo

Mettiamo che il vostro pc abbia a disposizione:
* un hard drive da 100 GB (sda), che è in uso insieme a sda1 (partizione root), sda5 (usata per storage di musica o altri file) e sda6 (swap).
* un hard drive da 200 GB (sdb) non in uso, con sdb1 montato ... useremo questo per i nostri backup.
* Indirizzo IP 192.168.0.1

La prima cosa da fare è installare rdiff-backup:

# apt-get install rdiff-backup

Ora, sebbene possiate fare il backup di qualsiasi directory, presumiamo di volere il backup di intere partizioni ... vogliamo eseguire il backup di sda1 e sda5 (non di sda6), e allora creiamo alcune directory per immagazzinare i dati:

# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/root
# mkdir -p /media/sdb1/rdiff-backups/192.168.0.1/sda5

Avete bisogno di indirizzi IP distinti se volete usare questo stesso computer anche per il backup di un altro (questione affrontata più avanti).

Backup

rdiff-backup utilizza la sintassi rdiff-backup source-dir dest-dir. Nota: specificate sempre nomi di directory, non di file.

Per il backup di sda5, esegui:

# rdiff-backup /media/sda5 /media/sdb1/rdiff-backups/192.168.0.1/sda5

E per il backup della partizione root, esegui:

# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' / /media/sdb1/rdiff-backups/192.168.0.1/root

Ogni errore "AF_UNIX path too long" può essere ignorato. L'operazione potrebbe richiedere un po' di tempo, dato che rdiff-backup dovrà fare il backup dell'intera partizione (non solo le differenze), trattandosi della prima volta che si esegue il backup. Nota che non ci interessa il backup di /tmp perché il suo contenuto cambia sempre, nemmeno /proc o /sys dato che non contengono veri e propri file, e non vogliamo nemmeno il backup dei punti di mount. Avviando il backup dei punti di mount, stareste facendo il backup di sdb1, e potreste incappare in un loop infinito! Una soluzione a questo problema è fare il backup dei punti di mount separatamente.

La ragione per cui inserire '/proc/*' invece di '/proc' è che in questo modo verrà certamente eseguito il backup della directory di nome /proc, ma ignorando ogni suo contenuto. La stessa cosa vale per /tmp, /sys, e a maggior ragione per tutti i nomi dei punti di mount.

In questo modo, se distruggete la vostra partizione root ed effettuate un ripristino completo, /tmp, /proc, /sys e i nomi dei punti di mount verranno creati (proprio come dovrebbe essere). Ci potrebbero essere dei problemi se /tmp non è presente durante l'avvio di X (Fate riferimento alla pagina man per maggiori informazioni su --exclude e --include).

Ripristinare directory dai backup

rdiff-backup utilizza la sintassi:

rdiff-backup -r <from-when> <source-dir> <dest-dir>

Se per esempio avete cancellato la directory /media/sda7/photos, potreste ripristinarla con:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5/photos /media/sda5/photos

L'opzione "-r now" indica di ripristinare dal backup più recente. Se hai effettuato backup completi periodicamente (con crontab, ad esempio), e non ti sei accorto che la directory photos mancava da un po' di tempo, avresti bisogno di effettuare il ripristino da un backup di qualche giorno prima (e non "now", perché nel backup più recente la directory photos non esiste). Oppure magari vuoi soltanto ritornare alla versione precedente di qualcosa.

Se volete recuperare qualcosa risalente a tre giorni prima, allora usate "-r 3D" ... ma, come dice la pagina man, notate:

"3D" si riferisce a 72 ore prima dal momento dell'esecuzione, e se non è presente alcun backup risalente a quel momento, rdiff-backup ripristina il backup precedente. Per esempio, nel caso precedente, se viene usato "3D", e ci sono solamente backup di 2 o 4 giorni prima, la directory verrà ripristinata così com'era 4 giorni prima (bisogna tenerlo presente questo prima di effettuare un ripristino).

Il seguente comando mostrerà le date e gli orari in cui sono stati effettuati backup di sda5:

# rdiff-backup -l /media/sdb1/rdiff-backups/192.168.0.1/sda5
Recuperare partizioni

Potete recuperare anche intere partizioni, d'altra parte un punto di mount è semplicemente una directory.

ATTENZIONE: Non ripristinate la partizione root mentre è in uso! Con un solo comando perderete tutti i file di tutte le partizioni, inclusi tutti i backup presenti su hard disk esterno!! rdiff-backup esegue esattamente le istruzioni: se il backup della partizione root ha punti di mount vuoti, durante il ripristino cancella tutto ciò che si trova nei file system montati per ripristinare lo stato del backup.

Per recuperare sda5 dal backup più recente, eseguiamo semplicemente:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/sda5 /media/sda5
Ripristinare la partizione root

Ripristinare la partizione root non è così semplice. Non ripristinate la partizione root mentre è montata (vedi avvertimento sopra). È molto utile poter ripristinare la partizione root, perché qualora si incontrassero problemi durante installazione/upgrade, o con il kernel (etc.), si ha la sicurezza di essere in grado di rimettere tutto a posto, in soli 20 minuti.

Un modo per ripristinare la partizione root è eseguire il boot in una partizione linux libera, se ne avete una sul disco fisso. Potrete quindi recuperare la partizione che volete, perché non verrà montata come root. Dopo aver recuperato la partizione, eseguitevi il boot e sarà esattamente come era al tempo del backup! Questo è sicuramente il metodo più semplice.

Un altro modo per recuperare la partizione root è eseguire il boot dal live-CD di aptosid ed eseguire il ripristino da lì. rdiff-backup è incluso in aptosid. Qualora la vesione del live-cd di aptosid che possiedi non includa rdiff, potete digitare in grub (Bootoptions, (Cheatcodes)) il cheatcode "unionfs": così potrete installare programmi sul live cd. Basta avviare e utilizzare i seguenti comandi:

$ sudo su
# wget -O /etc/apt/sources.list http://aptosid.com/files/misc/sources.list
# apt-get update
# apt-get install rdiff-backup
Ora procediamo con il ripristino:
# mount /dev/sda1 /media/sda1
# mount /dev/sdb1 /media/sdb1
# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Nota: Se non avete un CD di aptosid e il tuo Live-CD è supportato da klik, potete installare rdiff-backup attraverso klik:

$ sudo ~/.zAppRun ~/Desktop/rdiff-backup_0.13.4-5.cmg rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root /media/sda1

Si consiglia a chi esegue il backup della propria partizione root (con l'intenzione di ripristinarla in caso di bisogno) di testare il processo di ripristino. Niente di peggio che pensare che tutto andrà bene, e poi incappare in un'emergenza inaspettata.

Se l'hard disk è stato cambiato o riformattato, ricontrollare gli UUID, (o le Label), in /boot/grub/menu.lst (grub-legacy) oppure i file in /etc/grub.d (grub2) e /etc/fstab, e modificarli di conseguenza. Un modo semplice per avere l'informazione per modificare i file menu.lst e fstab, se necessario, come root:

blkid
Backup di un altro pc

Se il pc locale può comunicare attraverso ssh a un altro pc, è possibile fare il backup dell'altro pc nel pc locale (pvviamente a patto che quest'ultimo abbia abbastanza spazio libero sull'hard disk). Il server ssh (sshd) deve essere attivo sul pc remoto. L'altro pc non deve per forza essere nella tua lan, può trovarsi ovunque.

Mettiamo che il vostro pc remoto abbia a disposizione:
1) hard drive da 100 GB (sda) in uso, con montati:
2) sda1 per la partizione root,
3) sda5 per file temporanei di cui non vogliamo il backup,
4) e sda6 per lo swap
5) Indirizzo IP 192.168.0.2

Nota: il backup di entrambi i drive da 100 GB di solito non può essere effettuato su un drive da 200 GB utilizzando rdiff-backup (poiché non ci sarebbe spazio per i file incrementali), ma dal momento che non state eseguendo il backup di sda5 sul pc remoto (e dal momento che di solito gli hard drive non sono usati al 100%, anche se non conviene contare troppo su questo) potreste calcolare di avere abbastanza spazio. Ogni volta che rdiff-backup effettua un altro backup, ancora più file incrementali vengono creati, e questo richiede sempre più spazio.

Potete ordinare a rdiff-backup di mantenere soltanto backup risalenti al massimo a un mese prima (questo comando viene mostrato più avanti), risparmiando più spazio che ordinandogli di mantenere dati vecchi di anni (e conseguentemente file incrementali vecchi di anni).

La prima cosa che dovete fare è installare rdiff-backup anche sul pc remoto (ogni computer di cui vuoi il backup, incluso il backup server, deve avere rdiff-backup installato).

Per il backup del pc remoto sul pc locale, esegui sul pc locale (cioè 192.168.0.1): Nota l'uso della coppia di due punti ::

# mkdir /media/sdb1/rdiff-backups/192.168.0.2/root
# rdiff-backup --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' 192.168.0.2::/ /media/sdb1/rdiff-backups/192.168.0.2/root

Se vulete dunque ripristinare una directory sul pc remoto, iniziate il ripristino o sul pc locale o su quello remoto.

Ecco come potreste ripristinare dal pc remoto la directory /usr/local/games sul pc remoto stesso:

# rdiff-backup -r now 192.168.0.1::/media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games /usr/local/games

E come farlo dal pc locale:

# rdiff-backup -r now /media/sdb1/rdiff-backups/192.168.0.1/root/usr/local/games 192.168.0.2::/usr/local/games

Fate uso dello stesso tipo di sintassi per ripristinare la tua partizione root da un live cd (dove il pc remoto è stato avviato da live cd ... vedi sopra).

Automatizzare i backup:

Se state eseguendo il backup di un altro pc sul pc locale, la prima cosa da fare è abilitare il login ssh senza password. Notate che stiamo parlando di login ssh come root senza password. Si potrebbe fare in modo che solo che i comandi rdiff-backup siano eseguiti, ma questo non rientra negli scopi di questa trattazione. Fate riferimento a Configurazione di SSH per questo. Presumiamo che nel nostro caso non ci siano problemi di sicurezza, e imposteremo quindi nel modo più semplice possibile i login senza password.

Dal pc locale esegui i seguenti comandi:

# [ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -f /root/.ssh/id_rsa

E premete invio due volte per avere password vuote. Poi esegui:

# cat /root/.ssh/id_rsa.pub | ssh 192.168.0.2 'mkdir -p /root/.ssh;\
> cat - >>/root/.ssh/authorized_keys2'

Vi verrà richiesta la password root.

Ora potete controllare il pc remoto come root attraverso ssh senza dover inserire una password, e automatizzare rdiff-backup.

Create quindi uno script bash che contiene tutti i comandi rdiff-backup. Il nostro script bash potrebbe essere qualcosa del genere:

#!/bin/bash
RDIFF=/usr/bin/rdiff-backup
echo
echo "=======Backing up 192.168.0.1 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' / /media/sdb1/rdiff-backups/192.168.0.1/root
echo "(and purge increments older than 1 month)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.1/root
echo
echo "=======Backing up 192.168.0.1 mount sda5======="
${RDIFF} --ssh-no-compression --exclude /media/sda5/myjunk /media/sda5 /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo "(and purge increments older than 1 months)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.1/sda5
echo
echo "=======Backing up 192.168.0.2 root======="
${RDIFF} --ssh-no-compression --exclude '/tmp/*' --exclude '/proc/*' --exclude '/sys/*' --exclude '/media/*/*' --exclude '/mnt/*/*' 192.168.0.2::/media/sdb1/rdiff-backups/192.168.0.2/root
echo "(and purge increments older than 1 months)"
${RDIFF} --remove-older-than 1M --force /media/sdb1/rdiff-backups/192.168.0.2/root

Potete dunque salvare questo script bash come "myrdiff-backups.bash", metterlo in /usr/local/bin sulla nostra macchina locale (backup server) e impostarlo come eseguibile. Esegui lo script bash e assicurati che funzioni.

E infine potete stabilire che cron lo esegua ogni giorno alle 20:00, inserendo la linea seguente nel crontab di root:

# crontab -e
and insert the following line
0 20 * * * /usr/local/bin/myrdiff-backups.bash
Content last revised 14/08/2010 0100 UTC