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

yxd*_*yxd 7 grub2 dual-boot uefi windows-8

我已经安装了 UEFI 风格的 Windows 8 和 Ubuntu 12.10(先是 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)
Run Code Online (Sandbox Code Playgroud)

Rod*_*ith 5

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

ls -l `find /boot/efi -iname "*\.efi"`
ls -l `find /boot/efi -iname "*\.bkp"`
sudo parted /dev/sda print
Run Code Online (Sandbox Code Playgroud)

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

结果应该是 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 Boot Repair 工具实施了一个修复程序,该修复程序至少与它绕过的错误一样丑陋和混乱:它使用.bkp扩展重命名这两个默认引导加载程序,将 GRUB 的副本放置在它们的位置,并调整 GRUB这样它将使用新名称启动 Windows 引导加载程序。这会使 GRUB 启动,但以 Windows 无法理解的方式启动,并且可能会尝试“修复”自身。我认为这就是正在发生的事情——当 Windows 启动时,它看到它的引导加载程序已被另一个加载程序覆盖,因此它试图纠正问题。

我建议您尝试以下操作:

  1. 检查制造商的网站以查看是否有固件更新。如果有,请将您的固件更新到最新版本,以防万一有针对此类启动错误的错误修复。
  2. 启动 Windows 并重新启动以验证您在重新启动时是否直接进入 Windows。您想从这一点开始,因为它比引导修复设置的方式更标准。
  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 引导管理器”,以防您遇到该错误。(你可以尝试用更少的欺骗性的名字,并在该会工作,但也许并不适合你。大多数系统),如果你使用的安全引导,你可以替换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 查看自己的引导加载程序。不过,这是高度投机的。它可能根本不起作用。
  • 使用我的rEFInd 启动管理器创建一个 USB 闪存驱动器。然后您就可以将它插入计算机并从 USB 设备启动以获取 rEFInd,然后它应该会检测到 Windows 和 GRUB 并为您提供启动选项。通过一些额外的重新配置,您可以让它直接引导 Linux。如果您可以将固件设置为默认从 USB 设备启动,您可以让 USB 驱动器永久插入以获得永久解决方案。
  • 从 Windows安装 rEFInd 或 GRUB 我对此并不肯定,但是如果您从 Windows 安装引导加载程序(如 rEFInd 的网站上所述),它可能会绕过 Windows 中正在处理引导加载程序的任何内容,从而使您首选的引导加载程序能够在默认情况下运行。

请注意,如果您使用任何涉及 rEFInd 的解决方案,您可能需要使用安全启动对其进行设置,这涉及跳过一些额外的环节。(这种情况会及时改善,但现在还是有点尴尬。)或者,您可以在固件中禁用安全启动。

我希望这有帮助!


归档时间:

查看次数:

6915 次

最近记录:

10 年,5 月 前