我有一个 btrfs 文件系统,其输出为btrfs fi usage /mnt
:
Overall:
Device size: 60.00GiB
Device allocated: 40.00GiB
Device unallocated: 20.00GiB
Device missing: 0.00B
Used: 38.03GiB
Free (estimated): 10.00GiB (min: 10.00GiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 22.00MiB (used: 0.00B)
Data,RAID1: Size:18.99GiB, Used:18.99GiB
/dev/sdb 18.99GiB
/dev/sdc 18.99GiB
Metadata,RAID1: Size:1.00GiB, Used:22.11MiB
/dev/sdb 1.00GiB
/dev/sdc 1.00GiB
System,RAID1: Size:8.00MiB, Used:16.00KiB
/dev/sdb 8.00MiB
/dev/sdc 8.00MiB
Unallocated:
/dev/sdb 1.00MiB
/dev/sdc 1.00MiB
/dev/sdd 20.00GiB
正如您所看到的,所有分配的数据块都完全满了。btrfs balance start /mnt
失败并显示:
ERROR: error during balancing '/mnt': No space left on device
There may be more info in syslog - try dmesg | tail
这是不是的副本这个问题,这与元数据块已满有关。我的问题是如何让 btrfs 分配一些块/dev/sdd
答案1
看起来您有一个使用 raid1 配置文件的文件系统,这意味着您需要临时添加第四个设备,以便 BTRFS 可以分配新块。
每个配置文件都有分配块所需的最小设备数量,如果没有那么多可用空间的设备,则无法分配新块。对于 raid1 和 raid0,最小值为 2,对于 raid10,最小值为 4,对于 raid5 和 raid6,最小值分别为 3 和 4。如果您有大量 RAM 和可靠的电源,快速选择是临时向文件系统添加 2-4 GB ramdisk,运行完全平衡,然后从文件系统中删除 ramdisk。 USB 闪存驱动器也可以使用,但您可能会遇到可靠性问题。
或者,你可能-mconvert=single, -dconvert=single, -f
如果您使用 启动余额,让它运行一段时间,然后终止它并使用 重新运行余额,则无需添加其他设备即可实现此功能-mconvert=raid1 -dconvert=raid1
,但这意味着您的某些数据将暂时面临风险。