为什么操作系统及其安装程序的行为会根据是否使用传统模式而有所不同?

为什么操作系统及其安装程序的行为会根据是否使用传统模式而有所不同?

一些背景信息:

今天早些时候,我尝试在我的计算机上重新安装 Kali Linux(与 Windows 双启动)。为此,我下载了 ISO 并将其放在我的 Easy2Boot USB 棒上。为了让我的笔记本电脑从 Easy2Boot 棒启动,我需要进入我的 BIOS 并:

  • 禁用 PTT
  • 启用旧版选项 ROM
  • 切换到传统模式

这是因为 Easy2Boot 不支持 UEFI,所以除非我这样做,否则该棒不会出现。

安装过程中没有遇到任何问题,但安装后出现了问题。我可以顺利启动系统,但如果我恢复在 BIOS 中所做的更改并返回 UEFI 模式,我会收到 GRUB 救援提示而不是 Kali。此外,虽然仍设置了这些 BIOS 选项,但 GRUB 无法检测到我的 Windows 安装。最后,我使用 Rufus 安装 Kali,使用“分区方案:GPT”和“目标系统:UEFI(非 CSM)”。完成此操作后,我进入了安装过程。值得注意的是,安装程序似乎有所不同。它不仅外观不同,而且初始菜单也有不同的选项。

我的问题:

为什么在传统模式和 UEFI 模式之间切换会导致这些问题?我的理解是,MBR/GPT 在引导方面的唯一作用是提供引导的初始代码。

  • 既然 GRUB 能够在 UEFI 模式下加载,为什么仅仅因为这个变化它就最终进入恢复模式而不是继续启动 Kali?

  • 为什么我在 Legacy 模式和 UEFI 模式下看到的安装程序有区别?

  • 在传统模式下,为什么 GRUB 无法检测到 Windows?我原以为 BIOS 已经完成了加载 GRUB 的工作,所以不会出现问题,因为我知道 GRUB 在 UEFI 模式下安装时可以毫无问题地检测到 Windows。

答案1

我的理解是 MBR / GPT 在引导方面唯一的作用是提供引导的初始代码。

初始菜单实际上是此代码的一部分。它不是由操作系统提供的;它是由引导加载程序显示的(它也充当“引导管理器”的工作)。

引导加载程序本质上特定于单一类型的固件。(即使 GRUB2 也有针对 BIOS 和 UEFI 的单独核心,并且其模块必须针对这两种类型进行不同的编译。)

因此,完全有可能同一个安装盘针对 BIOS 和 UEFI 系统使用完全不同的引导加载程序(例如,BIOS 使用 syslinux,但 UEFI 使用 systemd-boot;或 BIOS 使用 GRUB2,但 UEFI 使用 rEFInd)。如果它们提供引导菜单,它们都以自己的方式提供,并具有自己的外观和主题。

(也可能是原始 ISO没有有两种固件类型的引导加载程序 - 在某些情况下,Rufus 会将其自己的引导加载程序配置(syslinux)插入到混合中。)

最后,即使是具有相同基本配置的相同 GRUB2,在两种情况下也可能没有相同的图形模式。由于固件本身的差异,菜单选项可能会丢失:例如,“启动现有操作系统”在 BIOS 和 UEFI 之间完全不同;“内存测试”(memtest86)是一个单独的程序,它本身需要出现在 BIOS 和 UEFI 变体中……

既然 GRUB 能够在 UEFI 模式下加载,为什么仅仅因为这个变化它就最终进入恢复模式而不是继续启动 Kali?

在没有看到 GRUB 报告的确切故障之前无法回答这个问题。可能是您的 EFI 分区有 GRUB 核心文件,但缺少模块或 grub.cfg。

再次提醒,BIOS GRUB 和 UEFI GRUB 是两个独立的软件。尽管它们共享大部分源代码,但它们被编译成不同的格式,安装在系统上的不同位置,并且由固件以不同的方式启动。

在传统模式下,为什么 GRUB 无法检测到 Windows?我原以为 BIOS 已经完成了加载 GRUB 的工作,所以不会出现问题,因为我知道 GRUB 在 UEFI 模式下安装时可以毫无问题地检测到 Windows。

听起来您的 Windows 系统配置为以 UEFI 模式启动,这意味着它只安装了与 UEFI 兼容的引导加载程序。

但是,当系统处于 BIOS 模式时,它无法启动 UEFI 程序 - 因为它们依赖于 UEFI 内核的存在并提供某些服务。(就像 MS-DOS 无法启动 Windows 程序一样......)

毕竟,“传统模式”的全部意义在于操作系统只能将固件视为传统 PC BIOS;任何 UEFI 服务都是不可见的。

(同样,我不确定 UEFI 应用程序是否可以将系统“降级”为 16 位模式,以便链式加载到与 BIOS 兼容的启动代码中。)

答案2

你写了:

我下载了 ISO 并将其放在我的 Easy2Boot USB 上。为了让我的笔记本电脑从 Easy2Boot 启动,我需要进入我的 BIOS 并:

禁用 PTT 启用传统选项 ROM 切换到传统模式这是因为 Easy2Boot 不支持 UEFI,所以除非我这样做,否则该棒不会出现。

Easy2Boot 可能不支持 UEFI,但是鲁弗斯是的。如果您使用 Rufus 制作可启动的 USB 棒,您可以将其设置为支持 UEFI,这样它就可以工作了。

请注意,您实际上需要选择正确的设置才能使其工作。您需要将分区方案设置为 GPT,然后选择 UEFI(非 CSM)作为目标系统。请注意,最新版本的 Rufus 会自动执行大多数这些设置,因为过去它让人们困惑为什么它不起作用。

这就是我用来制作支持 UEFI 的自定义 Windows 10 安装程序的方法。

由于另一个答案解释了为什么它不起作用,但并没有真正详细说明如何以正确的方式解决问题,所以我决定发布这个答案,因为虽然另一个答案在技术上是正确的,但我认为这会更好地回答你的实际问题:在我的计算机上安装 Linux 的最佳方法是什么。

请理解,这篇文章不是要推广 Rufus。还有其他工具也可以使用,我只是碰巧有使用 Rufus 的经验,所以我可以保证它会起作用。如果你发现另一个更受欢迎且支持 UEFI 的程序,请随意使用它。

话虽如此,我从 Easy2Boot 的网站上看到,他们应该通过进行一些转换等来支持 UEFI 模式。不过,我认为 Rufus 仍然容易得多,但您已有的 Easy2Boot 软件也应该可以实现。

相关内容