Azioni

Differenze tra le versioni di "Archivio di parità"

Da MontelLUG WIKI.

(Aggiunta categoria Backup)
m
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 3: Riga 3:
 
La definizione formale potete trovarla in rete (anche su [https://en.wikipedia.org/wiki/Parchive Wikipedia]), ma proviamo ad avvicinarci in modo meno formale, più pratico, più intuitivo a questo concetto "magico".
 
La definizione formale potete trovarla in rete (anche su [https://en.wikipedia.org/wiki/Parchive Wikipedia]), ma proviamo ad avvicinarci in modo meno formale, più pratico, più intuitivo a questo concetto "magico".
  
Un archivio di parità (o ''parity archive'' in inglese, o ''parchive'') possiamo immaginarlo come una '''riserva di blocchi''' che ci consente di '''verificare l'integrità''' di un file e di '''ripristinare''', se necessario, lo stato di un file (o un gruppo di file) nel caso in cui questi vengano per qualche motivo corrotti.
+
Un archivio di parità (o ''parity archive'' in inglese, o '''''parchive''''') possiamo immaginarlo come una '''riserva di blocchi''' che ci consente di '''verificare l'integrità''' di un file e di '''ripristinare''', se necessario, lo stato di un file (o un gruppo di file) nel caso in cui questi vengano per qualche motivo corrotti.
  
 
Infatti, oltre ad offire funzionalità di controllo dell'integrità dei dati, ne consente anche il recupero (vedremo i limiti).
 
Infatti, oltre ad offire funzionalità di controllo dell'integrità dei dati, ne consente anche il recupero (vedremo i limiti).
  
Se conoscete già le funzioni ''hash'' (''sha1'', ''sha256'', ''sha512'', ''md5'', ...), immaginate di avere un file e calcolare il suo ''checksum'' sha1: il risultato vi consentirà di verificare l'integrità del file nel tempo.
+
Se conoscete già le funzioni ''hash'' (''sha1'', ''sha256'', ''sha512'', ''md5'', ...), immaginate di avere un file e calcolare il suo ''checksum sha1'': il risultato vi consentirà di verificare l'integrità del file nel tempo.
  
 
E quando il ''checksum'' non corrisponde? Niente, con ''sha1'' (e le altre funzioni di ''hash'') potete solo prendere atto del fatto che il file è stato modificato.
 
E quando il ''checksum'' non corrisponde? Niente, con ''sha1'' (e le altre funzioni di ''hash'') potete solo prendere atto del fatto che il file è stato modificato.
Riga 20: Riga 20:
 
== Ma in pratica, cosa fa? ==
 
== Ma in pratica, cosa fa? ==
  
Supponiamo di dover inviare un messaggio dalla Voyager (ormai fuori dal sistema solare, distante oltre 23 miliardi di chilometri dalla Terra) verso la Terra: può essere un testo, un video, un audio, ... qualsiasi messaggio; di qualunque tipo di messaggio si tratti verrà prima convertito in un messaggio digitale (una fila di zero e uno: in pratica un file).
+
Supponiamo di dover inviare un messaggio dalla Voyager (ormai fuori dal sistema solare, distante oltre 23 miliardi di chilometri dalla Terra) verso la Terra: può essere un testo, un video, un audio, ... qualsiasi messaggio.
 +
 
 +
Di qualunque tipo di messaggio si tratti verrà prima convertito in un messaggio digitale (una fila di zeri e uno: in pratica un file).
 +
[[File:Analog2Digital.png|senza_cornice|centro|Conversione da analogico in digitale]]
 +
<br>
  
 
Questo messaggio verrà diviso in blocchi, ipotizziamo 10 blocchi.
 
Questo messaggio verrà diviso in blocchi, ipotizziamo 10 blocchi.
 +
[[File:Data.png|senza_cornice|centro|Messaggio suddiviso in 10 blocchi]]
 +
<br>
  
 
Verrà calcolato l'archivio di parità per un 30% (ad esempio), per cui altri 3 blocchi.
 
Verrà calcolato l'archivio di parità per un 30% (ad esempio), per cui altri 3 blocchi.
 +
[[File:Messaggio + Parchive.png|senza_cornice|centro|Messaggio + Archivio di parità (30%)]]
 +
<br>
  
 
A questo punto la Voyager invierà un "plico" di dati costituito da 13 blocchi.
 
A questo punto la Voyager invierà un "plico" di dati costituito da 13 blocchi.
Riga 32: Riga 40:
 
È questa la magia degli algoritmi di Reed-Solom: sulla Terra sarà sufficiente ricevere 10 blocchi '''qualsiasi''' dei 13 inviati dalla Voyager per essere in grado di ricostruire il messaggio originario.
 
È questa la magia degli algoritmi di Reed-Solom: sulla Terra sarà sufficiente ricevere 10 blocchi '''qualsiasi''' dei 13 inviati dalla Voyager per essere in grado di ricostruire il messaggio originario.
  
 +
[[File:Data + parchive corrupted and recovered.png|senza_cornice|Messaggio + archivio di parità corrotto e ripristinato]]
 +
<br><br>
 +
 +
== Applicazioni casalinghe degli archivi di parità ==
 +
Bravi questi Reed-Solomon! Come possiamo utilizzare questa tecnologia in applicazioni casalinghe? <br> I limiti sono dettati dalla fantasia; possiamo:
 +
* proteggere un file (o un gruppo di file) importante sul PC da corruzione dei dati (sbalzi di corrente, data tampering, HDD a fine ciclo vita, ...)
 +
* proteggere un backup da corruzione dei dati
 +
* prima di masterizzare un CD/DVD (c'è chi lo fa ancora?) riempire la capienza disponibile con archivi di parità
 +
* ripristinare facilmente il filesystem di una scheda SD (pensate alle Raspberry Pi)
 +
* distribuire e recuperare file da UseNet (c'è chi lo usa ancora?)
 +
* aumentare la resilienza dei file distribuiti via torrent (mi raccomando: solo roba legale! A quanti di voi è capitato di rimanere bloccati sul 98% del download?)
 +
* riciclare HDD più piccoli per contenere solo gli archivi di parità
 +
Questa ultima opzione è interessante: infatti i ''parchive'' non devono obbligatoriamente risiedere nella stessa directory o file system o disco del dato originario; ovviamente sarà importante mantenere una corrispondenza tra la gerarchia che contiene il dato e quella che contiene il ''parchive''. <br> Quindi, ad esempio, su un HDD si potrebbero tenere i dati e su un altro, ricostruendo l'esatta gerarchia di directory, solo i parchive. <br> In questo modo avrete realizzato un RAID 6 con dischi offline.
 +
 +
== Hands on! ==
 +
Vediamo di sporcarci un po' le mani sulla tastiera... :-)
 +
 +
=== Installazione ===
 +
Prima di tutto vi servirà installare il pacchetto <code>par2cmdline</code> (a seconda della distribuzione che utilizzate il pacchetto potrebbe avere nomi diversi).
 +
Il pacchetto installerà l'utility generica <code>par2</code> con la quale sarà possibile eseguire tutte le operazioni; installerà anche <code>par2create, par2verify, par2repair</code> come scorciatoie alle funzionalità specifiche.
 +
 +
=== Dati di test ===
 +
Una volta installato il tool, a solo scopo di test, create una directory ''TestParchive'' e create dentro tre file: ''uno.txt, due.txt, tre.txt'':
 +
<syntaxhighlight lang="bash">
 +
$ mkdir TestParchive && cd TestParchive && touch uno.txt && touch due.txt && touch tre.txt
 +
</syntaxhighlight>
 +
<br>
 +
 +
Modificate i file di testo a vostro piacimento.
 +
 +
=== Creare un ''parchive'' ===
 +
Adesso, per creare i ''parchive'' per il contenuto dell'intera directory, con una ridondanza del 10%, vi basterà digitare (siete già nella directory ''TestParchive''):
 +
<syntaxhighlight lang="bash">
 +
$ par2 c -r10 TestParchive.par2 *
 +
</syntaxhighlight>
 +
<br>
 +
 +
Oppure, utilizzando la scorciatoia <code>par2create</code>:
 +
<syntaxhighlight lang="bash">
 +
$ par2create -r10 TestParchive.par2 *
 +
</syntaxhighlight>
 +
<br>
 +
 +
 +
== ToDo ==
  
 
''ToDo:''
 
''ToDo:''
* ''applicazioni casalinghe degli archivi di parità''
 
* ''protezione dei dati (es.: backup)''
 
* ''conservazione degli archivi di parità''
 
 
* ''esempi da riga di comando''
 
* ''esempi da riga di comando''
 
* ''aggiungere immagini esplicative''
 
* ''aggiungere immagini esplicative''
 +
* ''aggiungere collegamento a [https://wiki.archlinux.org/title/Parchive Parchive su ArchLinux]''
 +
* ''limiti''
 +
* ''esplorare diverse opzioni (serve?)'"
  
 
[[Category:Backup]]
 
[[Category:Backup]]

Versione attuale delle 09:17, 21 gen 2022

Stesura in corso

La definizione formale potete trovarla in rete (anche su Wikipedia), ma proviamo ad avvicinarci in modo meno formale, più pratico, più intuitivo a questo concetto "magico".

Un archivio di parità (o parity archive in inglese, o parchive) possiamo immaginarlo come una riserva di blocchi che ci consente di verificare l'integrità di un file e di ripristinare, se necessario, lo stato di un file (o un gruppo di file) nel caso in cui questi vengano per qualche motivo corrotti.

Infatti, oltre ad offire funzionalità di controllo dell'integrità dei dati, ne consente anche il recupero (vedremo i limiti).

Se conoscete già le funzioni hash (sha1, sha256, sha512, md5, ...), immaginate di avere un file e calcolare il suo checksum sha1: il risultato vi consentirà di verificare l'integrità del file nel tempo.

E quando il checksum non corrisponde? Niente, con sha1 (e le altre funzioni di hash) potete solo prendere atto del fatto che il file è stato modificato.

Con gli archivi di parità, invece, oltre a verificarne l'integrità, è anche possibile ripristinare il file al momento in cui è stato generato l'archivio di parità.

Un po' di storia

Gli archivi di parità - parchive - sono un'implementazione degli algoritmi di Irving S. Reed e Gustave Solomon, due matematici ed ingegneri del MIT, che nel 1960 svilupparono una serie di algoritmi per la correzione degli errori.

Il risultato del loro lavoro fu eccezionale: basti pensare che i loro algoritmi furono applicati per le comunicazioni tra le sonde Voyager e la Terra, nel DAT e sono tutt'ora utilizzati nel CD, nel DVD, nei codici a barre a due e tre dimensioni (sì, anche nei QR Code), nel RAID 6 e perfino nel Digitale Terrestre (DVB).

Ma in pratica, cosa fa?

Supponiamo di dover inviare un messaggio dalla Voyager (ormai fuori dal sistema solare, distante oltre 23 miliardi di chilometri dalla Terra) verso la Terra: può essere un testo, un video, un audio, ... qualsiasi messaggio.

Di qualunque tipo di messaggio si tratti verrà prima convertito in un messaggio digitale (una fila di zeri e uno: in pratica un file).

Conversione da analogico in digitale


Questo messaggio verrà diviso in blocchi, ipotizziamo 10 blocchi.

Messaggio suddiviso in 10 blocchi


Verrà calcolato l'archivio di parità per un 30% (ad esempio), per cui altri 3 blocchi.

Messaggio + Archivio di parità (30%)


A questo punto la Voyager invierà un "plico" di dati costituito da 13 blocchi.

"Ah, e dov'è il vantaggio? Dovremmo provare a rendere il pacchetto più piccolo, non più pesante!"

È questa la magia degli algoritmi di Reed-Solom: sulla Terra sarà sufficiente ricevere 10 blocchi qualsiasi dei 13 inviati dalla Voyager per essere in grado di ricostruire il messaggio originario.

Messaggio + archivio di parità corrotto e ripristinato

Applicazioni casalinghe degli archivi di parità

Bravi questi Reed-Solomon! Come possiamo utilizzare questa tecnologia in applicazioni casalinghe?
I limiti sono dettati dalla fantasia; possiamo:

  • proteggere un file (o un gruppo di file) importante sul PC da corruzione dei dati (sbalzi di corrente, data tampering, HDD a fine ciclo vita, ...)
  • proteggere un backup da corruzione dei dati
  • prima di masterizzare un CD/DVD (c'è chi lo fa ancora?) riempire la capienza disponibile con archivi di parità
  • ripristinare facilmente il filesystem di una scheda SD (pensate alle Raspberry Pi)
  • distribuire e recuperare file da UseNet (c'è chi lo usa ancora?)
  • aumentare la resilienza dei file distribuiti via torrent (mi raccomando: solo roba legale! A quanti di voi è capitato di rimanere bloccati sul 98% del download?)
  • riciclare HDD più piccoli per contenere solo gli archivi di parità

Questa ultima opzione è interessante: infatti i parchive non devono obbligatoriamente risiedere nella stessa directory o file system o disco del dato originario; ovviamente sarà importante mantenere una corrispondenza tra la gerarchia che contiene il dato e quella che contiene il parchive.
Quindi, ad esempio, su un HDD si potrebbero tenere i dati e su un altro, ricostruendo l'esatta gerarchia di directory, solo i parchive.
In questo modo avrete realizzato un RAID 6 con dischi offline.

Hands on!

Vediamo di sporcarci un po' le mani sulla tastiera... :-)

Installazione

Prima di tutto vi servirà installare il pacchetto par2cmdline (a seconda della distribuzione che utilizzate il pacchetto potrebbe avere nomi diversi). Il pacchetto installerà l'utility generica par2 con la quale sarà possibile eseguire tutte le operazioni; installerà anche par2create, par2verify, par2repair come scorciatoie alle funzionalità specifiche.

Dati di test

Una volta installato il tool, a solo scopo di test, create una directory TestParchive e create dentro tre file: uno.txt, due.txt, tre.txt:

$ mkdir TestParchive && cd TestParchive && touch uno.txt && touch due.txt && touch tre.txt


Modificate i file di testo a vostro piacimento.

Creare un parchive

Adesso, per creare i parchive per il contenuto dell'intera directory, con una ridondanza del 10%, vi basterà digitare (siete già nella directory TestParchive):

$ par2 c -r10 TestParchive.par2 *


Oppure, utilizzando la scorciatoia par2create:

$ par2create -r10 TestParchive.par2 *



ToDo

ToDo:

  • esempi da riga di comando
  • aggiungere immagini esplicative
  • aggiungere collegamento a Parchive su ArchLinux
  • limiti
  • esplorare diverse opzioni (serve?)'"