我无法确定如何获取当前在 btrfs 子卷上设置的配额限制。 配额上的 btrfs wiki似乎没有显示这一点。
这是我认为我知道的:
- 设置配额:
btrfs qgroup limit 21G /path
- 检查已用空间:
btrfs qgroup show /path
但是如何检查已经设置的限制?
我无法确定如何获取当前在 btrfs 子卷上设置的配额限制。 配额上的 btrfs wiki似乎没有显示这一点。
这是我认为我知道的:
btrfs qgroup limit 21G /path
btrfs qgroup show /path
但是如何检查已经设置的限制?
使用选项
-r
和-e
:我创建了一个简单的脚本,它将显示指定路径中每个子卷的配额限制以及已用空间。语法非常简单:
要打印所有子卷的已用空间,请使用 -a 标志:
不要忘记为脚本添加执行权限。
脚本:
它将首先打印传统子卷和快照卷下方。样本输出:
正如我们所说,btrfs 在这方面被设计破坏了。
btrfs-progs 目前没有显示哪个子卷有哪个配额的功能。您必须编写一个脚本(许多喜欢 btrfs 的人都会这样做),解析它输出的抽象配额组编号,并在它们下面列出这些配额组内的子卷。可以添加它,但是 btrfs 开发人员虔诚地拒绝这样做。
更糟糕的是,不仅无法显示子卷当前使用了多少配额。这就是为什么
df
只显示总可用空间。 由于 btrfs 的核心设计方式,根本不可能做到这一点。这是因为子卷像快照一样工作。这意味着,要找出子卷中有多少数据,您必须扫描整个文件系统,并找到链接到该子卷/快照的所有文件,然后将它们加起来。就像du
命令。这需要很多时间。我不知道 btrfs 是如何知道配额已满的……IRC 频道无法为我提供任何答案。(他们忙于捍卫自己脆弱的过度膨胀的自我。)明智的做法是,每次添加或删除数据时都更改子卷计数器。btrfs 一定是如何知道它已满的。至少我不知道其他方法。但是为什么他们会选择将这些可用信息基本上保留为军方保守的国家机密,我不知道......如果 zfs 不会有如此疯狂的 RAM 要求(每 TB 1GB ......在单板 ARM 计算机上不是一个选项)和数据丢失的风险,由于不及早写入数据,由于设计用于具有崩溃保护的服务器,我会建议倾销 btrfs以利于它。
五年后,这仍然是一件事吗?我曾经在
/volume1
. 对于我的需要,这是静态的,我计划在下游对数据进行漂亮的处理,所以这里的格式非常简单。对我来说,这打印出来:
我知道这可以变得更具可读性,但我会在后面的步骤中这样做,而不是在这里。为此,我只需要非常一致且易于解析的输出。