是否应该在数据库服务器的 btrfs 中使用 nodatacow 挂载选项?它是否禁用位损坏校验和?

Gre*_*reg 5 filesystems btrfs

我正在考虑在数据库服务器的 raid 10 配置中实现 btrfs,我对 nodatacow 选项感到困惑。

根据https://btrfs.wiki.kernel.org/index.php/Gotchas:

具有大量随机写入的文件可能会变得严重碎片化(10000 多个盘区),从而导致 HDD 上的垃圾以及具有 SSD 或大量 RAM 的系统上的 CPU 负载数秒的过多峰值。在服务器和工作站上,这会影响数据库和虚拟机映像。nodatacow 挂载选项可能在这里有用,并带有相关的陷阱。

然后文档指出nodatacow选项是:

不要对新创建的文件进行写时复制数据,现有文件不受影响。这也会关闭校验和!IOW,nodatacow 意味着 nodatasum。datacow 用于确保用户可以访问文件的旧版本或文件的较新版本。datacow 确保我们从未将部分更新的文件写入磁盘。nodatacow 通过直接覆盖数据(如 ext[234])来略微提升性能,代价是在系统故障时可能会获得部分更新的文件。性能提升通常小于 5%,除非工作负载是随机写入大型数据库文件,而这种差异可能会变得非常大。注意:关闭压缩!

这是否意味着应该为数据库服务器中的磁盘选择此选项,并且使用此选项将禁用损坏校验和?

Aus*_*arn 2

是的,这对于数据库来说通常是一个好主意,是的,它确实禁用了校验和(出于同样的原因,它禁用了内联压缩,并且一旦实现,也可能会禁用加密)。

也就是说,通常最好不要使用它挂载整个文件系统,而是在通过运行创建数据库文件之前标记将存储数据库文件的目录chattr +C。该特定属性与挂载选项具有相同的效果nodatacow,但基于每个文件进行操作,并且是从创建文件的目录继承的。