我可以确定 btrfs 子卷组的独占空间使用情况吗?

我可以确定 btrfs 子卷组的独占空间使用情况吗?

我想通过删除一些快照来释放 btrfs 文件系统中的一些空间。但我无法弄清楚哪些可以有效删除。这个问题的答案解释了如何显示一个 btrfs 快照中独占的数据量。但是,如果您的暂时可删除数据的保存时间超过了快照之间的时间间隔,那么这并没有什么帮助。例如,如果我在星期一创建一个文件,执行每日快照,然后在星期三删除它,则该文件将被两个快照使用,因此不属于任何一个快照。

我想我正在寻找的是一种枚举的方法团体保存没有其他快照保存的数据的快照。

答案1

是的,你可以这样做配额组

首先回想一下,每个快照都是一个子卷,并且有一个数字子卷 ID。您可以使用 来查看它们btrfs subvol list /myfs

然后,如果您想查看仅包含在子卷 10、20、30(共同)中的块使用了多少空间,您可以执行以下操作

btrfs quota enable /myfs                            # if not enabled already
btrfs qgroup create 1/12345 /myfs                   # any number not already in use
btrfs qgroup assign --no-rescan 0/10 1/12345 /myfs
btrfs qgroup assign --no-rescan 0/20 1/12345 /myfs
btrfs qgroup assign --no-rescan 0/30 1/12345 /myfs
btrfs quota rescan -w /myfs                         # may take a long time
btrfs qgroup show /myfs

你会看到一行像

1/12345    107.07GiB     38.93GiB

这意味着:

  • 子卷 10、20、30 总共包含 107 GiB 的总数据,计算其他子卷(即其他快照或“活动”文件系统)中包含或不包含的数据

  • 它们包含 38.93 GiB 的数据,即不是任何其他子卷的一部分。如果删除子卷 10、20 和 30,则将释放 38.93 GiB 的空间。

相关内容