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