Backup e ripristino con rsnapshot

Informatica

Questa volta vediamo come fare backup dei dati importanti del nostro sistema usando degli snapshot, in stile Time Machine.
Uno snapshot non è altro che una copia esatta dei file esistenti. Usando rsnapshot possiamo creare degli snapshot periodici avvantaggiandoci dell'efficienza di rsync (che copia solo i file cambiati) e degli hard link (che ci permettono di risparmiare spazio su disco). Il risultato, dopo una semplice configurazione, è un deposito da cui possiamo recuperare versioni passate dei nostri file, proprio come fa Time Machine di Apple! (ma gratis, senza Leopard, e per qualsiasi computer della rete locale!)

Nel seguito illustro la mia strategia di backup con rsnapshot. È una trascrizione quasi esatta dei miei appunti, per cui è molto sintetica e stringata. Se qualcosa non vi è chiaro, consultate la documentazione di rsnapshot, molto semplice e ben fatta, e poi chiedetemi chiarimenti, usando i commenti in questa pagina.

castor.local, talvolta abbreviato in castor è il nome host del mio sistema locale.

Backup e ripristino

Vengono fatti degli snapshot settimanali di /etc, /home, /root e /mnt/win_d.

rsnapshot fa snapshot di file system da usare come backup, usando rsync. Supporta backup incrementali che usando gli hard link occupano lo spazio di un backup completo + le differenze tra i backup periodici.
Permette di mettere a disposizione backup periodici in stile "time machine".

Successivamente, ogni 4 mesi, ho degli script che creano dei pacchetti dar compressi con gzip dagli snapshot più recenti (/mnt/backup/private/snapshots/weekly.0/). In proposito, vedere la prossima pagina.

Configurazione locale di rsnapshot (castor.local)

I backup vengono fatti settimanalmente, e vengono ruotati automaticamente. Dopo un mese, sono conservati mensilmente per due mesi.
Usiamo anacron per assicurarci che i job programmati vengano eseguiti comunque entro la data più vicina all'intervallo fissato.

Backup con rsnapshot

Elenco qui solamente le modifiche rilevanti per il mio sistema di backup locale.

Ecco le righe modificate dal mio file di configurazione /etc/rsnapshot.conf (riporto solo le righe che ho modificato):

# All snapshots will be stored under this root directory.
snapshot_root   /mnt/backup/private/snapshots/
# LINUX USERS:   Be sure to uncomment "cmd_cp". This gives you extra features.
cmd_cp          /bin/cp
# Uncomment this to enable remote ssh backups over rsync.
cmd_ssh /usr/bin/ssh
# 4 backup settimanali (1 mese) e 2 mensili (vado nel "passato" al max per 2 mesi)
interval        weekly  4
interval        monthly 2
# If this is enabled, rsync won't span filesystem partitions within a
# backup point. This essentially passes the -x option to rsync.
# The default is 0 (off).
one_fs          1
# The include_file and exclude_file parameters, if enabled, simply get
# passed directly to rsync. Please look up the --include-from and
# --exclude-from options in the rsync man page for more details.
exclude_file    /root/backup_script/rsync_escludi
###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup  /root/          castor/
backup  /etc/           castor/
backup  /mnt/win_d/     castor/
backup  /home/          castor/

"castor" specifica in quale sottodirectory "destinazione" vanno messi i backup di ciascuna directory originale. Di solito si usa il nome dell'host di cui si fa il backup.

Aggiunti i job a cron (in realtà, ad anacron):

[[email protected] ~]$ cat  /etc/cron.weekly/rsnapshot_weekly.cron
#!/bin/bash
/usr/bin/rsnapshot weekly
exit 0
[[email protected] ~]$ cat  /etc/cron.monthly/rsnapshot_monthly.cron
#!/bin/bash
/usr/bin/rsnapshot monthly
exit 0

Ecco il contenuto del file delle esclusioni, /root/backup_script/rsync_escludi. La sintassi è quella delle regole di matching di rsync:

