强制更新 zfs 上的校验和?

强制更新 zfs 上的校验和?

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

但是,zfs 手册页有这样的说法send -D

无论数据集的重复数据删除属性如何,都可以使用此标志,但如果文件系统使用具有重复数据删除功能的校验和(例如 sha256),性能会好得多。

zfs 手册页也说明了有关该checksum属性的内容:

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

我不想相信fletcher4。缺点是,与 SHA256 不同,fletcher4 不是伪随机哈希函数,因此不能相信它不会发生冲突。因此,它只适合与“verify”选项结合使用,以检测和解决哈希冲突。

如何更新文件系统的校验和,最好不要离线系统?

答案1

要更改已写入数据的属性(无论是压缩、重复数据删除还是校验和),zfs 方法是按顺序运行数据zfs send | zfs receive。显然,您不需要为此离线系统,但您将要需要

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

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

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

相关内容