我正在用 Kubuntu 22.04.2 替换我的 Thinkpad T430 上的旧 Ubuntu MATE 16.04,刚刚下载并检查了 SHA256SUM。
300 GB 磁盘驱动器分区如下:
sda1 499 MB 系统保留(现在标记为 boot、esp)
sda2 58.3 GB Windows
sda3 3 GB 空白 FAT32(以前称为 Windows Recovery,已删除以获取可识别的 ESP)
sda5 38.1 GB Kubuntu (/)(这是安装 Ubuntu MATE 的位置)
sda6 7.6 GB 交换
sda7 190.5 GB /home(未格式化即重复使用)
在将系统保留卷标记为esp
(我很确定在我开始重新安装之前这个标签就在那里)之后,我设法让安装程序顺利完成,但是当我尝试从 HDD 启动时,我得到了 GRUB 救援模式,并显示“错误:未找到文件‘/boot/grub/i386-pc/normal.mod’”。
系统固件设置当前已禁用安全启动,包括 USB 和 HDD,并且 UEFI/Legacy 设置为“两者”且“Legacy First”。
根据评论提示,我发现硬盘格式化为 mbr/BIOS 模式,而 USB 密钥为 gpt ——这大概意味着 Live Session 运行在 UEFI 模式而不是 CSM 模式下。不幸的是,这意味着它想要安装 GRUB2 的 UEFI 版本。
写入此 USB 的台式机中的所有设备都是 mbr;我尝试删除 USB 密钥上的分区并使用 FAT32 在 mbr 中重新创建它,但启动盘创建器在写入 .iso 映像时将其转换为 gpt。我将尝试dd
写入 iso,看看这是否会保持 mbr 设置不变。
现在我尝试使用dd
将 .iso 写入 USB 密钥,我发现即使这样也会将 mbr/FAT32 USB 密钥转换为 gpt:
Model: Generic Flash Disk (scsi)
Disk /dev/sdc: 31.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 32.8kB 5018MB 5018MB ISO9660 hidden, msftdata
2 5018MB 5024MB 5155kB Appended2 boot, esp
3 5024MB 5024MB 307kB Gap1 hidden, msftdata
有人在评论中告诉我,当我从 USB 密钥启动时,应该有两个启动选项,但是他们没有提供这些选项,也许是因为这是一台有 10 多年历史的计算机,而 UEFI 在制造时是新的。
新的相关问题这里。
答案1
首先,为了清晰地沟通,我想澄清一些语言和概念上的观点:
- 启动模式为 BIOS/CSM/legacy 或 EFI/UEFI。不存在“MBR 启动模式”。
- 磁盘最有可能使用主引导记录 (MBR) 分区表或 GUID 分区表 (GPT)。任何类型的磁盘都可以在 BIOS 或 EFI 模式下启动!确实如此视窗将 MBR 磁盘与 BIOS 模式启动绑定,将 GPT 磁盘与 EFI 模式启动绑定,但 Linux 确实不是以这种方式限制启动模式。
- 无论计算机是在 BIOS 模式还是 EFI 模式启动,没有什么与该计算机创建的 USB 闪存驱动器如何启动有关。重要的是写入 USB 闪存驱动器的数据,特别是驱动器是否包含 BIOS 和/或 EFI 引导加载程序。在 BIOS 模式下启动的计算机没有什么神奇之处可以阻止它将 EFI 引导加载程序写入磁盘,反之亦然。它只是将一串 1 和 0 写入磁盘。
- 用于安装 Ubuntu 的 USB 闪存盘的格式取决于它的写入方式。如果你曾经
dd
将.iso
文件“raw”复制到 USB 驱动器,那么它将使用一种违反所有规则但不知何故仍能正常工作的弗兰肯斯坦怪物格式和支持启动两个都BIOS和EFI 模式。不要过多解读您从fdisk
、、或gdisk
其他gparted
工具中看到的内容。如果您使用其他工具,它可能会使用更简单的格式,但大多数现代工具也会写入 BIOS 模式和 EFI 模式引导加载程序。这通常与计算机在磁盘上加载时将使用的引导模式无关——这由计算机控制,稍后将解释,假设两个引导加载程序都存在。(但是,如果事后省略或删除了一种模式的引导加载程序,那么显然计算机无法在该模式下引导。)
我非常确定您报告的错误消息 ( error: file '/boot/grub/i386-pc/normal.mod' not found
) 仅由 BIOS 模式版本的 GRUB 产生。很可能计算机使用以前安装的 BIOS 模式 GRUB 的某些残余部分启动,但后续文件丢失或以旧引导加载程序无法找到的方式存储(例如,在不同位置)。
当您启动 USB 闪存驱动器时,其启动模式(BIOS 与 EFI)由固件功能、特定固件如何优先处理不同的启动模式、固件设置、您选择的启动选项以及磁盘上的启动加载程序等复杂因素决定。当您在固件中启用 CSM 支持时,结果很难预测。您需要强制启动介质仅包含一个启动加载程序,或者对计算机的实现有足够了解,以强制它以特定方式启动。如果让计算机 A 按照默认方式启动,计算机 A 可能会以 BIOS 模式启动 USB 闪存驱动器,而计算机 B 可能会以 EFI 模式启动完全相同的驱动器。我将在我写的有关该主题的网页。
出于这个原因,并且由于 EFI 模式比 BIOS 模式具有一些(非常适度的)优势,我通常建议使用 EFI 模式。您可以在固件设置实用程序中禁用 CSM,并且(通常)可以保证 EFI 模式启动,这消除了很多疑问。不过,考虑到您指定的分区表布局,我怀疑您的计算机一直在 BIOS 模式下启动。如果我是对的,那么可以使用以下命令将其更改为在 EFI 模式下启动微软的 MBR2GPT 实用程序;然而,这会带来一定风险,并且可能比你可能采取的其他方法更为棘手。
如果您想保留 BIOS 模式的启动模式,那么您应该弄清楚如何在 BIOS 模式下启动 Ubuntu 介质——但这至少会与系统有关。(通常,但并非总是,您会看到 USB 闪存驱动器的两个启动选项,其中一个以字符串“UEFI”开头。这是 EFI 模式启动选项,缺少该字符串的启动选项将以 BIOS 模式启动磁盘。)如果您想保留 BIOS 模式启动,那么您应该不是尝试创建一个 EFI 系统分区 (ESP) — 可以创建一个新分区,也可以将现有分区转换为 ESP。ESP 仅在 EFI 模式启动时使用,用于保存 EFI 模式启动加载程序。它在 BIOS 模式启动时毫无用处,如果您将现有分区的类型代码更改为 ESP,那么使用该分区的任何东西都可能会开始忽略它,这可能会导致问题。
在做出任何决定之前,你可能需要运行启动修复。我不建议直接进行修复;相反,使用选项生成 BootInfo 摘要并回发该信息。这将使这里的知识渊博的人更清楚地了解您的系统是如何设置的,从而消除一些猜测。如果您的安装已完成,则同一工具可能能够安装可用的引导加载程序。请注意,Boot-Repair 磁盘本身就像 Ubuntu 安装程序一样,可以在 BIOS 模式或 EFI 模式下启动。我不确定,但我思考即使是在 EFI 模式下启动,它也可以安装 BIOS 模式 GRUB;但是如果不是,并且您想使用 BIOS 模式启动,您可能需要弄清楚如何让 Boot-Repair 磁盘在 BIOS 模式下启动。
如果我错了,Windows 之前是在 EFI 模式下启动的,那么你最好的做法可能是确保 Ubuntu 也安装在 EFI 模式下。也许你不小心在 BIOS 模式下启动了安装程序,从而导致了你当前的问题。