我应该为 /var/lib/docker 禁用 btrfs CoW 吗?

Eth*_*roy 5 btrfs docker

我发现对于大文件(例如 PostgreSQL 数据库的数据目录)使用 btrfs CoW 功能并不是一个好主意。

由于我使用 docker 作为数据库,我现在问自己,是否应该对整个/var/lib/docker目录禁用 CoW。但我不确定,因为docker的分层文件系统是否利用了这个功能?

或者是否可以仅针对某些特定卷禁用 CoW?

sho*_*hok 1

我不认为docker直接插入 BTRFS(或任何文件系统)CoW 行为;相反,它可以使用快照和/或引用链接来避免复制整个容器映像。

虽然禁用 CoW 肯定有利于性能,但请注意:

  • 禁用它意味着没有数据校验和,因此无法防止数据丢失;
  • 对卷进行快照会自动重新启用 CoW;
  • reflink 将不再起作用;
  • 现有文件将保持启用 CoW(直到您删除并重新创建它们)。

虽然对于数据库(如 PostgreSQL),上述几点可能不是问题(即:数据校验和在数据库记录级别完成,快照由事务层提供),但对于缺少这些功能的 VM 或容器可能会出现问题。

无论如何,我真的建议您阅读有关 nodatacow 的 BTRFS 常见问题解答

  • 当在 btrfs 文件系统之上使用 docker 时,它会创建一个名为“/var/lib/docker/btrfs”的目录,其中包含 BTRFS 子卷。所以这看起来像是 docker 插入了文件系统的特定功能。 (2认同)