具有活动分区和备用分区的 Raid1

具有活动分区和备用分区的 Raid1

我在 Ubuntu 系统(10.04 LTS,2.6.32-24-server,以防万一)上的 RAID1 软件 raid 分区遇到了以下问题。

我的一个磁盘 (sdb5) 报告了 I/O 错误,因此在阵列中被标记为故障。然后阵列降级为只有一个活动设备。因此,我更换了硬盘,克隆了分区表,并将所有新分区添加到我的 raid 阵列中。同步所有分区后,一切正常,有 2 个活动设备 - 其中一个除外。但是,之前报告故障磁盘的分区没有将新分区作为活动设备,而是作为备用磁盘:

md3 : active raid1 sdb5[2] sda5[1]
  4881344 blocks [2/1] [_U]

详细观察后发现:

root@server:~# mdadm --detail /dev/md3
[...]
Number   Major   Minor   RaidDevice State
   2       8       21        0      spare rebuilding   /dev/sdb5
   1       8        5        1      active sync   /dev/sda5

所以问题是:我如何告诉我的 raid 将备用磁盘变成活动磁盘?为什么它被添加为备用设备?重新创建或重新组装阵列不是一个选项,因为它是我的根分区。而且我在软件 Raid HOWTO 中找不到有关该主题的任何提示。

任何帮助,将不胜感激。

当前解决方案

我找到了解决问题的方法,但我不确定这是否是实际的方法。仔细查看我的 raid 后,我发现 sdb5 始终被列为备用设备:

mdadm --examine /dev/sdb5
[...]
Number   Major   Minor   RaidDevice State
this     2       8       21        2      spare   /dev/sdb5

   0     0       0        0        0      removed
   1     1       8        5        1      active sync   /dev/sda5
   2     2       8       21        2      spare   /dev/sdb5

因此将设备 sdb5 重新添加到阵列 md3 总是会导致该设备作为备用设备添加。

最后我只是重新创建了数组

mdadm --create /dev/md3 --level=1 -n2 -x0 /dev/sda5 /dev/sdb5

有效。

但问题对我来说仍然悬而未决:是否有更好的方法来操作超级块中的摘要并告诉阵列将 sdb5 从备用磁盘变为活动磁盘?我仍然很想知道答案。

答案1

丹尼尔:首先,通过执行以下操作仔细检查备用设备是否已集成到阵列中:

猫/proc/mdstat

它应该报告是否有一个正在进行的构建过程,以及预计需要多长时间。

如果没有发生任何建筑,请尝试以下操作

mdadm /dev/md3 --删除 /dev/sdb5

mdadm /dev/md3 --add /dev/sdb5

并汇报效果如何。参见http://linux.die.net/man/8/mdadm更多细节。

答案2

已经很晚了,但这样做只会启用备用驱动器:

mdadm --grow /dev/md3 -n 2

正如手册页所述:

对于创建、构建或增长:-n, --raid-devices= 指定阵列中的活动设备数。此数量加上备用设备的数量(见下文)必须等于 --create 命令行中列出的组件设备数量(包括“缺失”设备)。设置值 1 可能是一个错误,因此需要先指定 --force。然后允许线性、多路径、RAID0 和 RAID1 使用值 1。绝不允许 RAID4、RAID5 或 RAID6 使用值 1。只能使用 --grow 更改 RAID1、RAID4、RAID5 和 RAID6 阵列的此数量,并且只能在提供必要支持的内核上更改。

答案3

据我回忆,当我遇到该问题时(由于不同的原因),我不得不使用--grow来“正确地”重新添加备用驱动器(同时清除错误情况)。

类似这样的事情(用你的文档验证!):

mdadm --grow --level=faulty --layout=flush /dev/sdb5

然后您可以添加该设备并且它应该被识别。

问题是 md 驱动程序将每个分区的状态保存在驱动器启动数据中。因此,即使重新启动后,它也能知道状态并避免将分区标记为有故障。

相关内容