如何防止 btrfs 压缩 /var

lza*_*zap 5 compression btrfs

我刚刚安装了 Fedora 33 的新实例,并通过compress=zstd:3挂载选项为我的根卷启用了压缩。我启用了 的/usr压缩chattr +x /usr

我想禁用/var目录压缩,根据https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs(5)#FILE_ATTRIBUTES我应该能够使用chattr +X /var,但 F33 的工具不理解这一点选项。在https://btrfs.wiki.kernel.org/index.php/Compression中有一个命令btrfs property set /var compression "",但我无法判断这是否有效。我的文件系统上的任何文件都没有设置“压缩”属性,这没有意义。

我假设 btrfs 在使用compress选项安装时默认自动压缩所有文件,但默认情况下它看起来只压缩显+c式设置(“压缩”)标志的文件和目录。

foo*_*oot 1

根据当前关于压缩的 wiki 页面:

我可以设置每个子卷的压缩吗?

目前没有,这是有计划的。您可以通过在子卷目录上启用压缩来模拟这一点,文件/目录将继承压缩标志。

另外根据维基页面:

对新写入的数据进行压缩:

  1. 总是 -- 如果文件系统是使用 -o compress-force 挂载的
  2. never -- 如果为每个文件/目录设置了 NOCOMPRESS 标志
  3. 如果可能的话——如果设置了 COMPRESS 每个文件标志(又名 chattr +c),但它最终可能会转换为 NOCOMPRESS
  4. 如果可能的话 -- 如果指定了 -o compress 安装选项

请注意,使用 -o compress 挂载不会设置 +c 文件属性。

因此,如果您不希望压缩目录,您有两个选择:

  • 位于未使用压缩选项安装的文件系统(不仅仅是子卷)上,并且没有设置用于压缩它的属性。
  • 位于设置了压缩选项(但不是强制)的文件系统上,并且设置了 NOCOMPRESS 属性。

chattr 属性当前仅启用压缩(使用 +c 标志)。没有禁用压缩的标志。X 标志做了不同的事情。

如果你想禁用压缩,你应该使用btrfs property可以打开/关闭压缩的命令:

btrfs property set <file> compression none

这应该适用于所有新写入文件/目录的数据。

也来自维基:

请注意,在 v5.14 之前的内核版本中,您可以通过传递空字符串来禁用压缩,而不是明确提及 none 或 no。从内核版本 5.14 开始,空字符串将重置为默认行为。

因此,在您的系统上将压缩设置为“”应该禁用压缩,但在更新的内核上您应该传递 none/no。

另外,根据 wiki,没有内置工具来检查数据的压缩,但您可以使用compsize来检查新写入的数据。