Grub 如何检查系统是否启动成功?

Grub 如何检查系统是否启动成功?

我正在我的 EFI 分区上使用 Grub2 测试从 Windows 到 Linux 的自动迁移。我的目标是制定一个后备解决方案,以便当从新的 Linux 映像启动失败时,会加载现有的 Windows 映像。 Grub 提供了开箱即用的功能:https://www.gnu.org/software/grub/manual/legacy/Booting-fallback-systems.html

不过,我想更深入地了解 Grub 到底如何检查内核是否已成功加载。意思是,我想知道直到哪一点可以触发回退。那么Grub如何检查系统是否启动成功呢?

例如,Grub 回退是否确保 systemd 进程已在我的新 Linux 映像上启动?

答案1

您链接到的文档对此进行了解释:引导的系统负责重置引导配置。

您只需要运用一些常识:如果 Grub 负责检测这一点,那就意味着 Grub 需要知道如何与每个现有的、已经存在的甚至尚未编写的操作系统进行对话并检查是否启动成功。了解曾经创建的每个操作系统显然是不可能的,而且根本不可能了解尚未创建的操作系统,因此这不可能是它的工作方式。

从您的建议中应该可以立即清楚这一点:

例如,Grub 回退是否确保 systemd 进程已在我的新 Linux 映像上启动?

如果这是真的,则意味着您无法启动不使用 systemd 的 Linux 发行版。一些Linux发行版使用upstart,一些使用OpenRC,一些使用runit,一些使用minit,一些使用finit,一些使用sysvinit,一些使用Epoch,一些使用s6,一些使用initng,一些使用jinit,一些使用cinit,一些使用simpleinit,有些使用 twsinit,有时对于特定应用程序,您根本不使用 init 系统。

要么您无法启动使用其中任何一个的系统,要么 Grub 必须了解所有这些。这只是针对 Linux 的......大多数 BSD 都有自己的 init 系统,大多数商业 Unices 都有自己的 init 系统(例如 Solaris 上的 SMF),然后还有 Windows、DOS 和数百种其他操作系统。

相关内容