Windows 8 每次启动都会更改 GRUB2!

Windows 8 每次启动都会更改 GRUB2!

我已经安装了 Windows 8 和 Ubuntu 12.10,两者都是 UEFI 风格(先是 win8,然后是 ubuntu)。GRUB2 向我显示了 Ubuntu 和 Win8 条目。

如果我启动 Ubuntu 就没问题了。我可以随时重新启动,我会看到 GRUB2 保持不变。

当我启动 Win8 时,情况发生了变化。当我使用 GRUB2 启动 Win8 时,它会带我进入 Windows 启动管理器(其中只有 Windows 8 条目)。我进入 Windows,它启动正常。当我重新启动时,没有 GRUB2 也没有 Win 加载程序。它没有引导加载程序。

我启动了 LiveCD 并下载了启动修复程序,一切都恢复正常了。这是一个永无止境的循环。

GRUB2 是否应该加载 Win 引导加载程序?我该怎么做才能修复它?

更多信息:

USER@MACHINE:~$ ls -l `find /boot/efi -iname "*\.efi"`

-rwxr-xr-x 1 root root 1357480 Dec  9 21:41 /boot/efi/EFI/Boot/bootx64.efi
-rwxr-xr-x 1 root root 1357480 Dec  9 21:41 /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
-rwxr-xr-x 1 root root 1350896 Jul 25 20:57 /boot/efi/EFI/Microsoft/Boot/bootmgr.efi
-rwxr-xr-x 1 root root 1357480 Dec  9 21:41 /boot/efi/EFI/Microsoft/Boot/bootx64.efi
-rwxr-xr-x 1 root root 1263856 Jul 25 20:57 /boot/efi/EFI/Microsoft/Boot/memtest.efi
-rwxr-xr-x 1 root root  897400 Dec  9 21:41 /boot/efi/EFI/ubuntu/grubx64.efi
-rwxr-xr-x 1 root root 1357480 Dec  9 21:41 /boot/efi/EFI/ubuntu/shimx64.efi

USER@MACHINE:~$ ls -l `find /boot/efi -iname "*\.bkp"`

-rwxr-xr-x 1 root root 1354480 Jul 25 20:57 /boot/efi/EFI/Boot/bootx64.efi.bkp
-rwxr-xr-x 1 root root 1354480 Jul 25 20:57 /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi.bkp

USER@MACHINE:~$ sudo parted /dev/sda print

