今天我的桌面通知我 /-filesystem 已“满”。因此我首先清理了一些文件、软件包和旧快照。
但是,当我删除前一个分区时,我注意到使用该工具baobab
我只有 50GB 的空间(见屏幕截图)。我的df -alh
命令给出的结果是,我的分区大小为 140G,而该命令btrfs filesystem df /
给出的结果是 125G。如果我使用cfdisk
df -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 和可用空间 - 紧急响应。