Linux – dmraid(或mdadm) – 重buildRAID 10

前一段时间,我有一个raid10configuration废弃在我身上,现在只是试图抢救arrays,所以我可以重build,继续我的生活。 基本上每个子集中的驱动都失败了,这意味着(理论上)我可以恢复。 如果我在同一个子集中丢失了两个磁盘,那么恢复是不可能的。

我删除了两个坏的驱动器,并添加了两个新的驱动器到系统。 对于RAID控制卡,系统使用的是一个承诺fasttrak 4310.当我启动系统时,我跳进了RAID控制卡bios,注意到所有4个驱动器被发现,但是两个新的(显然)没有被分配到RAID组态。 不幸的是,我无法删除两个旧驱动器,并通过BIOS添加两个新的驱动器从configuration。 Promise确实提供了WebPAM安装程序,但它很古老(6岁),不会安装在CentOS 6.4上。

所以我做了一些挖掘并碰到“dmraid”。 dmraid看起来很有前途,因为它是基于我所了解的有关我的RAIDconfiguration的信息:

root@service1 ~ # -> dmraid -s -s ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde *** Superset name : pdc_fbdbhaai size : 976642080 stride : 32 type : raid10 status : ok subsets: 2 devs : 2 spares : 0 --> Subset name : pdc_fbdbhaai-0 size : 976642080 stride : 32 type : stripe status : broken subsets: 0 devs : 1 spares : 0 --> Subset name : pdc_fbdbhaai-1 size : 976642080 stride : 32 type : stripe status : broken subsets: 0 devs : 1 spares : 0 root@service1 ~ # -> dmraid -r /dev/sde: pdc, "pdc_fbdbhaai-1", stripe, ok, 976642080 sectors, data@ 0 /dev/sdb: pdc, "pdc_fbdbhaai-0", stripe, ok, 976642080 sectors, data@ 0 

到目前为止,看起来我需要做的就是更新RAID元数据以忽略旧的驱动器,并添加新的驱动器。 然后(希望)我可以发出一个重build命令,理论上这次袭击会用剩下的两个驱动器来救援自己。

我读过“man dmraid”,但我想确保我发出的命令能够完成我想要做的事情。 不幸的是,我无法find任何关于如何使用dmraid从raid元数据添加/删除驱动器的好文档。

我build议的命令集将如下所示:

 root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-0 /dev/sda1 root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-1 /dev/sda2 

随着旧的驱动器删除,时间来添加新的:

 root@service1 ~ # -> dmraid -R pdc_fbdbhaai-0 /dev/sdc root@service1 ~ # -> dmraid -R pdc_fbdbhaai-1 /dev/sdd 

有dmraid工作经验的人能够确认这些步骤吗? 或者我应该去另一条路线?

哇靠。 能够弄清楚。 经过一些更多的研究,我偶然发现了一些表明dmraid不再被主动维护的post,而是使用了mdadm 。 所以我开始和mdadm一起工作,想出了命令来重buildraid,希望能够重新上线。 以下是我所做的:

根据mdadm文档,发出汇编命令将从两个物理驱动器创build逻辑卷, 如果它们具有超级块信息,那么可以添加两个没有失败的驱动器:

 $ -> mdadm --assemble /dev/md0 /dev/sdb /dev/sde mdadm: /dev/md0 assembled from 2 drives - need all 4 to start it (use --run to insist). 

很简单,让我们将两个新的驱动器添加到逻辑卷中:

 $ -> mdadm --add /dev/md0 /dev/sdc /dev/sdd mdadm: cannot get array info for /dev/md0 

在这一点上,我做了一些使用Googlesearch来找出这个消息表明什么。 有很多不同的情况可能导致给定的响应,所以我再次仔细考虑了汇编命令。 第二次重新检查汇编命令的关键是给出的信息; “用 – 坚持”。 想想,为什么不让它出手:

 $ -> mdadm --run /dev/md0 mdadm: started /dev/md0 

好的,到目前为止,现在可以添加两个新的驱动器了吗?

 $ -> mdadm --add /dev/md0 /dev/sdc mdadm: added /dev/sdc $ -> mdadm --add /dev/md0 /dev/sdd mdadm: added /dev/sdd 

哇,真酷! 让我们检查一下状态:

 $ -> cat /prod/mdstat Personalities : [raid10] md0 : active raid10 sdd[4](S) sdc[5] sdb[1] sde[2] 976772992 blocks 64K chunks 2 near-copies [4/2] [_UU_] [>....................] recovery = 2.2% (10762688/488386496) finish=131.5min speed=60498K/sec unused devices: <none> 

当然好! 根据地位,袭击是从两个没有崩溃和燃烧的驱动器重build。

– 编辑 –

为了确保raidconfiguration在重启/closures之间保持不变,我必须执行以下操作:

 $ -> mdadm --detail --scan >> /etc/mdadm.conf