我创建了一个单设备 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 时删除块分配尝试”)来暂时解决您的问题。