如何让 btrfs 在新设备上分配空间?

如何让 btrfs 在新设备上分配空间?

我有一个 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,但这意味着您的某些数据将暂时面临风险。

相关内容