Linux (FC14/i386) 热安装后 raid1 完好吗?如何修复?

Linux (FC14/i386) 热安装后 raid1 完好吗?如何修复?

我的旧版本(FC11)安装已到达 EOL,我尝试在其 RAID1 根文件系统上重新安装 FC14。

我现在怀疑,安装 FS 后,是否已完全清除。问题是,这种怀疑是否属实,如果属实,如何解决。

[root@atlas dev]# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sda[0]
  732571648 blocks super external:/md0/0 [2/1] [U_]

md0 : inactive sdb[1](S) sda[0](S)
  4514 blocks super external:imsm

unused devices: <none>
[root@atlas dev]#

md127 似乎是 md0 的某个子容器,但将 sda[0] 列为显式设备,而不是 sdb。我假设我在读这篇文章时正在运行 sda,而 sdb 已失效。

问题是 FS 此后经历了很多活动,因此不能假设两个磁盘是同步的。sdb 可能必须重建。不过我确实有完整备份,所以我愿意承担经过计算的风险。

请注意,文件系统是根设备。(单用户模式?)

任何关于如何读取 mdstat 输出的解释都是受欢迎的。我猜我需要以某种方式将 sdb 从 md0 容器添加到 md127。

内核摘录:

          dracut: Starting plymouth daemon
          dracut: rd_NO_DM: removing DM RAID activation
          pata_marvell 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
          pata_marvell 0000:03:00.0: setting latency timer to 64
          scsi6 : pata_marvell
          scsi7 : pata_marvell
          ata7: PATA max UDMA/100 cmd 0xcc00 ctl 0xc880 bmdma 0xc400 irq 16
          ata8: PATA max UDMA/133 cmd 0xc800 ctl 0xc480 bmdma 0xc408 irq 16
          dracut: Autoassembling MD Raid
          md: md0 stopped.
          md: bind<sda>
          md: bind<sdb>
          dracut: mdadm: Container /dev/md0 has been assembled with 2 drives
          md: md127 stopped.
          md: bind<sda>
          md: raid1 personality registered for level 1
          md/raid1:md127: active with 1 out of 2 mirrors
          md127: detected capacity change from 0 to 750153367552
           md127: p1 p2
          md: md127 switched to read-write mode.

--detail --scan 的输出:

 ARRAY /dev/md0 metadata=imsm UUID=e14582dd:1863c14a:fb0d98f0:5490080b
 ARRAY /dev/md127 container=/dev/md0 member=0 UUID=c0cf0b37:bc944eec:ac93d30e:ee2f423e

/etc/mdadm.conf:

 # mdadm.conf written out by anaconda
 MAILADDR root
 AUTO +imsm +1.x -all
 ARRAY /dev/md0 UUID=e14582dd:1863c14a:fb0d98f0:5490080b
 ARRAY /dev/md127 UUID=c0cf0b37:bc944eec:ac93d30e:ee2f423e

更新:

等了大半天后,我终于忍不住验证了我的备份,启动到单用户模式,然后就可以简单地使用 mdadm --manage /dev/md127 --add /dev/sdb

重建耗时约 3 小时(无偿加班)。一切似乎都正常运转,完好无损。

我还记得在决定使用软件 RAID 之前,我曾尝试过 fakeraid,不过据我所知,在其他磁盘上也是如此。也许 md0 是那个遗留的,是某个恢复不佳的 /etc 溜进去的,然后被打到可以正常工作。不过,下次重新安装时,它就崩溃了。让它正常工作的实验可能为它保留了一些信息。

可怕的是,现在两个阵列都包含相同的磁盘,并且 md0 在启动期间短暂启用。我收到警告,似乎表明 md127 是 md0 的子项,这使得删除有点可怕。但第二天我有时间进行系统管理时,我会挖出一个启动盘并试一试。(当然是在对昨天的完整备份进行增量备份之后)

md127 有两个分区(一个大的根分区 + 交换分区),都已挂载。md0 未处于活动状态(由于它共享驱动器,我不敢激活它),所以我不知道它有哪些分区。

由于 md127 现在可以工作(2/2 UU),现在的问题是弄清楚是否可以安全删除 md0(md0 的子 md127?)以及如果可以,如何删除,以避免在将来的安装中出现问题。

可能还需要删除磁盘上的某些元数据,以避免下次安装时拾取它。

答案1

正确的做法是先确定哪个分区已挂载。然后您需要停用另一个分区,以便从中移除磁盘。然后在 mdadm 下扩展已挂载的磁盘以将新磁盘添加到其中,md 软件会将当前挂载的分区同步到另一个磁盘。之后,cat'ing /proc/mdstat 应该只显示一个 md 设备,其中列出了两个磁盘(并且很可能其中一个仍在同步)。(并可能修复 fstab)

我不会在这里重复很多需要的内容,因为Linux 突袭 维基非常好,包含您需要阅读的大部分文档(并附有很好的例子)。

然而,大多数人忘记的一件事是,Linux 内核需要一个包含所需磁盘信息的 initramfs。因此,每次更改 md 配置时,最好使用 dracut 重新创建 initramfs:

dracut -v --mdadmconf new_image.img KERNEL-VERSION-STRING

然后将 grub 指向 new_image.img。

我以前犯过这样的错误,在从阵列中移除驱动器后忘记了这一点,结果从单个驱动器启动,而不是从正确镜像的驱动器启动。这种情况和你的情况非常相似。

相关内容