![Btrfs 文件系统上具有 No_COW 文件属性的文件是否保留数据校验和?](https://linux22.com/image/92287/Btrfs%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%85%B7%E6%9C%89%20No_COW%20%E6%96%87%E4%BB%B6%E5%B1%9E%E6%80%A7%E7%9A%84%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E4%BF%9D%E7%95%99%E6%95%B0%E6%8D%AE%E6%A0%A1%E9%AA%8C%E5%92%8C%EF%BC%9F.png)
假设我们不调用额外的挂载选项,例如诺达塔牛和节点数据集。仅在以下时间操作文件属性lsattr
级别,由/控制chattr
。
- 是否设置没有_COW在一个文件上(
chattr +C
)意味着禁用数据校验和?与挂载选项的行为方式相同(诺达塔牛暗示节点数据集)。 - 它可以仅对新写入的范围禁用校验和并保留读取现有的范围吗?
答案1
1. 是的,设置没有_COW在空的文件确实意味着禁用它的数据校验和。
这是因为您无法自动更新数据和校验和——在写入过程中的某个时刻,它们必须不一致。这被认为是一件坏事。
环境没有_COW在非空当前无法创建文件(参见#2)。
结论是,在每个文件的基础上禁用 CoW 也会丢失此类文件的校验和正确性。这对于 Btrfs 的新用户来说不是很明显,我认为必须添加到Btrfs 维基。
2. 不,没有_COW不能设置在非空文件,因此chattr +C
无法触发范围的校验和。
您只能在没有范围的文件上有效地设置 +C。
因此根据定义,该文件中不会有任何预先存在的校验和范围。
这个答案是基于以下内容的总结Btrfs 邮件列表讨论。