在线驱动器更换:带有 RAID 6 的 BTRFS

在线驱动器更换:带有 RAID 6 的 BTRFS

我在一台测试机器上安装了四个硬盘,并将它们配置为 RAID6。为了进行测试,我在安装卷并将数据写入其中时移除了其中一个驱动器 (/dev/sdk)。据我所知,这很有效。一些 I/O 错误被写入 /var/log/syslog,但卷仍在工作。不幸的是,命令“btrfs fi sh”没有显示任何丢失的驱动器。因此,我以降级模式重新安装了卷:“mount -t btrfs /dev/sdx1 -o remount,rw,degraded,noatime /mnt”。这样,有问题的驱动器就被报告为丢失。然后我再次插入硬盘(当然又是 /dev/sdk)并开始平衡:“btrfs filesystem balance start /mnt”。现在卷如下所示:

$ btrfs fi sh
Label: none  uuid: 28410e37-77c1-4c01-8075-0d5068d9ffc2
    Total devices 4 FS bytes used 257.05GiB
    devid    1 size 465.76GiB used 262.03GiB path /dev/sdi1
    devid    2 size 465.76GiB used 262.00GiB path /dev/sdj1
    devid    3 size 465.76GiB used 261.03GiB path /dev/sdh1
    devid    4 size 465.76GiB used 0.00 path /dev/sdk1

我如何重新启动 /dev/sdk1?运行“$ btrfs fi ba start /mnt”没有帮助。我尝试移除硬盘,但

$ btrfs de de /dev/sdk1 /mnt/
ERROR: error removing the device '/dev/sdk1' - unable to go below four devices on raid6 

替换也不能这样进行:

$ btrfs replace start -f -r /dev/sdk1 /dev/sdk1 /mnt
/dev/sdk1 is mounted

还有其他方法可以更换/重新启动硬盘然后转换为 RAID 5 吗?

答案1

我已经在运行内核 4.3 的测试系统上重复了此测试。

像您一样,我创建了一个具有 4 个驱动器的 BTRFS RAID-6 阵列:

# mkfs.btrfs -m raid6 -d raid6 /dev/sdb /dev/sdc /dev/sdd /dev/sde

然后我将其安装起来并开始在其上写入数据。

在此期间,我移除了一个驱动器。当然,这导致日志和各处出现大量错误消息。但正如预期的那样,写入过程没有中断,也没有文件损坏。

更重要的是,BTRFS 增加了写入和刷新错误的错误计数 ( dev stats)。因此,如果这是一个生产系统,它将受到监控,类似这样的 cronjob 会生成一封通知电子邮件:

[email protected]
@hourly /sbin/btrfs device stats /mnt/tmp | grep -vE ' 0$'

然后我就这么做了不是保持平衡,但擦洗,因为我希望 BTRFS 扫描整个文件系统并修复所有错误,这正是 scrub 所做的。

# btrfs scrub start -B /mnt/tmp

最后,我将 BTRFS 错误计数重置回零(如果该文件系统受到监控,这将停止警告消息):

# btrfs device stats -z /mnt/tmp

再次检查后没有发现其他错误。

并且我在测试时写入的文件是正确的。它的 MD5 值与原始文件匹配。

当然,每个测试都是不同的。如果为第三个驱动器 ( sdd) 分配了一个新名称sdf,如 ,则可以将其替换为其自身,从而有效地重新同步:

# btrfs replace start 3 /dev/sdf /mnt/tmp

顺便说一句,您提到删除驱动器。您不需要这样做,这只会混淆您的设备并且效率低下。replace 命令一直存在。

顺便说一句,在一种情况下,在我运行清理之前,当我尝试从受损文件系统读取数据时,BTRFS 导致测试系统崩溃。毕竟,与该文件系统的大多数部分不同,BTRFS RAID-5/RAID-6 仍被视为实验性的(尽管它不断得到改进,因此此声明可能已过时,这是针对 4.3 的)。但这只是一次,我重复了测试,它并没有崩溃。此外,这告诉我们,即使 BTRFS RAID-6 在仍处于实验阶段时可能会崩溃,但它可以保护您的数据,并且清理会可靠地告诉您是否有错误,因为它使用存储的校验和来验证文件。

我也重复了测试,导致 2 个驱动器出现错误。这是 RAID-6,因此这也按预期工作。清理后一切都很好。

相关内容