如何检查(模拟)删除 btrfs 子卷后将释放多少空间?

如何检查(模拟)删除 btrfs 子卷后将释放多少空间?

这个问题并非微不足道。 BTRFS是COW文件系统,存储在硬盘上的一个对象可以被多个文件引用。

我使用 BTRFS 快照作为生产服务器上备份解决方案的一部分。这样我就可以拥有给定子卷的节省空间、可浏览的历史记录(我使用了对快照Btr)。

我有几个用于不同目的的独立 btrfs 子卷,并为每个子卷提供了一个备份方案。当可用空间耗尽时,我可以根据 的智能对数时间成本算法从每个备份池中获取最不需要的备份快照SnapBtr

我需要一种方法来衡量删除每个备份后将释放的数据量以及旧快照的寿命及其备份池的重要性。我丢失了以前的信息。

据我了解,BTRFS 上可用空间的计算过程既不简单也不快速。我需要一些可以模拟子卷删除的东西来获取将要释放的空间的大小。

谁能帮我?我应该将此消息发布到 吗[email protected]

答案1

正如所证明的这里,这实际上相当简单。

首先,启用 btrfs 配额:

# btrfs quota enable /btrfs_subvolume

然后运行:

# btrfs qgroup show /btrfs_subvolume
OR
# btrfs qgroup show -f /btrfs_subvolume

Btrfs v3.18.2 中的内容向您展示了这一点:

qgroupid        rfer       excl
--------        ----       ----
0/260        1.09GiB    1.09GiB

0/260是子卷ID,excl是子卷中的独占数据。如果删除子卷,这就是您将释放的空间量。

编辑:根据这个关联,这似乎是官方推荐的方法。

答案2

btrfsQuota.py使输出btrfs qgroup show更具可读性,用子卷的名称替换子卷 ID,例如:

subvol                                      group         total    unshared
-------------------------------------------------------------------------------
test/a                                      0/970        20.05M       0.05M
test/b                                      0/971        20.05M      10.05M
test/c                                      0/972        30.05M      10.05M
test/d                                      0/973        30.05M       0.05M
test/e                                      0/974        30.05M      10.05M

相关内容