Linux RAID 控制器 (LVM/MDADM)

Linux RAID 控制器 (LVM/MDADM)

今天我的情况很糟糕。生产 RAID 阵列出现故障。控制器出现故障。卸载文件系统并终止所有进程后,我更换了硬件控制器。重新启动阵列后,磁盘恢复正常,我想尝试重新组装阵列。

但是,我无法停止现有的阵列。

我有 :

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdi1[5](F) sdh1[6](F) sdg1[7](F) sdf1[8](F) sde1[9](F) sdd1[10](F)
      976751616 blocks level 5, 64k chunk, algorithm 2 [5/0] [_____]

md2 : active raid5 sdo1[5](F) sdm1[6](F) sdl1[7](F) sdk1[8](F) sdj1[9](F)
      3907039744 blocks level 5, 64k chunk, algorithm 2 [5/0] [_____]

unused devices: <none>

磁盘现在是 /dev/sdn sds sdt sdu sdv 和 sdw + sdx sdy sdz sdaa 和 sdab

尝试停止阵列会产生以下结果:

[root@tango ~]# mdadm --stop /dev/md1
mdadm: fail to stop array /dev/md1: Device or resource busy
Perhaps a running process, mounted filesystem or active volume group?

这是因为它认为卷组仍然处于活动状态。

lvs 给出:

  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao 111.00G
  LogVol01 VolGroup00 -wi-ao  17.50G
  u01      raid1_vol1 -wi-ao 128.00G
  u04      raid1_vol2 -wi-ao 128.00G
  u05      raid5_vol3 -wi-ao 521.00G
  u02      raid5_vol4 -wi-ao 521.00G
  u07      raid5_vol5 -wi-ao 248.00G

尝试将 lv 设置为非活动状态失败,并显示:

[root@tango ~]# lvchange -a n /dev/raid5_vol1
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 1000193589248: Input/output error
  /dev/md1: read failed after 0 of 4096 at 1000193646592: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md1: read failed after 0 of 4096 at 4096: Input/output error
  /dev/md1: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4000808632320: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4000808689664: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/md2: read failed after 0 of 4096 at 4096: Input/output error
  /dev/md2: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 3974992166912: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 3974992224256: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 4096: Input/output error
  /dev/raid5_vol2/u03: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 991063638016: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 991063695360: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 4096: Input/output error
  /dev/raid5_vol1/u06: read failed after 0 of 4096 at 0: Input/output error
  Volume group "raid5_vol1" not found
  Skipping volume group raid5_vol1

我也尝试过:

[root@tango ~]# mdadm --assemble --force /dev/md1 /dev/sdn /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw
mdadm: device /dev/md1 already active - cannot assemble it

所以我没主意了!有人能帮忙吗?

凯蒂


[root@tango ~]# cat /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md2 level=raid5 num-devices=5 metadata=0.90 spares=1 UUID=dce41d37:804dea59:e5727503:733c194b
ARRAY /dev/md1 level=raid5 num-devices=5 metadata=0.90 spares=2 UUID=9e8a7463:ea5942af:abf7ab25:de5bb614

答案1

我终于解决了这个问题,痛苦了 24 个小时,所以我想分享一下:

以下是信息,如果您丢失了一个磁盘控制器,则所有磁盘都会进入故障状态。当您关闭阵列并在重新启动时更换控制器时,所有磁盘都有不同的标签。请注意,我没有说重新启动。我重新启动了 raid 阵列,因为系统无法重新启动。

步骤 1 - 告诉 mdadm 忘记分离的磁盘,如下所示:

$>mdadm /dev/md1 --删除分离

如果您尝试使用 mdadm /dev/md1 --remove /dev/sdX,这将失败,因此您必须使用“detached”。如果这不能分离 raid 组中的所有磁盘,您可能需要多次运行它。我这样做了。第三次尝试时,cat /proc/mdstat 显示它们全部被移除。

步骤 2 - 如果您尝试关闭阵列,并且在控制器发生故障时您有任何活动的逻辑卷或用户,您将无法:

$> mdadm --stop /dev/md1

然而如果此方法有效,请忽略步骤 3。

步骤 3 - 使用 dmsetup remove 释放阵列

因此,您需要运行 dmsetup remove -f -j 1234 -m 1 命令。这些数字来自运行 dmsetup info 并查找发生故障的卷。就我而言,它们很容易识别,因为损坏的卷的打开标志为零,如下所示。在实时系统上运行此命令很可怕,因此请确保您正确获取这些数字。此命令将有所帮助:

$>dmsetup info .. .. .. 名称:raid5_vol2-u03 状态:ACTIVE 预读:1024 当前表数:LIVE 打开数:0 事件编号:0 主、次:253、6 目标数:1 UUID:LVM-fPJWYWhBhTO7tzHMBbc01qR20Nazc8N93S0bMPqstrg0sFFVtipaWYi7NYzas12d

盒子上处于活动状态的卷的打开计数为 1。损坏的卷的打开计数为 0。

如果您确定音量正确,则可以发出命令。 在我的情况下,这两个数字是 253 和 6。

$>dmsetup remove -f -j 253 -m 6 等待 30 秒 $>mdadm --stop /dev/md1

步骤 4 - 假设您已经能够停止您需要尝试重新组装的阵列。

要做到这一点,你需要知道新的磁盘标签是什么,如果你知道崩溃前磁盘的序列号,这是一个好习惯,你可以运行

$>smartctl -i /dev/sdN 找出现在哪个标签与哪个磁盘匹配。或者,您可以再次关闭阵列并进行物理检查。

一旦你知道:

$>mdadm --assemble /dev/md1 /dev/sdn1 /dev/sds1 /dev/sdt1 ... 等等。

如果这有效,您将收到“突袭开始”消息,如果没有,那么嗯...我不确定!

稍等一会 ...

$> cat /proc/mdstat

阵列应该正在同步/重建。我的小阵列花了几分钟,大阵列花了几个小时。如果这样有效的话。

步骤 5 - 此时卷组、逻辑卷等都将处于修复状态,我运行了:

$> pvscan $> vgscan $> lvscan

对我来说幸运的是,它识别了我的阵列并将其连接起来,但卷组仍处于非活动状态。

因此 lvs 显示:

不活动的 raid5_vol1...

步骤 6-使卷组再次处于活动状态:

vgchange-ay raid5_vol1

第 7 步 - 如果一切顺利,这将无法再次安装,您可以在这篇文章中感谢我的帮助。

祝你好运!

凯蒂

相关内容