更换 SATA 控制器后,软件 RAID(mdadm)停止启动:grub rescue> 没有这样的磁盘

更换 SATA 控制器后,软件 RAID(mdadm)停止启动:grub rescue> 没有这样的磁盘

我有一台相对较旧的服务器机器,主板上没有 SATA 端口(Dell Precision Workstaion 650)。还有一个便宜的 FakeRAID 控制器(VIA VT6421 芯片组)和连接到控制器的 Seagate 3TB 硬盘 (ST3000DM001)。控制器配置为使用 Stripe 模式(而非 RAID)的硬盘:我基本上将其用作 SATA 控制器,而不是 RAID 控制器。我能够在此系统上设置软件 (mdadm) RAID。两个物理硬盘的分区如下:

Number  Start (sector)    End (sector)  Size        Code  Name
1                2048            4095   1024.0 KiB  EF02  BIOS boot partition
2                4096         3186687   1.5 GiB     EF00  EFI System
3             3186688      5856337919   2.7 TiB     FD00  Linux RAID
4          5856337920      5860532223   2.0 GiB     8200  Linux swap

因此有:

  1. 按照 GRUB 对旧版 BIOS 上的 GPT 驱动器的要求,每个驱动器开头都有 1MiB 的未分配可用空间
  2. 分区 #1 (1MiB):GRUB 的 BIOS 启动分区
  3. /boot 的分区 #2 (1.5GiB) => md0
  4. 分区 #3 (2.7TiB) 为 / => md1
  5. 分区 #4 (2GiB) 用于交换 => md127

分区 #2、#3 和 #4 组装成软件 RAID md0、md1 和 md127(使用 raid1):

$ cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb2[2] sda2[3]
    1590208 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb3[2] sda3[3]
    2926444352 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb4[1] sda4[0]
    2097088 blocks [2/2] [UU]

Grub(版本 1.99)分别安装在两个物理驱动器上。

此设置能够启动,并且在过去两年中或多或少地成功运行(Ubuntu Server 12.04 i686),除了几次硬盘故障(我认为主要是因为过热,因为冷却效果不是很好)。两次故障驱动器被移除,并且新驱动器被成功添加到阵列中并同步。

现在我正在用 Supermicro SAT2-MV8 8 端口 SATA HBA PCI-X(new_controller)替换 HDD 控制器,廉价的 FakeRAID(old_controller),它是一个纯 SATA 控制器,而不是 FakeRAID,因为旧控制器连接器非常脆弱,有时似乎会导致接口错误。

现在的问题是,如果没有 old_controller,我无法启动系统。特别是,如果没有驱动器连接到 old_controller,则总是会出现“没有这样的磁盘”错误和 grub 救援命令行。然后,在救援模式下,“ls”命令不会列出 (md/0),而会显示物理驱动器分区。但是,如果其中一个驱动器连接到 old_controller,系统会正常启动,如果在这种情况下 grub 中断,“ls”命令会显示 (md/0) 以及其他驱动器分区。我尝试了几种配置。

可启动的配置(至少到达 GRUB Linux 映像选择菜单):

  1. old_controller 上的磁盘 1 + 磁盘 2
  2. 旧控制器上的磁盘1 + 新控制器上的磁盘2
  3. 旧控制器上的磁盘2 + 新控制器上的磁盘1
  4. old_controller 上的磁盘 1
  5. old_controller 上的磁盘 2

在这些情况下,GRUB 的“ls”命令始终列出 (md/0)

无法启动的配置(“没有这样的磁盘”错误和 grub rescue> 命令行):

  1. new_controller 上的 disk1 和 disk2
  2. new_controller 上的 disk1
  3. new_controller 上的 disk2
  4. 新控制器上的磁盘 1 和磁盘 2,旧控制器已从主板上完全移除
  5. new_controller 上的 disk1 已将 old_controller 完全从主板上移除
  6. new_controller 上的 disk2 已将 old_controller 完全从主板上移除

在这些情况下,GRUB 的“ls”命令不会列出 (md/0)

当两个驱动器均未连接到 old_controller 时,为什么 GRUB 无法组装 md 阵列?总之,您能帮我让系统在没有 old_controller 的情况下工作吗?

您能否推荐一个可以深入阅读软件 RAID 在启动时如何组装的好地方?特别是使用 GRUB?GRUB 如何识别 md 阵列的驱动器?更换的 SATA 控制器会如何影响此过程?

谢谢你!

答案1

我将回答我自己的问题。

简而言之:从 GRUB1.99 升级到 GRUB 2.02 beta2 解决了问题

不知何故,当驱动器连接到新控制器时,GRUB1.99 中的 GRUB 模块 mdraid1x 无法正确检测 RAID。我不确定 SATA 控制器之间的确切区别是什么。然而,有一点是,即使它们都无法检测到驱动器的正确 3TB 大小,它们报告的值也是不同的:旧控制器上为 800MB,新控制器上为 2TB。也许它以某种方式影响了 mdraid1x 检测 RAID 分区的能力。

不过,这个问题似乎已在 GRUB 2.02 beta2 中修复。

相关内容