我想更改recordsize
现有 ZFS 数据集的属性。
手册页指出:
更改文件系统的记录大小只会影响后来创建的文件;现有文件不受影响。
因此,简单地更改recordsize
属性只会对新创建的文件产生影响。我希望现有文件也能利用新的记录大小。
zfs send
数据集是否会将zfs receive
现有文件转换为新的记录大小,或者我是否必须手动将文件从数据集中复制出来然后再复制回来?
答案1
如果您想利用新的记录大小,则需要将数据复制并重新复制到文件系统。
但我不确定你的问题是什么。
答案2
我知道回复晚了,但这里有几点建议:
zfs receive
有一个-o recordsize
选项可以让您覆盖接收端的值。我认为同步 ZFS 数据集最容易实现,方法是使用 syncoid 的帮助(它是萨诺伊德套件)。例如,以下相当简单的命令行会将给定的数据集从现有的 Zpools 复制
apool
到,同时在接收端bpool
强制将所需的大小设置为 64k:recordsize
syncoid --recursive --recvoptions="o recordsize=64k" apool/DATASET bpool/DATASET
syncoid
是 的包装器zfs send/receive
,它根据自己管理的快照进行操作;因此您可以在系统运行时使用它,也可以发送增量。 --recvoptions
传递给zfs receive
。此选项仅记录在syncoid
的手册页中,而不是 Github 页面上,但它的工作方式与预期完全一致。
答案3
这是一个旧的回复,但是您不能使用zfs send
+zfs recv
来更改记录大小。
我被某个地方的阅读所欺骗,它确实会改变记录大小,然后我开始从事一个项目,我需要阅读大量有关流格式的内容,并发现它总是引用流中已经存在的记录大小的对象 ID。自然,您可能会认为这不是问题,它可以在接收端进行更改,但由于它支持增量更新,因此当它引用块 ID + 块偏移量时,如果不将原始信息存储在 ZFS 中的某个位置,就不可能存储 FREE 命令,而事实并非如此。