![无法在 btrfs 中的文件上设置压缩标志](https://linux22.com/image/11065/%E6%97%A0%E6%B3%95%E5%9C%A8%20btrfs%20%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%8A%E8%AE%BE%E7%BD%AE%E5%8E%8B%E7%BC%A9%E6%A0%87%E5%BF%97.png)
我在 CentOS 7 上有以下 btrfs 文件系统:
mount | grep btrfs
/dev/sdc on /everything type btrfs (rw,relatime,compress=zlib,space_cache,subvolid=5,subvol=/)
当我尝试设置压缩标志时,它失败:
# LANG=C chattr +c /everything/filelists.xml
chattr: Invalid argument while setting flags on /everything/filelists.xml
我正在使用这个版本的 btrfs:
btrfs-progs-4.9.1-1.el7.x86_64
我在日志文件中没有看到错误。
这是一个错误还是我错过了什么?
答案1
如果没有关于文件系统本身的更多上下文,我无法确定,但我相信设置标志的尝试被拒绝,因为它对于compress=
挂载选项来说是多余的。这不是我所知道的任何版本的 BTRFS 上的标准行为,但是 RHEL(以及扩展的 CentOS)使用了一个非常奇怪的内核,该内核基于当前古老的基本版本,并带有一堆精心挑选的新补丁,并且向后移植,所以它是真的很难确切地说出它们的内核会做什么。
设置compress=
或compress-force=
(你可能实际上想要第二个,否则 BTRFS 很容易放弃压缩文件)安装选项将设置默认对于该卷。换句话说,挂载compress=zlib
(就像你一样)告诉 BTRFS 忽略压缩标志并只压缩该卷上所有新写入的数据。唯一的例外是:
compress=none
,它不会忽略压缩标志。- 该
btrfs filesystem defrag
命令可以覆盖正在进行碎片整理的文件的压缩(例如,在我工作的地方,我们挂载卷compress=none
(因此新数据不会被压缩),然后对所有未修改的文件运行每周碎片整理传递自最后一次将它们压缩到位以来)。