Après avoir lu le fil de discussion d'origine et la réponse de @ ewwhite qui l'a clarifié, je pense que cette question a besoin d'une réponse mise à jour, car la réponse ci-dessus n'en couvre que la moitié.
À titre d'exemple, utilisons la sortie sur mon pool. J'ai utilisé la commande zdb -U /data/zfs/zpool.cache -bDDD My_pool
. Sur mon système, j'avais besoin de l' -U
argument supplémentaire pour localiser le fichier de cache ZFS pour le pool, que FreeNAS stocke dans un emplacement différent de la normale; vous pouvez ou non avoir besoin de le faire. Essayez généralement zdb
sans d' -U
abord, et si vous obtenez une erreur de fichier cache, utilisez find / -name "zpool.cache"
ou similaire pour localiser le fichier dont il a besoin.
C'était ma sortie réelle et je l'ai interprétée ci-dessous:
DDT-sha256-zap-duplicate: 771295 entries, size 512 on disk, 165 in core
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
2 648K 75.8G 68.6G 68.8G 1.39M 165G 149G 149G
4 71.2K 8.07G 6.57G 6.62G 368K 41.7G 34.1G 34.3G
8 28.1K 3.12G 2.34G 2.36G 281K 31.0G 23.1G 23.4G
16 5.07K 424M 232M 241M 110K 9.10G 5.06G 5.24G
32 1.09K 90.6M 51.8M 53.6M 45.8K 3.81G 2.21G 2.28G
64 215 17.0M 8.51M 8.91M 17.6K 1.39G 705M 739M
128 38 2.12M 776K 872K 6.02K 337M 118M 133M
256 13 420K 21.5K 52K 4.63K 125M 7.98M 18.5M
512 3 6K 3K 12K 1.79K 3.44M 1.74M 7.16M
1K 1 128K 1K 4K 1.85K 237M 1.85M 7.42M
2K 1 512 512 4K 3.38K 1.69M 1.69M 13.5M
DDT-sha256-zap-unique: 4637966 entries, size 478 on disk, 154 in core
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 4.42M 550G 498G 500G 4.42M 550G 498G 500G
DDT histogram (aggregated over all DDTs):
bucket allocated referenced
______ ______________________________ ______________________________
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 4.42M 550G 498G 500G 4.42M 550G 498G 500G
2 648K 75.8G 68.6G 68.8G 1.39M 165G 149G 149G
4 71.2K 8.07G 6.57G 6.62G 368K 41.7G 34.1G 34.3G
8 28.1K 3.12G 2.34G 2.36G 281K 31.0G 23.1G 23.4G
16 5.07K 424M 232M 241M 110K 9.10G 5.06G 5.24G
32 1.09K 90.6M 51.8M 53.6M 45.8K 3.81G 2.21G 2.28G
64 215 17.0M 8.51M 8.91M 17.6K 1.39G 705M 739M
128 38 2.12M 776K 872K 6.02K 337M 118M 133M
256 13 420K 21.5K 52K 4.63K 125M 7.98M 18.5M
512 3 6K 3K 12K 1.79K 3.44M 1.74M 7.16M
1K 1 128K 1K 4K 1.85K 237M 1.85M 7.42M
2K 1 512 512 4K 3.38K 1.69M 1.69M 13.5M
Total 5.16M 638G 576G 578G 6.64M 803G 712G 715G
dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39
Ce que tout cela signifie et calcul de la taille réelle de la table de déduplication:
La sortie affiche deux sous-tables, une pour les blocs où il existe un doublon ( DDT-sha256-zap-duplicate ) et une pour les blocs où aucun doublon n'existe ( DDT-sha256-zap-unique ) /. Le troisième tableau ci-dessous donne un total global pour les deux, et il y a une ligne récapitulative en dessous. En regardant uniquement les lignes "totales" et le résumé nous donne ce dont nous avons besoin:
Taille DDT pour tous les blocs qui apparaissent plusieurs fois ("DDT-sha256-zap-duplicate") :
771295 entries, size 512 bytes on disk, 165 bytes in RAM ("core")
Taille DDT pour les blocs uniques ("DDT-sha256-zap-unique") :
4637966 entries, size 478 bytes on disk, 154 bytes in RAM ("core")
Statistiques DDT totales pour toutes les entrées DDT, duplicata + unique ("Histogramme DDT agrégé sur tous les DDT") :
allocated referenced
(= disk space actually used) (= amount of data deduped
into that space)
______ ______________________________ ______________________________
blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
Total 5.16M 638G 576G 578G 6.64M 803G 712G 715G
Résumé :
dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39
Faisons quelques calculs.
Le nombre de blocs fonctionne comme ceci: Nombre d'entrées liées aux blocs en double = 771295, nombre d'entrées liées aux blocs uniques = 4637966, le nombre total d'entrées dans la table DDT doit être 771295 + 4637966 = 5409261. Ainsi, le nombre de blocs en millions (millions binaires c'est-à-dire!) serait 5409261 / (1024 ^ 2) = 5,158 millions. Dans le résumé, nous constatons qu'il y a au total 5,16 millions de blocs .
La RAM nécessaire fonctionne comme ceci: les 771295 entrées pour les blocs en double occupent chacune 165 octets en RAM, et les 4637966 entrées pour les blocs uniques occupent chacune 154 octets en RAM, donc la RAM totale nécessaire pour la table dedup en ce moment = 841510439 octets = 841510439 / (1024 ^ 2) Mo = 803 Mo = 0,78 Go de RAM .
(La taille sur disque utilisée peut être calculée de la même manière, en utilisant les chiffres de "taille sur disque". Clairement, ZFS essaie d'utiliser efficacement les E / S disque et profite du fait que l'espace disque occupé par le DDT n'est pas n'est normalement pas un problème. Il semble donc que ZFS alloue simplement un secteur complet de 512 octets pour chaque entrée, ou quelque chose dans ce sens, au lieu de seulement 154 ou 165 octets, pour le garder efficace. Cela pourrait ne pas inclure de tolérance pour plusieurs copies conservées sur le disque, ce que fait généralement ZFS.)
La quantité totale de données stockées et les avantages de la déduplication: à partir des statistiques DDT totales, 715 Go ("715G") de données sont stockées en utilisant seulement 578 Go ("578G") de stockage alloué sur les disques. Notre taux d'économie d'espace de déduplication est donc de (715 Go de données) / (578 Go d'espace utilisé après le dédoublonnage) = 1,237 x, ce que nous dit le résumé ("dedup = 1,24").