概括:ZFS 发送/接收是否始终接收发送数据集的精确复制 - 包括匹配的数据集属性 - 或者是否可以接收到具有与接收数据(校验和之后)不同的属性(记录大小、压缩等)的新创建的数据集验证等)然后可以写入到。
例如,如果我收到一个(非增量)数据集,其对象最初是用 a 编写的recordsize=128K
,并接收到新创建的数据集,zfs receive
但该数据集要么指定选项-o recordsize=1M
,要么继承自当前值为 的父数据集recordsize=1M
,则对象将在我的新数据集中,记录大小为1M
,或者对象必须被写入接收数据集的精确“副本”?
zfs get recordsize tank/files # returns: 128K
# Set parent of receiving dataset to 1M
zfs set recordsize=1M freezer
# Also set at receive time
zfs send tank/files@transfer | zfs receive -o recordsize=1M freezer/files
我的问题本质上是:
# Query recordsize of objects as written in freezer
???
我知道检查新数据集的记录大小本身并不是一个答案,因为这只会报告数据集属性是什么现在设置为,它本身并没有说明任何先前写入的记录大小。我尝试用类似的方法直接检查对象
zdb -dd freezer
但我的 zfs 版本(在 FreeBSD 9 上)似乎不接受这一点。
man zfs
建议只有“设置一次”属性必须匹配(区分大小写、标准化、仅 utf8),但我不清楚在一般情况下对象是如何编写的。我还检查了 docs/google,但如果不研究 zfs 内部结构,似乎无法获得有关此行为的明确答案。
答案1
简而言之 - 不。记录大小无法通过发送/接收操作更改。其他一些选项可以,但不能记录大小。