我正在处理一台PC,一些现成的惠普办公箱,几年前。我已经用不同的风格或 Linux 使用它一段时间了,主要用于计算无头的东西。在某些时候,我必须安装 Windows 7 x86_64,所以我从机器上移除了所有以前的硬盘驱动器,找到另一个 SSD,插入它,将其擦除并在其上安装 Windows 7(所有默认值)。据我所知,它是在 UEFI 引导模式下安装的(即 SSD 有一个带有设置引导标志的小 FAT32 分区)。
时间过去了,我需要再次在这台机器上运行 Linux,我拔掉 SSD 并将 Linux Mint(即 Ubuntu)安装到 2 周前的最新版本到 USB 闪存驱动器上。Mint 安装程序向我抛出错误消息,告诉我这台 PC 上有另一个操作系统以旧版 BIOS 模式运行,并且在 UEFI 模式下安装 Mint 是个坏主意。请记住,SSD 已拔出。好的...我无法说服 Mint 安装程序不要因为此错误消息而崩溃,所以我使用 GParted 手动对我的 USB 闪存驱动器进行分区。设置了 BOOT 标志的 512 MByte FAT32 加上一个 ext4 系统分区、GPT 分区表。我再次运行 Mint 安装程序并将其指向这些分区。它向我发出另一个警告,但不会崩溃。Mint 安装(在 UEFI 模式下)并运行。内核和 Grub 更新工作。
时间又过去了,我又需要 Windows。我的 SSD 还在,所以我把它插上。USB 闪存驱动器也有,我认为没关系……我启动 PC,Windows 工作正常,我将其关闭。好吧,现在我想启动 Mint。UEFI 没有找到它。时期。我拔掉了SSD。我尝试了所有可用的 USB 端口。我打开了安全启动(只是为了好玩)然后再次关闭。我切换到 BIOS 仅启动模式并返回 UEFI / legacy 组合。我切换到仅 UEFI 模式。它只是不会识别薄荷。浏览 UEFI 的启动菜单并没有将 USB 闪存驱动器列为 UEFI 启动选项,而仅将其列为 Legacy BIOS 选项(我记得当我安装 Mint 时它被列为 UEFI 选项)。
据我所知,Mint UEFI 引导分区未受影响(更改日期与上次 Grub 更新的日期匹配)。设置了 BOOT 标志。据我所知,它确实没有任何问题。我唯一的“错误”是在将包含 Mint 的 USB 闪存驱动器插入 PC 时启动 Windows。
我可以做些什么来调试和/或解决这个问题?我可能忽略了什么?
编辑(1):这就是gdisk
告诉我:
# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.8
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 30464000 sectors, 14.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): ***
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 30463966
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00
2 1050624 30461951 14.0 GiB 0700
分区 1 的代码 EF00 令人讨厌。不应该是EE00吗?
也张贴在薄荷论坛。
我的第一个猜测是您丢失了 Mint 的 NVRAM 引导变量。当固件注意到它指的是系统中不再存在的磁盘/SSD时,也许固件将其删除。
使用 UEFI,每个操作系统都可以将自己的引导加载程序规范写入系统的可引导事物列表。该规范基本上包括包含引导加载程序的 EFI 系统分区的 GUID 标识符,以及引导加载程序文件的路径名。对于 Mint,路径名可能类似于
\EFI\Mint\grubx64.efi
因为它使用 GRUB2 的 UEFI 版本。诀窍是您可以从操作系统中访问这些 UEFI 启动变量……但前提是该操作系统以 UEFI 模式启动。当使用传统引导模式时,访问引导变量所需的 UEFI 运行时服务将被禁用,以使系统更接近于传统系统。
对于可移动媒体,还有另一个 UEFI 约定:如果没有适用的 UEFI 引导变量,或者系统被告知从以前从未见过的磁盘以 UEFI 模式引导,那么 UEFI 固件会查找具有 FAT32 文件系统的分区这将包含一个名为
\EFI\BOOT\BOOTx64.efi
(对于 64 位 x86 硬件;ARM 架构有自己的引导文件名。)所以有两种方法可以解决这个问题:
1.) 使用任何能够理解 GPT 分区表和 FAT32 文件系统的操作系统访问 Mint 磁盘。找到引导加载程序文件(
\EFI\Mint\grubx64.efi
或类似文件)并将其复制到\EFI\BOOT\BOOTx64.efi
同一磁盘上。如果包含原始引导加载程序文件的目录包含任何看起来像配置文件的内容,请也复制它们。现在 UEFI 应该将磁盘识别为 UEFI 可引导,即使 NVRAM 引导变量已消失。(如果/当您必须再次交换 SSD 时,这可能会防止问题再次发生。)
2.)以 UEFI 模式将系统引导至任何类型的 live-Linux 或救援环境。找到引导文件名,并使用
efibootmgr
命令重写 Mint 的引导变量。所需的命令类似于:替换
/dev/sdX
为实际的磁盘设备名称:efibootmgr
会自动查找对应的 GUID。请注意 Windows 样式路径名中的双反斜杠:这是因为反斜杠是 Linux shell 的特殊转义字符。最后一个参数是可能出现在引导选择菜单等的标签;你可以写任何你想要的短文本。