我已经阅读了很多关于规划 ZFS 重复数据删除的 RAM 要求的信息。我刚刚升级了我的文件服务器的 RAM 以支持 ZFS zvols 上的一些非常有限的重复数据删除,我无法在其上使用快照和克隆(因为它们被格式化为不同的文件系统的 zvols)但将包含很多重复的数据。
我想确保我添加的新 RAM 将支持我打算执行的有限重复数据删除。在计划中,我的数字看起来不错,但我想确定。
如何知道我的实时系统上 ZFS 重复数据删除表 (DDT) 的当前大小?我阅读了这个邮件列表线程,但我不清楚他们是如何获得这些数字的。(zdb tank
如有必要,我可以发布输出,但我正在寻找可以帮助其他人的通用答案)
您可以使用该
zpool status -D poolname
命令。输出类似于:
重要的字段是总分配块和总引用块。在上面的示例中,我的重复数据删除率很低。40.2G 存储在 37.5G 空间中的磁盘上。或 235 万块空间中的 251 万块。
要获取表格的实际大小,请参见:
DDT 条目 2459286,磁盘大小 481,核心大小 392
2459286*392=964040112 bytes 除以 1024 和 1024 得到:919.3MB in RAM。
在阅读了原始电子邮件线程和@ewwhite澄清它的答案后,我认为这个问题需要一个更新的答案,因为上面的答案只涵盖了一半。
例如,让我们使用我的池中的输出。我使用了命令
zdb -U /data/zfs/zpool.cache -bDDD My_pool
。在我的系统上,我需要额外的-U
arg 来定位池的 ZFS 缓存文件,FreeNAS 将其存储在与正常不同的位置;您可能需要也可能不需要这样做。zdb
一般不先尝试-U
,如果遇到缓存文件错误,再使用find / -name "zpool.cache"
或类似的方式来定位它需要的文件。这是我的实际输出,我在下面进行了解释:
这一切意味着什么,并计算出实际的重复数据删除表大小:
输出显示了两个子表,一个用于存在重复的块 ( DDT-sha256-zap-duplicate ),另一个用于不存在重复的块 ( DDT-sha256-zap-unique )/。它们下面的第三个表格给出了这两个表格的总和,下面有一个汇总行。仅查看“总计”行和摘要为我们提供了我们需要的内容:
让我们做一些数字运算。
块计数是这样的:与重复块相关的条目数 = 771295,与唯一块相关的条目数 = 4637966,DDT 表中的总条目应为 771295+4637966 = 5409261。因此,以百万为单位的块数(二进制百万也就是说!)将是 5409261 / (1024^2) = 515.8 万。在总结中,我们发现总共有5.16M 块。
需要的 RAM 是这样工作的:重复块的 771295 个条目每个占用 RAM 中的 165 个字节,唯一块的 4637966 个条目每个占用 RAM 中的 154 个字节,因此重复数据删除表所需的总 RAM = 841510439 字节 = 841510439 / (1024^2) MBytes = 803 MB = 0.78 GB RAM。
(使用的磁盘大小可以用同样的方式计算,使用“磁盘大小”数字。显然 ZFS 正在尝试有效地使用磁盘 I/O 并利用 DDT 占用的磁盘空间这一事实。这通常不是问题。所以看起来 ZFS 只是为每个条目分配一个完整的 512 字节扇区,或者类似的东西,而不是仅仅 154 或 165 字节,以保持效率。这可能不包括允许多个保存在磁盘上的副本,ZFS 通常会这样做。)
存储的数据总量以及重复数据删除的好处:从 DDT 的总统计数据来看,仅使用磁盘上分配的 578 GB(“578 G”)存储空间就可以存储 715 GB(“715 G”)的数据。所以我们的去重空间节省率是(715 GB 数据)/(去重后使用的 578 GB 空间) = 1.237 x,这就是总结告诉我们的(“去重 = 1.24”)。