ZFS 在更改数据集属性时发送/接收

ZFS 在更改数据集属性时发送/接收

概括: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

简而言之 - 不。记录大小无法通过发送/接收操作更改。其他一些选项可以,但不能记录大小。

相关内容