我已经安装了 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.efi
或EFI/Microsoft/Boot/bootmgfw.efi
引导加载程序。其他实现将启动其他引导加载程序,但前提是它们的名称为“Windows Boot Manager”或“Red Hat Enterprise Linux”。
为了解决此类错误,Ubuntu 启动修复工具实施了一种修复,但这种修复至少与它绕过的错误一样丑陋和令人困惑:它使用.bkp
扩展名重命名这两个默认启动加载程序,将 GRUB 的副本放在它们的位置,并调整 GRUB,以便它使用新名称启动 Windows 启动加载程序。这会让 GRUB 启动,但 Windows 无法理解这种启动方式,可能会尝试“修复”自己。我认为这就是正在发生的事情——当 Windows 启动时,它会发现它的启动加载程序已被另一个加载程序覆盖,因此它会尝试纠正该问题。
我建议您尝试以下操作:
- 检查制造商的网站,看看是否有固件更新。如果有,请将固件更新到最新版本,以防有针对此类启动错误的修复程序。
- 启动 Windows 并重新启动,以验证重新启动后是否直接进入 Windows。您需要从此处开始,因为它比 Boot Repair 设置的方式更标准。
- 以 EFI 模式启动 Linux 紧急磁盘。(Ubuntu 安装磁盘应该可以正常工作。)
- 如果需要,请安装该
efibootmgr
实用程序。在 Ubuntu Live CD 中,你可以输入 来安装它sudo apt-get install efibootmgr
。 - 输入
sudo efibootmgr -c -l \\EFI\\ubuntu\\shimx64.efi -L "Windows Boot Manager" -p 2
。请小心输入此命令确切地按照指定的方式,包括使用双反斜杠作为目录路径分隔符。这应该会将 GRUB 设置为默认引导加载程序,并为其赋予固件标签“Windows Boot Manager”,以防您遇到该错误。(您可以尝试使用不太容易引起误解的名称,在大多数系统上都可以使用,但可能不适合您。)如果您不是使用安全启动,您可以在此命令中替换grubx64.efi
,shimx64.efi
但考虑到shimx64.efi
您的系统上存在,我怀疑您正在使用安全启动。 - 重新启动并测试。
如果此时它可以工作,那就太好了。如果它启动到 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
不要采用建议的修复方法,请尝试以下操作:
- 运行Boot-Repair-->高级选项-->取消勾选
Backup and rename EFI files
-->勾选Restore EFI backups
-->应用。 - 重新启动电脑
- 如果它直接启动到 Windows,请设置您的 UEFI 固件(~BIOS)以启动该
Ubuntu
条目,然后重新启动。
答案3
微软一如既往地糟糕,他们不想要其他操作系统,所以他们只是覆盖了启动管理器。在 Windows 8 中查找bcdedit
。直到现在我才发现如何更改它。
答案4
启用快速重启功能的 Windows 8 将在关机时“恢复”一些数据,包括 EFI 引导加载程序。因此,在您完成双启动环境设置并启动 Windows 8 一次后,您将在下次启动时丢失双启动设置。这就是您需要关闭快速重启功能的原因。
以管理员身份启动 cmd.exe 并输入:
powercfg /h off
验证设置:
powercfg /a