我已经在我的笔记本电脑上双启动 Linux mint 19 和 Windows 10 3 年了,没有出现任何问题。今天,我在Linux上运行了apt-get升级命令,并出现了grub、osprober等身份验证错误。清除 grub/* 并重新安装 grub-efi 修复了软件包升级问题。但是,启动进入Windows后,我无法再次启动进入Linux(不出现grub屏幕,笔记本电脑直接启动进入Windows)
根据几个论坛建议,我跑了
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
具有 Windows cmd 的管理员权限。现在,重新启动笔记本电脑会出现“选定的启动映像未经过身份验证”错误。
我从 BIOS 开启了传统启动。这使得 ubuntu 备份(没有 grub 屏幕)。我从 ubuntu 终端运行 sudo update-grub 终端显示显示 grub 能够找到 Windows 启动管理器映像。这次,我重新启动,显示了 grub 屏幕,但上面没有 Windows 选项。
我启动到 ubuntu 并使用“备份和重命名 Windows EFI 文件”选项运行启动修复。应用所有更改后,Windows 选项出现在 grub 屏幕上,但按 Enter 键只会让我回到 grub 屏幕。从 BIOS(系统恢复)中选择 F11 也让我回到了 grub。我在这里没有找到有同样问题的其他帖子。这一步也是在legacy模式下进行的。关闭旧模式会导致图像身份验证错误,并且仍然无法启动任何内容。粘贴箱在这里:http://paste.ubuntu.com/p/96jHFRfYBF
任何建议将不胜感激。目前,我愿意做任何事情来恢复我的 Windows 系统(包括清除 Linux Mint 系统,因为我的 Linux 文件系统更有组织性,并且我能够在第 2 步中备份所有内容)。
答案1
但是,启动进入Windows后,我无法再次启动进入Linux(不出现grub屏幕,笔记本电脑直接启动进入Windows)
这很可能是 Windows 10 检测到其 UEFI NVRAM 启动项已被篡改,并对其进行“自我修复”,而不考虑系统上可能存在的其他操作系统。这是 Windows 10 会做的事情,据我所知,没有办法解决这个问题。
UEFI NVRAM 引导条目的当前状态可以在 Pastebin 的引导修复输出中查看:
===================================== UEFI =====================================
BIOS is EFI-compatible, and is setup in EFI-mode for this installed-session.
SecureBoot disabled.
efibootmgr -v
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0000,0001,0003,9999
Boot0000* Windows Boot Manager HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)/File(\EFI\ubuntu\grubx64.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................
Boot0001* ubuntu HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)/File(\EFI\ubuntu\grubx64.efi)
Boot0003* Internal Hard Disk PciRoot(0x0)/Pci(0x17,0x0)/Sata(2,32768,0)/HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)..BO
Boot9999* USB Drive (UEFI) PciRoot(0x0)/Pci(0x1d,0x0)/USB(16,0)..BO
请注意,Boot0000 条目目前是 BootOrder 中的第一个条目,虽然其可读名称是“Windows Boot Manager”,但它执行的实际启动文件已更改为\EFI\ubuntu\grubx64.efi
.
这可能是由您的 引起的bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
,因为这实际上是命令告诉 Windows 要做的事情。
\EFI\Microsoft\boot\bootmgfw.efi
由于Windows 10会在启动时自动将其更改回其标准,并且该Boot0000
条目被指定为第一个BootOrder
,因此Windows的“自我修复”将有效地使系统一启动就直接进入Windows进入Windows。
您可以做的是更改引导顺序,以便 Ubuntu ( Boot0001
) 的引导条目将成为第一个。只要Boot0000
条目不被修改,Windows 似乎就不愿意篡改这一点。您可以通过多种方式做到这一点:
a.) 访问 BIOS 引导顺序设置,然后移动(希望)标记ubuntu
为引导顺序中第一个的条目。
b.) 在 Windows 提升的命令提示符中,运行,找到设置为 的bcdedit /enum FIRMWARE
引导条目并记下其:它将是大括号中的长 UUID 字符串。然后跑。description
ubuntu
identifier
bcdedit /set {fwbootmgr} DEFAULT {UUID of the ubuntu entry}
笔记:重要的是使用{fwbootmgr}
而不是{bootmgr}
在这里。
c.) 在 Linux 中,您可以使用以下命令重新定义引导顺序:
sudo efibootmgr --bootorder 0001,0000,0003,9999
这应该将ubuntu
条目首先放置在引导顺序中,然后是Windows Boot Manager
,然后是其他现有条目,其顺序与当前的顺序相同。
但请继续阅读...
您的 Pastebin 还表明引导修复已成功执行此操作:
mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi
cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
换句话说,它将 Windows 移到bootmgfw.efi
一边,并用 UEFI GRUB 的副本代替。有时,这对于解决 UEFI 固件错误是必要的,但由于您的系统之前可以工作,因此在您的情况下可能不需要这样做。您需要撤消此操作。在Mint,就sudo cp /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
应该这么做。
或者,如果您进入Windows,它可能会bootmgfw.efi
以“自我修复”的名义立即将其替换为Windows版本,甚至不会告诉您。
看来您的 BIOS 设置在欺骗您:“传统模式”似乎更像是“MBR 或 UEFI,但显然 UEFI 是首选”。
关闭旧模式会导致图像身份验证错误
这意味着“关闭传统模式”也将自动启用安全启动。
由于 Windowsbootmgfw.efi
现在已被替换为 的副本,grubx64.efi
并且直接由没有 的固件加载shimx64.efi
,因此预计安全启动检查将失败......并且“图像身份验证错误”似乎就是这样。
因此,要使您的ubuntu
启动项使用shimx64.efi
安全启动合规性,您需要sudo efibootmgr -b 0001 -l \\EFI\\ubuntu\\shimx64.efi
.如果未使用安全启动,shimx64.efi
则将直接grubx64.efi
在其所在的同一目录中运行,因此即使安全启动未生效,这也不会造成损害。
在 Windows 端执行此操作有点棘手:再次使用bcdedit /enum FIRMWARE
,识别条目的 UUID ubuntu
,然后使用:
bcdedit /set {UUID of the ubuntu entry} path \EFI\ubuntu\shimx64.efi