Btrfs:压缩和 nodatacow 优先级 + 自动化

Btrfs:压缩和 nodatacow 优先级 + 自动化

我安装了一个/启用了压缩的 btrfs 分区:

mount -o subvol=@,defaults,noatime,nodiratime,compress=zstd,space_cache=v2 /dev/mapper/archlinux /mnt

我想在某些文件夹上禁用 CoW 机制,例如:

  • 包含我的 VM 磁盘的文件夹
  • 任何可能包含 SQLite 数据库的文件夹(主要用于浏览器)

这是什么btrfs 文档状态 :

如果启用压缩,则禁用 nodatacow 和 nodatasum。

但它也指出

如果启用 nodatacow 或 nodatasum,则会禁用压缩。

我同意它们是互斥的这一事实,但是我确实想知道如果我设置chattr +C为文件夹,哪一个将优先。我的改变会永久有效吗?或者当我使用该选项重新安装分区时,它会在下次启动时被覆盖吗compress?我的直觉告诉我,这chattr +C将优先,但我找不到任何文件可以证实这一点。

第二个问题是:有没有办法在所有新创建的 SQLite 数据库上自动禁用 CoW?起初我想编写一个 systemd 计时器,它会扫描整个文件系统以查找 SQLite 数据库并设置chattr +C对其进行设置。但随后在chattr 手册页我读了以下内容:

如果它设置在已经有数据块的文件上,则分配给该文件的块何时完全稳定是不确定的。

所以基本上我不应该chattr +C在现有的非空文件上使用。有没有办法连接到文件系统,以便任何以 SQLite 魔术字节结尾\.(sqlite|db)或具有 SQLite 魔术字节的文件都不会使用 CoW ?或者我别无选择,只能在安装目标应用程序之前手动创建 NoCoW 文件夹?我不一定知道 X 或 Y 应用程序是否正在使用 SQLite 后端,每次我意识到应用程序正在使用 SQLite 时,删除所有应用程序数据来设置 NoCoW 会非常不方便。您建议如何以某种方式自动化此过程?

编辑:

您认为发行版维护者有责任chattr +C在安装使用 SQLite 的软件包时进行设置吗?

相关内容