我的ZFS重复数据删除表目前有多大?

我已经阅读了大量有关ZFS重复数据删除规划RAM要求的信息。 我刚刚升级了我的文件服务器的内存,以支持一些非常有限的ZFS zvols重复数据删除,我不能使用快照和克隆(因为他们是zvols格式化为不同的文件系统),但将包含很多重复的数据。

我想确保我添加的新RAM将支持我打算进行的有限重复数据删除。 在规划中,我的数字看起来不错,但我想确定一下。

我怎样才能知道我现场系统上的ZFS重复数据删除表(DDT)的当前大小? 我阅读这个邮件列表线程,但我不清楚他们如何获得这些数字。 (如果需要,我可以发布zdb tank的输出,但我正在寻找一个可以帮助其他人的通用答案)

    您可以使用zpool status -D poolname命令。

    输出看起来类似于:

     root@san1:/volumes# zpool status -D vol1 pool: vol1 state: ONLINE scan: scrub repaired 0 in 4h38m with 0 errors on Sun Mar 24 13:16:12 2013 DDT entries 2459286, size 481 on disk, 392 in core bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 2.23M 35.6G 19.0G 19.0G 2.23M 35.6G 19.0G 19.0G 2 112K 1.75G 1005M 1005M 240K 3.75G 2.09G 2.09G 4 8.03K 129M 73.8M 73.8M 35.4K 566M 324M 324M 8 434 6.78M 3.16M 3.16M 4.61K 73.8M 35.4M 35.4M 16 119 1.86M 811K 811K 2.33K 37.3M 15.3M 15.3M 32 24 384K 34.5K 34.5K 1.13K 18.1M 1.51M 1.51M 64 19 304K 19K 19K 1.63K 26.1M 1.63M 1.63M 128 7 112K 7K 7K 1.26K 20.1M 1.26M 1.26M 256 3 48K 3K 3K 1012 15.8M 1012K 1012K 512 3 48K 3K 3K 2.01K 32.1M 2.01M 2.01M 1K 2 32K 2K 2K 2.61K 41.7M 2.61M 2.61M 2K 1 16K 1K 1K 2.31K 36.9M 2.31M 2.31M Total 2.35M 37.5G 20.1G 20.1G 2.51M 40.2G 21.5G 21.5G 

    重要的领域是分配块和参考块。 在上面的例子中,我有一个很低的重复数据删除率。 40.2G存储在37.5G空间的磁盘上。 在235万块的空间里面,有251万块。

    要获得表的实际大小,请参阅:

    DDT条目2459286,磁盘上的大小481,内核中的392

    2459286 * 392 = 964040112字节除以1024和1024得到: 919.3MB的RAM

    在阅读原来的电子邮件主题和@ ewwhite的答案后,我认为这个问题需要一个更新的答案,因为上面的答案只覆盖了一半。

    作为一个例子,让我们使用我的池中的输出。 我使用了命令zdb -U /data/zfs/zpool.cache -bDDD My_pool 。 在我的系统上,我需要额外的-U arg来定位池的ZFScaching文件,FreeNAS存储在与正常不同的位置; 你可能会也可能不需要那样做。 通常, zdb不使用-U ,然后使用find / -name "zpool.cache"或类似命令find它所需的文件,然后如果遇到caching文件错误,则尝试使用find / -name "zpool.cache"

    这是我的实际输出,我已经解释如下:

     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 

    这是什么意思,并制定出实际的重复数据删除表大小:

    输出显示了两个子表,一个用于存在重复的块( DDT-sha256-zap-duplicate ),另一个用于存在不存在重复的块( DDT-sha256-zap-unique )/。 下面的第三个表格给出了这两者的总体总和,下面有一个汇总行。 只看“总”行和总结给我们我们需要的东西:

    所有出现多次的块的DDT大小 (“DDT-sha256-zap-duplicate”)
    771295 entries, size 512 bytes on disk, 165 bytes in RAM ("core")

    DDT大小为独特的块 (“DDT-sha256-zap-unique”)
    4637966 entries, size 478 bytes on disk, 154 bytes in RAM ("core")

    所有滴滴涕条目的总DDT统计数据,重复+唯一 (“在所有DDT上汇总的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 

    总结
    dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39

    我们来做一些数字处理。

    • 块计数如下:与重复块相关的条目数= 771295,与唯一块相关的条目数= 4637966,DDT表中的总条目应该是771295 + 4637966 = 5409261。因此,块的数量以百万计那就是!)将是5409261 /(1024 ^ 2)= 518.8万。 在总结中,我们发现总共5.16M个块

    • RAM需要这样工作:重复块的771295个条目在RAM中占用165个字节,4637966个唯一块的条目每个在RAM中占用154个字节,所以现在重复数据删除表所需的总RAM = 841510439 bytes = 841510439 / (1024 ^ 2)MBytes = 803 MB = 0.78 GB的RAM

      (所用的磁盘大小可以用同样的方法,使用“磁盘大小”数字来计算,很明显,ZFS试图有效地使用磁盘I / O,并利用了DDT占用的磁盘空间这通常是一个问题,所以看起来ZFS只是简单地为每个条目分配一个完整的512字节扇区,或者沿着这些行分配一个完整的512字节扇区,而不是只有154或者165字节,这样可以保持高效。磁盘上的副本,ZFS通常会这样做。)

    • 存储的数据总量以及从中扣除的好处:从总DDT统计数据中,仅使用磁盘上分配的存储的578 GB(“578G”)存储了715 GB(“715G”)的数据。 因此,我们的重复数据删除空间节省率(715 GB数据)/(删除578 GB空间后使用) = 1.237 x,这是总结告诉我们的(“重复数据删除= 1.24”)。