Un backup periodico e completo per il Raspberry Pi

di | 12/01/2016

Avete il vostro Raspino, con l’”immagine” del sistema operativo diligentemente scaricata dal sito originale e clonata sulla microSD.
Avete avviato, configurato, aggiunto programmi, funzioni, app…
… e adesso vivete con l’angoscia, col pensiero che non smette di assillarvi. “Poni il caso che la schedina di memoria si guasti: devo rifare tutto daccapo!”
Non è un rischio tanto remoto, vista la possibilità, per noi smanettoni, di qualche spegnimento improvviso o necessario e “senza passare dal via”… oltre al fatto che la schedina di memoria (a prescindere dalla garanzia del produttore…) è sì “a stato solido” come i nuovi dischi SSD, ma senza le loro caratteristiche di ridondanza e di correzione “trasparente” degli eventuali bit danneggiati.

Ma qui c’è adesso la giusta camomilla per farvi dormire sonni tranquilli! E gli ingredienti per prepararla sono semplici.

1) Prendete una chiavetta USB magari di dimensioni non grandi (sennò raddoppia l’ingombro del sistema!) e di capacità almeno doppia rispetto ai GB della schedina SD utilizzata.
2) Loggatevi e datevi i superpoteri di root (sudo -s)
3) Inserire la chiavetta USB in una delle prese USB libere del Raspberry (sempre che ve ne sia rimasta libera almeno una).
La memoria inserita dovrebbe essere riconosciuta come /dev/sda1 (verificare col comando “df”, nel caso prendere nota del valore se è diverso, da sostituire poi nei comandi successivi).
4) Provate ad eseguire il seguente comando. Lo scopo è di clonare, nella memoria USB inserita, l’intero filesystem utilizzato dal Raspberry in un file immagine (.img), in pratica l’inverso di quanto si era fatto per la creazione del “disco a stato solido” su SD contenente sistema operativo e app originali:

mount /dev/sda1 /media/pi
dd bs=4K if=/dev/mmcblk0 of=/media/pi/<nome del file>.img

Occorre aspettare diversi minuti (anche una mezz’ora o più, se il filesystem è su microSD da 16 o 32 GB e/o la velocità di scrittura della chiavetta non è elevata). Al ternine ricompare il prompt di root “#”.
Per verificare l’avvenuta operazione dare il comando “ls -l” che dovrebbe mostrare (ad esempio nel mio caso) una schermata così:

-rw-r–r– 1 root root 7948206080 gen 11 07:41 RaspiFKA.img

cioé la clonazione della mia memoria SD da 8 GB come “immagine” aggiornata alla data della sua creazione e che potrà essere poi ri-clonata su di una nuova schedina in caso di danneggiamento del filesystem.

Automatizziamo la procedura.

Sempre come root creiamo un “crontab” ovvero una procedura che avvia l’operazione periodicamente:

crontab -e

Aggiungere alla fine questa riga che indica al sistema l’avvio della clonazione:

mm hh * * * /bin/umount /dev/sda1; /bin/mount /dev/sda1 /media/pi; /bin/dd bs=4K if=/dev/mmcblk0 of=/media/pi/(nome file).img; /bin/umount /dev/sda1

sostituendo mm e hh il minuto e l’ora di avvio della procedura.
Ovviamente tutto in una riga: è infatti possibile dare nella shell di Linux (e quindi anche qui) più comandi di seguito separati dal “punto e virgola”.

Cosa abbiamo chiesto al sistema? Che tutti i giorni al minuto mm dell’ora hh venga eseguita in sequenza:

1) Smontaggio della chiavetta, qualora fosse già montata, magari in altre locazioni;
2) Mount della stessa nella locazione /media/pi (il default nel Raspberry);
3) Clonazione del filesystem con il comando “dd” visto prima;
4) Smontaggio della stessa al termine dell’operazione.
Il tutto eseguito in background quindi senza attese o blocchi di sistema. Ovviamente si sceglierà un orario in cui si sa che il Raspino è acceso e operativo. E tenere ovviamente sempre inserita la chiavetta USB nello slot del Raspberry.

Facile, no?