Prima di entrare nel dettaglio mettiamo subito alla prova tale feature; creiamo tre dischi "su file" (da 150 Mega ciascuno) che andranno a comporre il nostro pool:
$ mkfile 150m disk1 disk2 disk3
ora creiamo il nuovo pool, chiamandolo con molta fantasia "dedup":
$ pfexec zpool create dedup \
/export/home/luca/tmp/disk1 \
/export/home/luca/tmp/disk2 \
/export/home/luca/tmp/disk3
controllandone le caratteristiche vediamo subito che la dimensione è pari a 435 Megabyte e notiamo che il rapporto di "deduplication" è pari a uno (visto che ancora non abbiamo scritto nulla):
$ zpool get all dedup
NAME PROPERTY VALUE SOURCE
dedup size 435M -
dedup capacity 0% -
dedup altroot - default
dedup health ONLINE -
dedup guid 598651376828683765 default
dedup version 22 default
dedup bootfs - default
dedup delegation on default
dedup autoreplace off default
dedup cachefile - default
dedup failmode wait default
dedup listsnapshots off default
dedup autoexpand off default
dedup dedupratio 1.00x -
dedup free 435M -
dedup allocated 79.5K -
ora andiamo ad abilitare la "deduplication" a livello di filesystem:
$ pfexec zfs set dedup=on dedup
da questo momento in poi, per ogni nuovo blocco che ZFS andrà a scrivere effettuerà il controllo di duplicazione: copiamo alcuni file nel nuovo filesystem e controlliamo. Per il test ho scelto di copiare alcuni MP3 presenti sul mio disco fisso, vediamo l'occupazione dei file prescelti:
$ du -h /export/home/luca/Documents/Music/aavv_80/
72M /export/home/luca/Documents/Music/aavv_80/
ora creiamo tre cartelle nel nostro filesystem su cui andremo a copiare i file
$ cd /dedup
$ pfexec mkdir d1
$ pfexec mkdir d2
$ pfexec mkdir d3
$ pfexec mkdir d4
e copiamo i file:
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d1
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d2
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d3
$ pfexec cp /export/home/luca/Documents/Music/aavv_80/* d4
ora controlliamo lo spazio occupato:
$ du -h .
72M ./d1
72M ./d2
72M ./d3
72M ./d4
287M .
i conti tornano; su tutte e quattro le cartelle sono presenti 72 Megabyte di MP3... mmmm... e la "deduplication" che fine ha fatto... non ha funzionato?!?!??? Controlliamo meglio:
$ zpool list dedup
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
dedup 435M 72.5M 363M 16% 4.00x ONLINE -
ecco svelato il mistero!!! Il comando "du" (come anche ls e molti altri) agendo a livello user "vede" la dimensione reale del file (la stessa cosa accade per i filesystem compressi), ma se controlliamo meglio lo spazio allocato a livello di pool vediamo che in realtà sono stati utilizzati "solo" 72.5 Megabyte e il rapporto di "deduplication" è salito a 4; ora i conti tornano alla perfezione!!!
Bene, dopo la pratica torniamo a parlare di teoria, analizzando le varie opzioni legate a questa nuova caratteristica. In precedenza abbiamo semplicemente attivato la deduplication, accettando così le impostazioni di default, tuttavia esistono diverse opzioni settabili per la proprietà dedup:
- off: dedup disattivata;
- on: dedup attivata, il blocchi vengono controllati con l'algoritmo SHA256;
- verify: come sopra l'algoritmo di hash è sempre SHA256, ma in caso di rilevamento di un blocco uguale, viene verificata l'esattezza bit a bit;
- fletcher4,verify: viene usato l'algoritmo di hash "fletcher4", che risulta essere molto più veloce ma che produce con maggiore probabilità delle duplicazioni di chiavi e quindi è per questo che la verifica è obbligatoria.
Non è detto che in futuro vengano implementati anche altri algoritmi per la verifica delle duplicazioni dei blocchi, il consiglio è quello di attivare la deduplication con l'opzione verify per stare tranquilli :)
Nessun commento:
Posta un commento