Model: ATA ST31000524AS (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      1049kB  316MB   315MB   ntfs            Basic data partition          hidden, diag
 2      316MB   420MB   105MB   fat32           EFI system partition          boot
 3      420MB   555MB   134MB                   Microsoft reserved partition  msftres
 4      555MB   751GB   750GB   ntfs            Basic data partition
 5      751GB   998GB   248GB   ext4
 6      998GB   1000GB  2000MB  linux-swap(v1)

答案1

启动 Linux,在 shell 中输入以下三个命令,然后在此处发布输出:

ls -l `find /boot/efi -iname "*\.efi"`
ls -l `find /boot/efi -iname "*\.bkp"`
sudo parted /dev/sda print

请注意,这些是命令周围的反引号(在大多数键盘上位于“1”键的左侧)find

结果应该是 ESP 上的所有引导加载程序的列表,包括常规名称和由引导修复创建的重命名版本;以及磁盘上所有分区的列表。

另外,您使用的是什么类型的计算机?(品牌和型号。)它是自带 Windows 8 的吗,还是您自己安装的?

不幸的是,一些制造商在预装 Windows 8 的计算机上使用引导加载程序玩弄令人讨厌的游戏。在我看来,取消这些安装并从头开始看起来越来越像是一个好的解决方案。


编辑/回答给出的新信息:

您的输出中没有任何奇怪或意外的内容,因此看起来好像 Windows 中的某些东西正在“修复”它认为是其自身“损坏”的引导加载程序。这需要一些详细说明,这将帮助您了解发生了什么:

EFI(或 UEFI,即 EFI 2.x)实现应该检查 NVRAM 条目,以决定.efi在启动时运行哪个引导加载程序(带有扩展名的文件)。但有些实现存在问题,只能启动EFI/BOOT/bootx64.efiEFI/Microsoft/Boot/bootmgfw.efi引导加载程序。其他实现将启动其他引导加载程序,但前提是它们的名称为“Windows Boot Manager”或“Red Hat Enterprise Linux”。

为了解决此类错误,Ubuntu 启动修复工具实施了一种修复,但这种修复至少与它绕过的错误一样丑陋和令人困惑:它使用.bkp扩展名重命名这两个默认启动加载程序,将 GRUB 的副本放在它们的位置,并调整 GRUB,以便它使用新名称启动 Windows 启动加载程序。这会让 GRUB 启动,但 Windows 无法理解这种启动方式,可能会尝试“修复”自己。我认为这就是正在发生的事情——当 Windows 启动时,它会发现它的启动加载程序已被另一个加载程序覆盖,因此它会尝试纠正该问题。

我建议您尝试以下操作:

  1. 检查制造商的网站,看看是否有固件更新。如果有,请将固件更新到最新版本,以防有针对此类启动错误的修复程序。
  2. 启动 Windows 并重新启动,以验证重新启动后是否直接进入 Windows。您需要从此处开始,因为它比 Boot Repair 设置的方式更标准。
  3. 以 EFI 模式启动 Linux 紧急磁盘。(Ubuntu 安装磁盘应该可以正常工作。)
  4. 如果需要,请安装该efibootmgr实用程序。在 Ubuntu Live CD 中,你可以输入 来安装它sudo apt-get install efibootmgr
  5. 输入sudo efibootmgr -c -l \\EFI\\ubuntu\\shimx64.efi -L "Windows Boot Manager" -p 2。请小心输入此命令确切地按照指定的方式,包括使用双反斜杠作为目录路径分隔符。这应该会将 GRUB 设置为默认引导加载程序,并为其赋予固件标签“Windows Boot Manager”,以防您遇到该错误。(您可以尝试使用不太容易引起误解的名称,在大多数系统上都可以使用,但可能不适合您。)如果您不是使用安全启动,您可以在此命令中替换grubx64.efishimx64.efi但考虑到shimx64.efi您的系统上存在,我怀疑您正在使用安全启动。
  6. 重新启动并测试。

如果此时它可以工作,那就太好了。如果它启动到 GRUB 但 GRUB 无法启动 Windows,您可能需要调整 GRUB 配置,以便它引用EFI/Microsoft/Boot/bootmgfw.efi而不是EFI/Microsoft/Boot/bootmgfw.efi.bkp

如果您无法让系统以这种方式启动 GRUB,那么您的固件可能已经严重损坏,而 Windows 中的某些功能会在每次启动时自动“修复”已“损坏”的引导加载程序,从而关闭了您最好的(尽管不太好)修复途径。在这种情况下,我有几个进一步的建议:

  • 如果电脑足够新,请将其退回商店并换一台新电脑。向商店和制造商明确说明退货原因。
  • 查找 Windows 中正在检查和“修复”其引导加载程序的程序并将其禁用。然后,您应该能够使用 Ubuntu 的引导修复,或手动执行类似操作,以使一切正常运行。
  • 创建第二个 ESP 并使用 Microsoft 名称将 GRUB(或另一个 Linux 引导加载程序)安装到其中。通过调整分区 ID 号(例如使用 gdisk - 使用t专家菜单上的选项),您可能能够让固件使用您想要的引导加载程序,同时让 Windows 查看其自己的引导加载程序。这是高度但这只是推测,它可能根本不起作用。
  • 使用我的创建 USB 闪存盘rEFInd 启动管理器。然后,您就可以将其插入计算机并从 USB 设备启动以获取 rEFInd,然后它应该会检测到 Windows 和 GRUB,并为您提供启动选项。只需进行一些额外的重新配置,您就可以让它直接启动 Linux。如果您可以将固件设置为默认从 USB 设备启动,则可以将 USB 驱动器永久插入以获得永久解决方案。
  • 安装 rEFInd 或 GRUB来自 Windows。我对此并不确定,但如果您从 Windows 安装引导加载程序(如 rEFInd 网站上所述),它可能会绕过 Windows 中对引导加载程序的任何处理,从而使您首选的引导加载程序默认运行。

请注意,如果您使用涉及 rEFInd 的任何解决方案,则可能需要使用安全启动,需要克服一些额外的困难。(这种情况会随着时间的推移而改善,但目前仍然有点尴尬。)或者,您可以在固件中禁用安全启动。

我希望这有帮助!

答案2

不要采用建议的修复方法,请尝试以下操作:

  1. 运行Boot-Repair-->高级选项-->取消勾选Backup and rename EFI files-->勾选Restore EFI backups-->应用。
  2. 重新启动电脑
  3. 如果它直接启动到 Windows,请设置您的 UEFI 固件(~BIOS)以启动该Ubuntu条目,然后重新启动。

答案3

微软一如既往地糟糕,他们不想要其他操作系统,所以他们只是覆盖了启动管理器。在 Windows 8 中查找bcdedit。直到现在我才发现如何更改它。

防止 Windows 8 覆盖默认 bootmgr

答案4

启用快速重启功能的 Windows 8 将在关机时“恢复”一些数据,包括 EFI 引导加载程序。因此,在您完成双启动环境设置并启动 Windows 8 一次后,您将在下次启动时丢失双启动设置。这就是您需要关闭快速重启功能的原因。

以管理员身份启动 cmd.exe 并输入:

powercfg /h off

验证设置:

powercfg /a

相关内容