文件系统 BTRFS 大小与 df、btrfs 和 baobab 之间的差异

文件系统 BTRFS 大小与 df、btrfs 和 baobab 之间的差异

今天我的桌面通知我 /-filesystem 已“满”。因此我首先清理了一些文件、软件包和旧快照。

但是,当我删除前一个分区时,我注意到使用该工具baobab我只有 50GB 的空间(见屏幕截图)。我的df -alh命令给出的结果是,我的分区大小为 140G,而该命令btrfs filesystem df /给出的结果是 125G。如果我使用cfdiskdf -alh 命令检查分区大小,得到的结果是,如果有 139.7G(即 140G)可用,则表示可用。但是我不明白为什么 btrfs 和 baobab 给出的结果不同。 截图差异尺寸输出

- 编辑 -

$sudo  btrfs fi usage /
Overall:
    Device size:         139.70GiB
    Device allocated:        136.70GiB
    Device unallocated:        3.00GiB
    Device missing:          0.00B
    Used:            133.78GiB
    Free (estimated):          3.63GiB  (min: 2.13GiB)
    Data ratio:               1.00
    Metadata ratio:           2.00
    Global reserve:      308.56MiB  (used: 0.00B)

Data,single: Size:125.68GiB, Used:125.05GiB (99.50%)
   /dev/sda1     125.68GiB

Metadata,DUP: Size:5.50GiB, Used:4.37GiB (79.38%)
   /dev/sda1      11.00GiB

System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%)
   /dev/sda1      16.00MiB

Unallocated:
   /dev/sda1       3.00GiB
$sudo btrfs fi du -s /
     Total   Exclusive  Set shared  Filename
 138.88GiB    96.00KiB    46.30GiB  /

答案1

使用 BTRFS,当写入的数据量远少于报告的可用空间时,可能会耗尽空间。

这是因为 BTRFS 每次写入都是从新分配的块开始的。但由于块大小是静态的,而文件大小各有不同,因此很多时候块都未完全填充。这就造成了“已分配但未使用”的空间,这就是问题所在。

使用命令可以更好地看到问题btrfs fi usage。将已用大小除以总大小可得到低效存储的比例。

BTRFS 有一个可以“重新平衡”文​​件系统的工具,称为balance。它最初设计用于平衡存储在多个驱动器上的数据,但它在单驱动器配置中也很有用,可以重新平衡数据在分配中的存储方式。

默认情况下,balance将重写磁盘上的所有数据。这可能没有必要。块将不均匀地填充,但您可以使用上面计算的比率进行过滤,使用参数-d仅重新平衡小于该比率的块。这将留下任何部分填充的块,这些块的填充程度高于平均值。

如果比例为0.66,则使用以下命令:

sudo btrfs balance start -dusage=66 /

您可以通过附加在后台运行上述命令&并使用以下命令检查其状态:

sudo btrfs balance status -v /

或者连续使用:

while :; do sudo btrfs balance status -v / ; sleep 60; done

要查看差异,请使用以下方法检查最终结果:

btrfs filesystem df /

详细信息请参阅文章 BTRFS 和可用空间 - 紧急响应

相关内容