Linux - dmraid(或 mdadm) - 重建 RAID 10

Linux - dmraid(或 mdadm) - 重建 RAID 10

不久前,我的 raid10 配置出了问题,现在我正忙着尝试挽救阵列,以便重建并继续我的生活。基本上,每个子集中的一个驱动器都发生故障,这意味着(理论上)我可以恢复。而如果我在同一个子集中丢失了两个磁盘,则无法恢复。

我移除了两个坏驱动器,并向系统添加了两个新驱动器。对于 RAID 控制器卡,系统使用的是 Promise Fasttrak 4310。当我启动系统时,我跳转到 RAID 控制器卡 BIOS,发现所有 4 个驱动器都已找到,但两个新驱动器(显然)未分配给 RAID 配置。不幸的是,我无法通过 BIOS 从配置中移除两个旧驱动器并添加两个新驱动器。Promise 确实提供了 WebPAM 安装程序,但它已经过时(已有 6 年历史),无法安装在 CentOS 6.4 上。

因此我进行了一些挖掘,并发现了“dmraid”。dmraid 看起来很有希望,因为它根据我的了解返回了有关我的 raid 配置的信息:

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 元数据以忽略旧驱动器并添加新驱动器。然后(希望)我可以发出重建命令,理论上 raid 将使用剩余的两个驱动器自我修复。

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

我建议的命令集如下:

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 经验的人能确认这些步骤吗?还是我应该走另一条路?

答案1

天哪。我终于搞明白了。经过一番研究,我偶然发现了几篇帖子,指出分布式阵列不再积极维护,并使用管理而是。因此我开始使用 mdadm,并找出命令来重建 raid,并希望再次联机。以下是我所做的:

根据 mdadm 文档,发出 assemble 命令将从两个物理驱动器创建逻辑卷,如果它们具有超级块信息,因此让我们添加两个没有出现故障的驱动器:

$ -> 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

此时,我搜索了一下,想弄清楚这条消息是什么意思。有无数种不同的情况可能会导致给出的响应,所以我再次仔细考虑了 assemble 命令。第二次重新检查 assemble 命令的关键是给出的消息:“使用 --run 来坚持”。我想,为什么不试一试呢:

$ -> 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>

当然可以!根据状态,团队正在从两个未崩溃和烧毁的驱动器重建。

- 编辑 -

为了确保 raid 配置在重启/关机之间仍然存在,我必须执行以下操作:

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

相关内容