+ **/tmp
- **/tmp/**
+ **/cache
- **/cache/**
+ **/Cache
- **/Cache/**
+ **/.thumbnails
- **/.thumbnails/**
+ **/.beagle/Indexes
- **/.beagle/Indexes/**
+ **/.beagle/TextCache
- **/.beagle/TextCache/**
- *~
- *.swp
- *.vmdk
- *.vdi
+ **/Download/distro/
- **/Download/distro/*.iso

Ripristino degli snapshot

Gli snapshot sono in /mnt/backup/private/snapshots/. La struttura è questa:

# ls -l private/snapshots/
totale 16
drwxr-xr-x 3 root root 4096 2009-04-26 04:38 weekly.0/
drwxr-xr-x 3 root root 4096 2009-04-20 11:21 weekly.1/
drwxr-xr-x 3 root root 4096 2009-04-19 06:25 weekly.2/
drwxr-xr-x 3 root root 4096 2009-04-13 02:05 weekly.3/
drwxr-xr-x 3 root root 4096 2009-04-06 02:05 monthly.0/
drwxr-xr-x 3 root root 4096 2009-03-03 02:05 monthly.1/

Ogni directory contiene la struttura completa delle directory salvate, esattamente come nel file system originale:

# tree -dL 2 /mnt/backup/private/snapshots/weekly.0/
/mnt/backup/private/snapshots/weekly.0/
`-- castor
    |-- etc
    |-- home
    |-- mnt
    `-- root

Gli snapshot che abbiamo creato sono copie esatte dei file originali (con le stesse proprietà), e conservano gli stessi permessi degli originali, sono cioè modificabili dagli utenti proprietari, cosa non desiderabile per un backup.

Per ovviare a questo, ho messo la directory che contiene gli snapshot in una directory cui ha accesso solo root, e poi ho montato questa directory su un'altra directory in modalità "bind" in sola lettura (read-only):

# mkdir /mnt/backup/private/
# mkdir /mnt/backup/private/snapshots/
# mkdir /mnt/timemachine/
# chmod 0700 /mnt/backup/private/
# chmod 0755 /mnt/backup/private/snapshots
# chmod 0755 /mnt/timemachine
# mount -o bind /mnt/backup/private/snapshots /mnt/timemachine
# mount -o remount,ro,bind /mnt/timemachine

Perché il mount in bind in sola lettura funzioni è necessario avere un kernel linux pari o superiore al 2.6.26. Inoltre non è possibile il mount direttamente in sola lettura, ma è necessario procedere in due passi, come sopra. Vedi:
Read-only bind mounts

In questo modo gli utenti non potranno accedere agli snapshot direttamente, ma attraverso la directory /mnt/timemachine (nome molto appropriato :-), che essendo montata in sola lettura impedisce la modifica dei backup.
Per ripristinare una vechia versione di un file è dunque sufficiente sfogliare /mnt/timemachine, cercare la directory corrispondente alla versione che vogliamo (una settimana fa -> weekly.0, due settimane fa -> weekly.1, ecc.), e andare a recuperare il file dalla copia dell'albero originale.

Per montare /mnt/timemachine in modo permanente non possiamo usare fstab (ci vogliono 2 comandi), ma possiamo aggiungere i comandi necessari in /etc/rc.local, che viene eseguito al termine della procedura di avvio del sistema.

Riferimenti utili

rsnapshot. A remote file system snapshot utility, based on rsync

Trackback URL for this post:

http://gerlos.altervista.org/trackback/451

commenti

ritratto di Pierluigi

Rsnapshot

Salve a tutti da poco ho installato rsnapshot sul mio linux, quello che vorrei fare è fare il backup con rsnapshot ma di una cartella condivisa su windows è possibile? se SI come? :-) mi date una dritta su come configurare rsnapshot per fare questo?

GRazie Mille
Pier

ritratto di gerlos

Re: rsnapshot

La cosa è molto facile da fare, grazie a Samba e al fatto che con unix puoi facilmente montare una directory remota e accedervi come se fosse locale: basta che prima di eseguire il job di cron che fa il backup monti la dir condivisa con un comando tipo:

mount -t smbfs -o username=YOURUSER,password=YOURPASSWORD //YOURSERVER/SHARE /destination

oppure usando smbmount.
Puoi montare la dir condivisa nello script che fai eseguire a cron, avendo l'accortezza di far eseguire rsnapshot solo quando sei sicuro che il montaggio della condivisione è avvenuto con successo.

In alternativa, potresti installare un servizio ssh o rsync sul sistema Windows e lasciar fare a rsnapshot attraverso questi protocolli. Nella documentazione di rsnapshot (veramente ben fatta) c'è qualche dritta in proposito, e pure qualche collegamento a pagine che parlano di rsnapshot con windows in generale.

Però fai attenzione: salvando dati su un file system diverso (NTFS è diverso da ext2/ext3! FAT32, non parliamone!) rischi di perdere i metadati associati ai file come proprietario, gruppo e permessi. Il file system NTFS non supporta queste proprietà, che sono specifiche di unix.
Se si tratta di un backup di documenti, musica, video o immagini, pazienza, questo potrebbe non essere un problema, però se stai pensando di fare un backup della tua dir home o (peggio) di tutto il sistema, ti sconsiglio vivamente di farlo su una partizione NTFS attraverso Samba!!! I backup potrebbero non funzionare correttamente quando ripristinati, e potresti anche trovarti davanti a qualche problema serio di sicurezza!!!

Non ho mai provato (molto più spesso ho fatto il contrario, facendo backup di macchine Windows su macchine GNU/Linux, sempre con successo), ma mi aspetto problemi non da poco.

In bocca al lupo!

ritratto di ugaciaka

wow, ficata sta roba. Ora

wow, ficata sta roba. Ora non mi serve ma magari in futuro...intanto ho aggiunto il tuo blog ai feed...

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.