不久前,我的 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