我目前有一个这样的 btrfs 文件系统设置:
# btrfs fi df /storage/
Data, RAID1: total=2.33TiB, used=2.32TiB
Data, RAID0: total=2.00GiB, used=2.00GiB
System, RAID1: total=32.00MiB, used=340.00KiB
Metadata, RAID1: total=4.00GiB, used=2.53GiB
和:
# btrfs fi show
Label: none uuid: 5e63e5b5-48bb-442e-a79c-1c71a22de476
Total devices 3 FS bytes used 2.33TiB
devid 1 size 2.73TiB used 1.56TiB path /dev/sda
devid 2 size 2.73TiB used 1.56TiB path /dev/sdd
devid 3 size 2.73TiB used 1.55TiB path /dev/sdc
Btrfs v3.12
如您所见,我有两个数据部分,一个包含 RAID1 中的大部分数据,另一个包含 2GiB 大小的数据,采用 RAID0 配置。我希望最终将所有数据都放在 RAID1 中。
我尝试过平衡整个 /storage/ 文件系统,也尝试过另一个问题中建议的命令,btrfs balance start -dprofiles=raid0 -dconvert=raid1 /storage/
将 raid0 部分转换为 raid1。但是,结果是这样的:
# btrfs balance start -dprofiles=raid0 -dconvert=raid1 /storage/
ERROR: error during balancing '/storage/' - No space left on device
There may be more info in syslog - try dmesg | tail
按照建议检查系统日志,结果如下:
[432205.142548] QNX4 filesystem 0.2.3 registered.
[480205.124621] btrfs: relocating block group 4968366997504 flags 9
[480205.286706] btrfs: 1 enospc errors during balance
答案1
从那时起,你可能已经找到了解决方案。但对于那些仍在寻找解决方案的人(就像我 15 分钟前一样),这里有一个答案(来源:https://btrfs.wiki.kernel.org/index.php/Balance_Filters当文件系统已满时查看平衡)
您需要执行不进行转换的平衡,并对使用情况过滤器使用较低的值:
btrfs balance start -dusage=0 /storage/
然后您可以尝试增加使用次数(例如 -dusage=10)。
最后,您应该能够开始进行转换。
所有背景解释请参阅来源。