启动修复后果

启动修复后果

最近我问了一个问题关于如何在 Ubuntu 之后安装 Windows 时修复 Grub。我找到了解决方案并将其发布出来,以帮助其他有同样问题的人。但现在我想问一下启动修复的后果。所以,我的系统之前是这样工作的:

  1. 使用 Grub 的 Ubuntu
  2. 硬盘上的 Windows

正如我所说的答案回答我之前的问题,我在新的 ssd(我们称之为 m2)上安装了 Windows,将旧 hdd 与我的旧 windows 连接,传输所有数据并格式化 hdd。然后我将 ssd 与我的 ubuntu 连接并从我的 usb 闪存运行启动修复。修复后 grub 就修复好了,我可以在新 Windows 和 Ubuntu 之间进行选择,一切正常。

但有一件事让我很困扰,那就是 grub 菜单上仍然有旧的 Windows,即使我用 Windows 格式化了旧硬盘。此外,在 UEFI 中还添加了更多启动选项,例如,ubuntu (m2 ssd)即使ubuntu (hdd)那里根本没有安装 ubuntu。我保存了启动修复的日志,如果可以安全共享,我可以在这里或私下分享它们。

所以我的问题是,我应该担心什么吗?或者这没什么大不了的,我可以忘掉它?当我启动 Ubuntu 时,它还说“无法设置 APST 功能”,但它会在一段时间后加载并运行。

答案1

GRUB 配置文件生成,生成器由一堆模块组成,每个模块添加部分配置。具体来说,菜单由各种“探测器”模块生成;有一个os-prober包以某种方式检测 Windows 并将其添加到菜单中。

如果您/boot/grub/grub.cfg使用某些文本查看器检查该文件(在控制台中,您可以执行less /boot/grub/grub.cfg,使用箭头和 PgUp/PgDown 键滚动并q退出),您将在其中看到注释,这些注释表明哪个模块添加了哪些启动选项。开始时会有一些常规设置,启动菜单将位于文件底部。它可能看起来像这样:

...
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
        set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-3f93e571-3e82-409a-9298-67ad16c80f2a' {
        load_video
        insmod gzio
...
                initrd  /initrd.img-5.10.0-18-amd64
        }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
...
### END /etc/grub.d/20_linux_xen ###
...

在这个例子中,第一个是10_linux模块,它创建了我的主系统的启动菜单条目。我没有 Xen,所以它20_linux_xen没有产生任何东西,等等。

这些是根文件系统中到其各自模块的路径。例如,下一个是30_os-prober应该检测其他系统(包括 Windows)的模块。阅读包自己的文档以/usr/share/doc/os-prober了解其行为和配置。此外,由于是开源的,您可以直接阅读代码 - 它只是系统在启动菜单生成期间调用的 shell 脚本以及您发现从主文件调用的一些其他脚本,并且毫不奇怪,您可以以相同的方式阅读它(尝试less /etc/grub.d/30_os-prober)。通过这种方式,您可以了解它如何在您的特定情况下检测您的残留物,然后您可以决定如何摆脱它。

通常会检测到其他 Linux,因为您有它们的杂散内核和 initrd、根文件系统等,因此请检查您的逻辑卷(如果您使用 LVM)、分区,/boot以查找意外的内核和其他文件。还请检查ESP通常安装到/boot/efi/,并且您使用 UEFI(我怀疑您确实这样做了,因为这是固件条目出现在 GRUB 菜单中的唯一方式),您可以将其与 固件对该主题的看法进行比较efibootmgr -v。您将了解哪些文件实际上没有使用。

相关内容