Strategie di backup sotto Mac OS X

Da tempo faccio i backup con rsync da linea di comando, con qualcosa di simile a

sudo time /usr/local/bin/rsync -aEv --progress --delete-excluded \
/Users/olaf /Volumes/Chimera/olaf/Backup/ --exclude "olaf/Movies/**.avi" \
--exclude "olaf/Library/Caches" --exclude "olaf/Music" \
--exclude "olaf/Movies" --exclude "olaf/Downloads"

Ottengo così ogni volta che faccio il backup una una copia aggiornata nel disco fisso di backup.

Dopo la discussione nel forum di MacityNet sulla WWDC Apple 2006 ho pensato di informarmi sulla possibilità di usare Subversion per i backup, facendo un "commit" ogni volta che voglio fare il salvataggio. Questo mi assicurerebbe la possibilità di poter risalire indietro nella storia delle modifiche di ogni file, in maniera simile a Time Machine di Leopard.
Ottima cosa, soprattutto perché fare backup con Subversion avrebbe il vantaggio di poter salvare solo le differenze, così che lo spazio occupato sarebbe davvero ridotto anche nel caso di file binari (Subversion è in grado di calcolare le differenze tra binari).

Bene, non è fattibile. Il problema non sono i metadati (sempre da tenere in considerazione sotto Mac OS X), ma lo spazio occupato! Da SEI anni viene richiesta agli sviluppatori di Subversion la possibilità di consolidare le prime n revisioni oppure tutte le revisioni precedenti ad una determinata data, risparmiando quindi spazio, ma ancora nulla... potete trovare la discussione qui, solo di recente qualcosa si sta muovendo.

In ogni modo, Subversion è da scartare. Altra possibilità sarebbe CVS, ovviamente, ma con i file binari si comporta peggio e non ha il supporto per i metadati.

Rimane rsync, che può essere utilizzato come indicato in queste due pagine: Backups using rsync e Easy Automated Snapshot-Style Backups with Rsync. L'idea indicata è interessante: permette di ottenere una via di mezzo tra backup multipli (ognuno in una sua directory) e backup incrementali a livello di file (circa ciò che Subversion è in grado di fare e, si spera, anche Time Machine in Leopard).

Per non dover più copiare e incollare la linea di codice sopra indicata, ho fatto un semplice script bash che automatizza tutto e che ogni volta aggiunge una cartella con la data e ora del backup:

#!/usr/bin/env sh

NOW=$(date +"%Y.%m.%d-%H.%M")

/usr/local/bin/rsync -aEi --progress --ea-checksum \
--link-dest="../Last" /Users/olaf /Volumes/Ercole/olaf/Backup/$NOW \
--exclude="/olaf/.Trash/" --exclude="/olaf/Library/Caches/" \
--exclude="/olaf/Downloads/" --exclude="/olaf/Movies/" --exclude="/olaf/Music/" \
&& ln -fhs /Volumes/Ercole/olaf/Backup/$NOW /Volumes/Ercole/olaf/Backup/Last

La cartella "Last" è un link all'ultimo backup. Sotto Mac OS X Tiger, può essere utile usare un rsync modificato. L'opzione --ea-checksum deriva appunto da tale patch.

Il vantaggio dell'approccio con i link hard è che lo spazio aggiuntivo occupato è estremamente ridotto, pur mantenendo la possibilità di accedere alle precedenti versioni del backup e di vedere la struttura delle directory tradizionale. Subversion e Time Machine richiedono l'uso di interfacce apposite per ottenere lo stesso scopo. Lo svantaggio è che basta cambiare una lettera in un file di qualunque dimensione per far sì che il file sia copiato nuovamente nel backup: questa procedura non permette di analizzare le modifiche all'interno dei file. Per ridurre lo spazio occupato bisognerebbe usare rdiff-backup, che salva solo le effettive differenze, però non produce cartelle navigabili come lo script sopra presentato.

Aggiornamento Agosto 2007

Ho visto in una immagine di Leopard che Time Machine fa backup ora per ora, fino ad un giorno, poi tiene backup giornalieri, poi tiene backup settimanali. In pratica, farà la stessa cosa dello scipt sopra riportato, ma in più cancellerà in automatico i vecchi backup, in maniera da diradarli man mano che diventano vecchi. Io lo faccio a mano, inoltre non tengo backup orari e giornalieri, ma solo settimanali.

Questo significa che sarà veloce ed efficiente, secondo me, oltre che utile.

Aggiornamento Gennaio 2008

Ho dovuto sostituire il disco fisso, per cui ho utilizzato, in parte, il backu fatto con rsync. Beh, i dati sono tutti salvati, ma le icone personalizzate di molte cartelle sono perse. NE deduco che rsync, con le opzioni da me usate, ha ancora qualche problema. Nessun problema per me, questa volta, ma sarebbe potuta andare peggio se avessi avuto vecchie applicazioni.

Ora sono passato a Time Machine, che è più veloce, automatico e ha la gestione autonoma dei vecchi backup.

Prima stesura: 30 Maggio 2007.

Autore: Olaf Marzocchi