在 BTRFS 文件系统上,您可以使用 file 属性禁用文件的 CoW C
,如下所示:
chattr +C filename
我预计这也适用于 ZFS,因为它也是一个 CoW 文件系统,但无法设置该属性(也许 ZFS 没有 CoW 就无法运行)。
那么哪些文件系统完全支持C
文件属性呢?XFS 或 BCacheFS 等其他文件系统是否也遵循该标志,或者 BTRFS 是唯一这样做的文件系统吗?
上下文:我创建了一个安装虚拟机的程序,当它检测到主机文件系统是 BTRFS 时,它会为包含虚拟磁盘映像的文件夹禁用 CoW(因为否则会引入性能问题)。我将相同的代码应用于 ZFS、XFS 和 BCacheFS,但必须删除 ZFS,因为它无法设置属性。现在我怀疑是否也需要排除 XFS 和 BCacheFS。
chattr
的C
属性对应于FS_NOCOW_FL
内核 UAPI 中的标志(在 中linux/fs.h
定义)。因此,支持此属性的唯一文件系统是那些处理该标志的文件系统:目前,这是 BTRFS 和 F2FS。还要注意,对于检索和设置属性,文件系统支持可能有所不同。没有直接的方法来检查 BTRFS 的这一点,您需要阅读
fs/btrfs/ioctl.c
- 它支持设置和检索C
属性。对于 F2FS 来说更容易看到:该C
属性无法设置,它仅用于识别固定文件(无法被垃圾收集的文件 - F2FS 是日志结构文件系统)。