尝试转换时,btrfs 两个数据部分和 enospc 错误

尝试转换时,btrfs 两个数据部分和 enospc 错误

我目前有一个这样的 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)。

最后,您应该能够开始进行转换。

所有背景解释请参阅来源。

相关内容