了解单个数据卷的 btrfs 磁盘使用情况

use*_*849 5 btrfs

在我的 256 GB 光盘上:

# btrfs fi show /dev/sdd3
Total devices 1 FS bytes used 143.43GiB
devid    1 size 234.22GiB used 234.22GiB path /dev/sdd3
Btrfs v3.12
Run Code Online (Sandbox Code Playgroud)

我不明白“143.43GiB”和“已用 234.22GiB”之间的差异。我想,也许我有重复的数据,但我读这个的方式:

# btrfs filesystem df /
Data, single: total=230.20GiB, used=142.32GiB
System, DUP: total=8.00MiB, used=32.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=2.00GiB, used=1.19GiB
Metadata, single: total=8.00MiB, used=0.00
Run Code Online (Sandbox Code Playgroud)

我的数据只存储一次,“单一”,我不明白剩余的大约 100 GiB 被用在哪里。引用自btrfs wiki

single - 数据使用情况与单个设备上的原始块组使用情况匹配(数据 = 原始;1GB 数据需要 1GB 磁盘

挂载信息:

# mount | grep sdd3
/dev/sdd3 on / type btrfs (rw,noatime,ssd,noacl,space_cache)
Run Code Online (Sandbox Code Playgroud)

小智 5

Btrfs 以固定大小的块分配数据和元数据(数据为 1 GB,元数据较少)。即使这样,btrfs 也不一定填满它分配的所有块。因此,即使您只有 143 GB 的数据,btrfs 仍将其分布在大约 234 个块中,这就是为什么它还显示您已使用 234 GB。df 中显示的“总”数字是块使用的空间量,“已使用”数字是数据使用的空间量。但是,由于默认情况下 btrfs 将数据和元数据保存在单独的块中,因此您可能会遇到错误的空间不足错误 b/c 您需要为数据或元数据分配更多空间,并且所有可用空间都已分配成块。鉴于您仍然有 0.81 GB 的可用元数据,您可能不会遇到此问题,但如果您执行所有操作,只需运行如下所示的命令:

btrfs b star -dusage=5
Run Code Online (Sandbox Code Playgroud)

如果它说:

Done, had to relocate 0 out of n chunks
Run Code Online (Sandbox Code Playgroud)

然后继续使用大于 5 的数字运行它,直到它说它必须重新定位超过零的块。