具有活动和备用分区的RAID1


8

我在Ubuntu系统上使用RAID1软件RAID分区遇到以下问题(10.04 LTS,2.6.32-24服务器,以防万一)。

我的一个磁盘(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

所以这是一个问题:我如何告诉我的团队将备用磁盘变成活动磁盘?为何将它作为备用设备添加?重新创建或重组数组不是一种选择,因为它是我的根分区。而且在Software Raid HOWTO中找不到关于该主题的任何提示。

任何帮助,将不胜感激。

当前解决方案

我找到了解决问题的方法,但是我不确定这是否是解决问题的实际方法。仔细查看我的团队,我发现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从备用磁盘转换为活动磁盘?我仍然很想知道答案。


“ cat / proc / mdstat”显示什么?难道不只是重建而已,重建完成后“备用”就消失了吗?“ mdadm --version”显示什么?有一个旧的错误...请参阅mail-archive.com/linux-raid@vger.kernel.org/msg09818.html
rems 2011年

不,那是问题。问题中的第一个片段显示了数组的/ proc / mdstat的输出。该设备已经进行了同步,但是在成功完成同步后,您可以看到该设备仍然是备用设备,不会变成活动设备。
Daniel Baron

mdadm-v2.6.7.1
Daniel Baron

Answers:


1

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

猫/ proc / mdstat

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

如果没有建筑物,请尝试以下方法

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

mdadm / dev / md3-添加/ dev / sdb5

并报告其工作方式。有关更多详细信息,请参见http://linux.die.net/man/8/mdadm


感谢您的帮助,Rolnik。如您从我的第一个片段中所见,/ proc / mdstat显示了阵列中的两个设备。设备之前已经同步(此处未显示),没有问题。但是在完成重新同步过程后,这些设备并未变成活动设备。再次删除并添加并没有更改此行为。
丹尼尔·巴伦

1

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

mdadm --grow /dev/md3 -n 2

如联机帮助页所述:

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


0

回想起来,当我遇到问题时(出于不同的原因),我不得不使用--grow来“适当地”重新添加备用驱动器(还清除了错误情况。)

这样的事情(请验证您的文档!):

mdadm --grow --level =故障--layout = flush / dev / sdb5

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.