我有一台笔记本电脑,应该从两个磁盘、一个硬盘驱动器/sda/
和一个新的固态驱动器运行两个 Debian 9、一个 Debian 11 和一个 Windows 10 /nvme0n1/
。
我使用 gparted 将/sda1/
Debian 9 克隆并扩展到 SDD 上/nvme0n1p5/
。
/nvme0n1p5/
当我使用 GRUB2(可识别所有四个操作系统)引导 Debian 9 ( ) 时,它始终/sda1/
在传统引导模式下引导源分区 。安装在启动上的 Debian 11/sda5/
和安装在/nvme0n1p1/
.
较新的 SSD/nvme0n1/
使用 GPT 进行分区,而 HDD 仍然使用 MBR。
克隆源分区后,我必须重新安装 grub2 作为 grub-efi-amd64 卸载 grub-pc 以适应UEFI双启动/多重启动正如这里建议的那样。
我还没有尝试从机器上移除带有源分区的 HDD,并查看 GRUB 的反应,但我不必这样做。
编辑1
我尝试提供/nvme0n1p5/
新的 UUID 并更新 GRUB,但这并没有解决问题。
然后我尝试卸下硬盘,看看会发生什么。结果如第四张图所示。 Windows 打开/nvme0n1p1/
不再可见。我无法启动到/sda1/
或/nvme0n1p5/
。第一个是预期的。第二个不是。
答案1
欢迎来到 Unix 和 Linux StackExchange!
我可以想到您的 Debian 9 引导选项可能出现如您所描述的行为的几个可能原因。
您的 Debian 11 GRUB 图片表明它有一个“系统设置”引导选项,这表明 UEFI 版本的 GRUB 已成功启动。另外,您说 Windows 可以从 GPT 格式的磁盘正常启动,而这只能在 UEFI 模式下发生。
我不认为 GRUB 可以自行从 UEFI 切换到传统模式,因此您的“始终使用传统启动模式启动 Debian 9 sda1
”的症状可能意味着 UEFI 版本的 GRUB 尝试启动 Debian 9 内核,但失败了,然后系统固件决定下一步做什么。如果没有其他有效的 UEFI 引导选项可供尝试,它可能会开始尝试旧版引导选项,因此最终会在 上找到可引导的 MBR sda
,这将启动 BIOS 版本的 GRUB 并最终在 上启动 Debian 9 sda1
。
当您将 Debian 9 安装克隆到 时nvme0n1p5
,您是否更改了文件系统 UUID?如果有两个具有相同 UUID 的文件系统,并且固件只能在 UEFI 模式下从 NVMe 启动,则可以解释为什么 Debian 9 的 UEFI 模式启动失败但传统模式可以工作:UEFI 模式启动加载程序将看到两个分区与 Debian 9 的根文件系统预期的 UUID 一样,传统模式引导加载程序只会看到sda1
.
Linux 内核启动后,无论启动模式如何,它都可以自行支持 NVMe 驱动器,因此除了意外处于传统启动模式之外,您可能不会注意到任何异常症状。
另一种可能性是您安装的 Debian 9 是 32 位版本。传统模式启动以 16 位模式启动(!),传统模式启动中内核的首要任务之一是停用兼容性功能,以揭示处理器的 32 位和 64 位功能。但是 UEFI 以本机 64 位模式启动,我不确定它是否允许启动 32 位内核:我知道 32 位 UEFI 可以启动 64 位内核,但我不确定是否可以相反则得到支持。如果 UEFI GRUB 由于尝试加载 32 位内核而无法启动,则可能还会导致固件尝试传统模式启动,最终会使用sda1
.
如果您启用了安全启动,Debian 仅在 Debian 10 及更高版本中实现安全启动兼容性。 (当然,声称启用了安全启动,然后在 UEFI 启动失败时无缝回退到传统 BIOS 启动并不是很安全......)
因此,您需要更多有关 Debian 9 的 UEFI 启动失败原因的信息。您可以做的第一件事就是暂时禁用启动画面并启用详细启动消息。在 GRUB 引导菜单中,将突出显示移动到“Debian 9 on nvme0n1p5”引导选项,然后按E键(非持久)编辑引导项。你会看到很多行。找到以以下单词开头的行:
linux /boot/vmlinuz-<kernel version number here> <kernel boot options...>
如果内核启动选项包含单词quiet
and/or splash
,请将其删除。为了保险起见,您还可以写入单词verbose
and nosplash
。这应该会导致 Linux 内核输出很多启动时的详细信息。要使用临时更改的启动选项启动,请按F10或Control+ X。
如果您仍然看到常规的 Debian 9 启动启动画面,并且系统最终处于传统模式,则表明传统模式下的故障和重新启动发生的速度比屏幕切换显示模式的速度要快 - 这表明问题发生在 GRUB 启动时尝试启动内核。
进入 Debian 9 后,登录,打开命令提示符并输入uname -m
。它的响应是x86_64
, 或类似i386
或 的内容吗i686
?第一个表示您的操作系统有 64 位内核,其他都表示 32 位版本。
答案2
最后,我发现问题是UUID问题/etc/fstab
。克隆分区上的 Linux/nvme0n1p5/
将加载针对 UUID 的文件系统/sda1/
。
我必须在/etc/fstab
文件中将原始分区的旧 UUID 替换为目标分区的新 UUID。
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=002ae0f2-b6df-4502-8a0c-b9db279142b1 / ext4 errors=remount-ro 0 1
到
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 / ext4 errors=remount-ro 0 1
在我的修补过程中,我通过多种方式多次更新了 grub。我不相信第二个部分是原始问题的一部分,而是对我可能创建的第二个问题的修复。我把这个包括在内以防万一。 grub 菜单项指向了用于检索文件系统的错误分区,但指向了用于检索 Linux 内核的正确条目。
submenu "Advanced options for Debian GNU/Linux 9 (stretch) (on /dev/nvme0n1p5)"{
menuentry "Debian GNU/Linux (on /dev/nvme0n1p5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-13-amd64--248b6fec-3f9a-4e48-838f-cdea88cfe933' {
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 002ae0f2-b6df-4502-8a0c-b9db279142b1
else
search --no-floppy --fs-uuid --set=root 002ae0f2-b6df-4502-8a0c-b9db279142b1
fi
linux /boot/vmlinuz-4.9.0-13-amd64 root=UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 ro efi=runtime quiet
initrd /boot/initrd.img-4.9.0-13-amd64
}
到:
submenu "Advanced options for Debian GNU/Linux 9 (stretch) (on /dev/nvme0n1p5)"{
menuentry "Debian GNU/Linux (on /dev/nvme0n1p5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-13-amd64--248b6fec-3f9a-4e48-838f-cdea88cfe933' {
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 248b6fec-3f9a-4e48-838f-cdea88cfe933
else
search --no-floppy --fs-uuid --set=root 248b6fec-3f9a-4e48-838f-cdea88cfe933
fi
linux /boot/vmlinuz-4.9.0-13-amd64 root=UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 ro efi=runtime quiet
initrd /boot/initrd.img-4.9.0-13-amd64
}
grub-customizer
这可以通过Debian 10 或更高版本中提供的GUI 来完成。否则只需挂载 EFI 系统分区并打开/grub/grub.cfg
.您还必须修改高级启动选项。请记住复制原始文件的备份/grub/grub.cfg
,以防出现问题。
使用 查找您自己的正确 UUID sudo blkid
。正确的 UUID 是您要引导到的分区的 UUID。