mercoledì 21 maggio 2008

Come spostare/salvare i vostri dati con la certezza di non perdere nemmeno un bit (2 di 2)


Dopo aver visto la parte teorica, passiamo alla pratica!
Io utilizzerò per questo scopo un sistema gnu/linux per il semplice motivo che i programmi che generano gli algoritmi di hash sono già integrati nell'installazione base; esiste sicuramente la possibilità di svolgere gli stessi compiti anche su altri sistemi operativi, ma bisogna sbattersi a cercare il programma, eventualmente compilarlo etc etc e poi, diciamolo, il pinguino è superiore! :D



Abbiamo deciso di utilizzare l'algoritmo SHA1 e vogliamo generare un file che contenga l'impronta digitale di ciascun file da archiviare e, contemporaneamente, il percorso dove trovare quel file.
Con il comando

sha1sum nomefile > checkfile

otterrete un file di testo di nome checkfile contenente la stringa sha1 e il percorso relativo del file (attenzione, il percorso è relativo e non assoluto, vedremo in seguito quali sono i vantaggi e gli svantaggi)
E' chiaro che non possiamo adottare questa soluzione manualmente per ciascun file, ci viene in aiuto il comando find con i suoi mille possibili usi, per mezzo di questa sintassi:

find ./ -type f -exec sha1sum '{}' \; > /home/nomeutente/Desktop/checkfile

sto dicendo al comando find di elencare, nella cartella in cui mi trovo (./) tutti gli oggetti di tipo file (-type f), compresi quelli nelle subdirectory (questa opzione è di default su find).
Per ciascun file chiedo inoltre di eseguire un comando (-exec), in particolare il comando sha1sum sul file elencato in quel momento (sha1sum '{}' \; ) e di salvare l'output così generato in un file di testo nel mio Desktop.
Attenzione: ho scelto il desktop e non la directory dalla quale ho lanciato il comando perchè altrimenti sha1sum cercherebbe di generare l'hash anche del file di controllo, portando in fase di check alla segnalazione di un errore. Preferisco di gran lunga far scrivere il file sul Desktop e poi farne una copia nella directory di partenza (scegliendo un nome sensato, che possibilmente tenga conto della data e che si capisca a colpo d'occhio che è una tabella di hash; e.g. sumcheck-2008-05-21)

Quando vorrete controllare l'integrità dei vostri dati sarà sufficiente lanciare il comando

sha1sum -c --status checkfile

per sapere se ci sono errori (con al posto di checkfile il nome del vostro file di controllo ovviamente).
Se vi capita di avere come output una sfilza infinita di "file non trovato", molto probabilmente avete lanciato il controllo dalla directory sbagliata.

Attenzione: E' FONDAMENTALE non cambiare il nome ai file da controllare o spostarli da una directory all'altra, altrimenti sarete costretti a modificare il file di controllo a mano!
Un piccolo aiuto per questo è dato dall'aver salvato solo i percorsi relativi e non quelli assoluti, in questo modo potrete spostare l'intero albero senza che il sumcheck si accorga di nulla!

L'unico svantaggio di questo sistema è che per generare il file di controllo e per fare il check si impiega un po' di tempo (nel mio caso con un archivio da 15000 file circa e 40GB di dimensione, le due operazioni impiegano circa 30 minuti ciascuna, tempo che varia molto a seconda di processore e velocità dei dischi).

Se pensate che una cosa del genere sia eccessiva, sappiate che Adobe Lightroom, nell'importare i file e generare il catalogo, una volta ha corrotto due file formato raw - gli originali scaricati dalla macchina fotografica per intenderci - siete avvisati!!!

Ci sono un mucchio di cose interessanti che si possono fare con un sistema del genere: ad esempio immaginiamo di star lavorando con un archivio fotografico (che è la situazione a me familiare).
Potreste sentire il bisogno di aggiungere dei tag alle foto, effettuare modifiche e fotoritocchi... bene, se usate un software serio che vi permetta di salvare le modifiche in un file xmp separato, potrete continuare a fare il sumcheck degli originali anche dopo che li avrete modificati perchè tutte le modifiche saranno allegate in un file separato.

Io uso questo metodo: i file NEF provenienti dalla macchina fotografica sono quelli per me più importanti...se perdo un jpeg generato dalla conversione di uno di questi file non è una tragedia, posso sempre rifarlo, ma rovinare gli originali è inammissibile.
Usando Lightroom allora adotto il seguente sistema: per i file tiff e jpeg lascio che i metadati vengano inseriti nel file, per i nef invece il programma genera dei file xmp separati.
Dal file di controllo con un semplice

cat checkfile | grep '.nef' > checkfilenef

estraggo il file di controllo per i soli file nef in modo da poter controllare più spesso quelli.
Subito dopo aver generato il file di controllo, lancio un sumcheck per verificare che ogni stringa sia stata scritta correttamente, salvo più copie del checkfile ed eventualmente genero il digest anche di questo file (potrebbe sempre corrompersi, dato che è un file di testo).
Quando copio l'archivio o parti di esso, eseguo un checksum, quando creo il backup eseguo un checksum e se non accedo all'archivio per molto tempo... beh ormai lo avete capito, eseguo un checksum!

Quello che mi piacerebbe fare, e forse un giorno ci darò un occhiata, è un programmino che estragga dai file di immagine la parte relativa all'immagine vera e propria (niente metadati per intenderci) generi il digest di quella parte e salvi la stringa esadecimale in uscita tra i metadati, in modo da svincolare i file da un certo percorso e da permettere anche di generare i digest solo dei nuovi arrivati e non di tutto l'archivio ogni volta (ah, ovviamente, tutte le volte che rigenero il checkfile, prima di cominciare...eseguo un sumcheck :D )
---
M



Nessun commento:

Posta un commento

commentando accetti implicitamente le regole del blog, leggile!