Btrfs+LXC:有什么方法可以显示托管 LXC 容器的配额子卷的粗略估计可用空间?

Btrfs+LXC:有什么方法可以显示托管 LXC 容器的配额子卷的粗略估计可用空间?

我正在尝试使用 Btrfs 作为后备存储来使用 LXC。 Btrfs 允许轻松进行快照/重复数据删除,并且非常适合启动多个“伪虚拟机”。

我遇到的问题是我测试的一些应用程序将大量数据转储到磁盘。我试图限制 Btrfs 卷的使用,因此我为 LXC 为特定容器创建的子卷分配了配额。

该应用程序确实有一个故障安全测试 - 当它发现写入的文件系统上的可用磁盘空间少于一定量(例如 512MB)时,它开始清除旧日志,为新日志腾出空间。

问题是,即使应用了配额,LXC 根文件系统仍然报告主机 Btrfs 文件系统的完整大小。

示例:如果我的 Btrfs 文件系统为 250GB,并且我使用-B btrfs-s选项创建了一个 LXC 容器,那么现在 Btrfs 文件系统中有一个子卷,代表这个新容器的根。然后我想限制容器占用的空间,因此我对容器应用了 32GB 的 qgroup 限制。然而,df当在 LXC 容器中执行该命令时,仍然显示文件系统总大小为 250GB,以及大致基于主机文件系统实际可用空间的可用空间;即配额限制不会显示到df

这意味着我的日志应用程序可以填满整个配额,并且仍然相信它有 200+GB 的空间可供写入,因此它不会回收旧数据。最终,超出了配额,并且由于 COW 文件系统的限制,我必须禁用配额并手动删除旧日志 - 如果仍然以相同大小强制执行配额,则无法删除数据,因为那里没有额外的空间用于删除操作。

我已经阅读了足够多的内容,并且对 Btrfs 有足够的了解,明白“自由空间”的概念在 Btrfs 中令人困惑,并且可能是一个挑战,但是有没有什么方法可以从 LXC 中获得“大概”的数字还剩多少配额空间?优选地,这应该由用于获取磁盘可用空间(df使用的)的标准 API 来完成,因为这意味着它也适用于访问文件系统并需要知道其大致可用空间的其他应用程序。

如果我可以想象得到 1GB 左右的实际可用空间(由配额提供),这足以让我调整日志过期参数,以便文件系统不会超过配额。

答案1

这是我发现的处理 btrfs 子卷空间分配的最佳工具: 获取 BTRFS 快照的大小 | PoisonPacket 博客

所有积分均归凯尔·阿格罗尼克(该脚本的作者)所有

相关内容