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

我有一个相对较旧的服务器机器,在主板上没有SATA端口(Dell Precision Workstaion 650)。 还有一个廉价的FakeRAID控制器(威盛VT6421芯片组)和两个连接到控制器的希捷3TB硬盘(ST3000DM001)。 控制器configuration为使用条带模式(而不是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. 每个驱动器开始时1MiB的未分配空闲空间(如GRUB对于传统BIOS上的GPT驱动器所要求的)
  2. 分区#1(1MiB):GRUB的BIOS启动分区
  3. 分区#2(1.5GiB)用于/ boot => md0
  4. 分区#3(2.7TiB)为/ => md1
  5. 分区#4(2GiB)为swap => 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(verison 1.99)分别安装在两个物理驱动器上。

这个设置能够启动,并且在过去的两年中已经或多或less地成功运行(Ubuntu Server 12.04 i686),除了几个硬盘故障(我认为主要是因为过热,因为散热不是很好)。 两次失败的驱动器被删除,一个新的驱动器已成功添加到arrays中并同步。

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

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

启动configuration (至less到达GRUB linux映像select菜单):

  1. old_controller上的disk1 + disk2
  2. old_controller上的disk1 + new_controller上的disk2
  3. old_controller上的disk2 + new_controller上的disk1
  4. 在old_controller上的disk1
  5. disk2在old_controller上

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

configuration失败启动 (“没有这样的磁盘”错误和grub救援>命令行):

  1. new_controller上的disk1和disk2
  2. 在new_controller上的disk1
  3. 在new_controller上的disk2
  4. new_controller上的disk1和disk2与old_controller完全从主板上删除
  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如何识别mdarrays的驱动器? replace的SATA控制器如何影响这个过程?

谢谢!

我会回答我自己的问题。

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

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

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