首先,我想说的是,我对在 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
应该可以完成这项工作,尽管我不知道您必须给它什么参数)。