使用安装在 md0 上的 /boot 从降级的 RAID1 启动 Linux

使用安装在 md0 上的 /boot 从降级的 RAID1 启动 Linux

首先,我想说的是,我对在 Linux 中管理 RAID 阵列还很陌生,所以我的问题可能非常基本,但我似乎无法在互联网上找到我的具体情况。

我有一个带有 2 个 HDD 的 RAID1 系统,所有分区都安装在 RAID 阵列的顶部,包括 /boot 分区。今天mdadm警告我阵列已降级(可能是其中一个 HDD 出现故障),当我检查时,阵列自动变为降级状态,如下所示:

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[0]
      204736 blocks super 1.0 [2/1] [U_]

md2 : active raid1 sdb2[0]
      151858048 blocks super 1.1 [2/1] [U_]
      bitmap: 2/2 pages [8KB], 65536KB chunk

md1 : active raid1 sdb3[0]
      4092864 blocks super 1.1 [2/1] [U_]

然后我关闭服务器,更换了故障的驱动器并尝试从剩余的驱动器启动,但是在 GRUB 尝试启动内核后,我看到了以下消息:

Error 17: Cannot mount selected partition.

有人知道我该如何从工作驱动器启动系统吗?我对 GRUB 基本一无所知,我尝试阅读文档几次,但它对我来说仍然太复杂,而且我很着急,因为我现在手里有一台已关闭电源的服务器。任何帮助都将不胜感激。

答案1

如果我理解正确的话,您的第一个驱动器 ( /dev/sda) 就是您更换的那个。此外,在安装 grub 时,您可能忘记将其安装到两个磁盘上,而 RAID1 设置需要这样做。

问题是 grub 正在搜索第一个未安装 grub 的硬盘。快速上网搜索该问题后,结果如下:https://www.novell.com/support/kb/doc.php?id=7010670。请参阅那里和相关页面上的步骤并根据需要进行修复。因为/dev/sdb您将需要hd1在 grub 中使用。

答案2

两年后,我很好地回答了我自己的问题......

我最终只是从该服务器导出所有内容并将其格式化,但最近再次遇到这个问题并决定正面解决它。

我在这里提到的一切都是通过以下方式完成的:

  • CentOS 7 的ml内核来自ELRepo
  • raid1这两个设备都在操作系统安装过程中被添加到(就像这样) 和全部分区安装在 raid1 的顶部(/boot/swap)。对于这个主题来说,是否使用 LVM 似乎没有区别。
  • 与默认的 CentOS 7 安装一样,它附带的是GRUB2旧版GRUB,这是一个很大的区别,因为您在网上找到的大多数文档都与 v1 有关。
  • 我的设置才不是包含一个EFI分区。据我发现,EFI 无法在 RAID 上运行,因此如果您有 EFI,则下面的过程将无法正常工作,因此请特别注意。

我清楚地意识到,问题在于 CentOS 仅在第一个物理设备中安装了引导加载程序 (GRUB2)。显然,它使用了一个MSDOS无法在 RAID 上运行的微小分区(分区是正确的术语吗?也许是“标志”?)。因此,即使只是交换磁盘也会导致系统无法启动,因为即使辅助磁盘确实有系统的完整副本,它也没有引导加载程序。

现在来探索解决方案,希望它足够简单:将引导加载程序从主磁盘复制到辅助磁盘。

我不确定该怎么做,因为我不知道引导加载程序如何调用设备。也许简单地从第一个引导加载程序镜像会导致冲突,所以我可能必须反转条目,以便它知道哪个设备实际上是哪个。

探索这个问题后,我找到了一个解决方案,可以dd将引导加载程序复制到第二个磁盘上。我找到了一个用户的帖子,说他们总是这样做,而且总是有效,但对我来说,不知什么原因,它却没有用。

为了更好地了解 GRUB2 的工作原理,我发现它包含一个“安装”工具,可轻松将引导加载程序添加到所需设备,瞧,这正是我所需要的!我所要做的就是:

grub2-install /dev/sdb

然后交换磁盘后,系统仍然按预期启动!任务完成了一半。

然后,在确认两个设备都可以启动后,我只需要从阵列中移除故障磁盘(现在为“sdb”)(可以在线找到相关文档,它涉及将设备标记为故障,然后将其从阵列中移除)并将其交换为新磁盘,最后将其添加回 mdadm 阵列,希望它能够自动开始同步(您可以使用 查看进度watch cat /proc/mdstat)。

grub2-install另外,完成后不要忘记在新设备上运行。

希望这可以帮助其他面临同样问题的人。

如果您有一个 EFI 分区,您可能必须找到一种方法将其复制到辅助设备的开头(dd应该可以完成这项工作,尽管我不知道您必须给它什么参数)。

相关内容