为什么 btrfs 拒绝将元数据转换为 RAID1

为什么 btrfs 拒绝将元数据转换为 RAID1

我创建了一个单设备 btrfs 文件系统。根据 btrfs wiki 文章使用多个设备,我应该能够使用以下命令将其转换为 RAID1:

btrfs balance start -dconvert=raid1 -mconvert=raid1 /path

我在 Linux 3.16 上启动了它,但失败了(内核恐慌)。升级到Linux 4.0,挂载文件系统后继续并完成。但它只处理数据,而不处理元数据或系统(根据btrfs fi df)。我从 git 获取了最新的 btrfs-progs (只是为了确保它不是由于旧版本造成的),并执行了以下操作:

Watt:/home/anthony/src/btrfs-progs# ./btrfs balance start -v -mconvert=raid1 /path
Dumping filters: flags 0x6, state 0x0, force is off
  METADATA (flags 0x100): converting, target=16, soft is off
  SYSTEM (flags 0x100): converting, target=16, soft is off
Done, had to relocate 6 out of 1411 chunks

但显然,这实际上并没有反映出来。现在,我有:

Watt:/home/anthony/src/btrfs-progs# ./btrfs fi usage /path
Overall:
    Device size:                   7.28TiB
    Device allocated:              2.75TiB
    Device unallocated:            4.53TiB
    Device missing:                  0.00B
    Used:                          2.74TiB
    Free (estimated):              2.26TiB      (min: 2.26TiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:              512.00MiB      (used: 0.00B)

Data,RAID1: Size:1.37TiB, Used:1.37TiB
   /dev/mapper/luks-562e4e2f-2894-415a-aaf1-7c94a11c33b9           1.37TiB
   /dev/mapper/luks-ec97c1ad-21d8-41bb-9072-e5a74f68e416           1.37TiB

Metadata,DUP: Size:2.50GiB, Used:1.58GiB
   /dev/mapper/luks-562e4e2f-2894-415a-aaf1-7c94a11c33b9           5.00GiB

System,DUP: Size:32.00MiB, Used:224.00KiB
   /dev/mapper/luks-562e4e2f-2894-415a-aaf1-7c94a11c33b9          64.00MiB

Unallocated:
   /dev/mapper/luks-562e4e2f-2894-415a-aaf1-7c94a11c33b9           3.17TiB
   /dev/mapper/luks-ec97c1ad-21d8-41bb-9072-e5a74f68e416           1.36TiB

我再次尝试了完全平衡(同时使用-dconvert=raid1-mconvert=raid1),但也没有成功。

注意:较大的磁盘 (56…b9) 是我添加的。

如何获得元数据和系统镜像?

答案1

这是内核4.0中的回归,导致平衡中的转换过滤器不起作用;看起来所有转换都会受到影响(不仅仅是 single->raid1 或 raid1->raid5)。查看最近的邮件列表线程,目前官方还没有修复。如果您打算修补内核,可以使用一个简单的修补程序作为临时修复。

这是 v4.0 中的一个已知错误。我发送了一个补丁 [1] 来恢复导致回归的提交,但没有得到任何响应。您可以应用该方法或恢复 2f0810880f08(“btrfs:设置块组 ro 时删除块分配尝试”)来暂时解决您的问题。

[1]:https://patchwork.kernel.org/patch/6238111/

相关内容