在 zfs 上强制更新校验和?

841*_*104 13 zfs zfsonlinux

我最近将我的checksum一个非重复 zfs 文件系统上的属性更改为sha256from on(fletcher4) 以更好地支持重复复制流的发送,如在此命令中所示zfs send -DR -I _starting-snaphot_ _ending-snapshot_

但是,zfs 联机帮助页有关于以下内容的说明send -D

无论数据集的 dedup 属性如何,都可以使用此标志,但如果文件系统使用支持 dedup 的校验和(例如 sha256),则性能会好得多。

zfs 联机帮助页还说明了有关该checksum属性的信息:

更改此属性仅影响新写入的数据。

我不想相信 fletcher4。权衡是与 SHA256 不同,fletcher4 不是伪随机哈希函数,因此不能相信不会发生冲突。因此,它仅适用于与 'verify' 选项结合使用的重复数据删除,该选项可检测并解决散列冲突。

如何更新文件系统的校验和,最好不要使系统脱机?

the*_*bit 11

要更改已写入数据的属性(压缩、重复数据删除或校验和),zfs 方法是通过zfs send | zfs receive序列运行数据。很显然,你不需要为脱机系统对于这一点,但你需要

  1. 您的 zpool/系统上有足够的资源来保存相关数据集的两个重复数据集的副本
  2. 数据集的停机时间,因为您需要销毁它或在过程中重命名它
  3. 有足够的时间和耐心完成手术

由于您已经对 zpool 使用重复数据删除,因此zfs send | zfs receive在与源相同的池上运行目标将仅使用新写入的元数据块所需的空间。但是要准备好复制需要一段时间 - 重复数据删除可能会非常慢,尤其是当您没有足够的 RAM 将整个重复数据删除表保存在 RAM 中时。

您显然需要停止所有写入操作以创建数据集的最终权威副本,但可以通过先复制快照、停止所有写入并zfs send -i | zfs receive在最后一步执行增量操作来最大程度地减少停机时间。