我有一个有两条腿的 BTRFS RAID-1 文件系统。由于再次出现读取错误,需要更换一张磁盘。
因此,计划是:
因此,我做了以下步骤:
btrfs dev add /dev/new_device /mnt/foo
btrfs balance /mnt/foo
Run Code Online (Sandbox Code Playgroud)
我假设 btrfs 做正确的事情,即创建一个 3 路镜像。
我猜,另一种方法是使用平衡过滤器。但是既然文件系统已经是 RAID-1 了,那应该没有必要了吧?
我有点担心,因为 abtrfs fi show
打印了这个:
平衡开始前:
Total devices 3 FS bytes used 2.15TiB
devid 1 size 2.73TiB used 2.16TiB path /dev/left
devid 2 size 2.73TiB used 2.16TiB path /dev/right
devid 3 size 2.73TiB used 0.00B path /dev/new_device
Run Code Online (Sandbox Code Playgroud)
平衡时:
Total devices 3 FS bytes used 2.15TiB
devid 1 size 2.73TiB used 1.93TiB path /dev/left
devid 2 size 2.73TiB used 1.93TiB path /dev/right
devid 3 size 2.73TiB used 458.03GiB path /dev/new_device
Run Code Online (Sandbox Code Playgroud)
我的意思是,这看起来像 btrfs 将现有 RAID-1 组的一半平衡到单个磁盘......对吗?
因此,我的问题是,我是否需要指定平衡过滤器才能获得三向镜?
PS: btrfs 甚至支持 n-way 镜像吗?一个在BTRFS注意到维基说,它不会-但也许它已经过时?哦,男孩,cks 最近有一篇关于 2-way limit 的文章。
max*_*zig 10
目前,btrfs不支持n-way mirrors。
Btrfs 确实有一个特殊的替换子命令:
btrfs replace start /dev/left /dev/new_device /mnt/foo
Run Code Online (Sandbox Code Playgroud)
在btrfs-replace
手册页的两行之间阅读,此命令应该能够使用现有的两条腿 - 例如,对于两条腿都有读取错误的情况 - 但两个错误集是不相交的。
btrfs 替换命令在后台执行 - 您可以通过status
子命令检查其状态,例如:
btrfs replace status /mnt/foo
45.4% done, 0 write errs, 0 uncorr. read errs
Run Code Online (Sandbox Code Playgroud)
或者,也可以将设备添加到 raid-1 文件系统,然后删除现有的分支:
btrfs dev add /dev/mapper/new_device /mnt/foo
btrfs dev delete /dev/mapper/right /mnt/foo
Run Code Online (Sandbox Code Playgroud)
本add
应返回快,因为它甫一增加了设备(问题上btrfs fi show
确认)。
以下delete
应触发剩余设备之间的平衡,以便每个扩展在每个剩余设备上可用。因此,该命令可能会运行很长时间。这种方法也适用于处理问题中描述的情况。
与btrfs replace
添加/删除循环相比,系统日志会使用低级信息消息发送垃圾邮件。此外,完成需要更长的时间(例如,在我的带有 3 TB SATA 驱动器的测试系统中,FS 使用率为 80%)的时间要长 2-3 倍。
最后,在实际更换后,如果新设备比原始设备大,您将需要btrfs fi resize
在每个设备上发出一个以利用整个可用磁盘空间。对于replace
顶部的示例,这看起来像:
btrfs fi resize <devid>:max /mnt/foo
Run Code Online (Sandbox Code Playgroud)
wheredevid
代表btrfs fi show
返回的设备 ID 。
归档时间: |
|
查看次数: |
8333 次 |
最近记录: |