在 UEFI 上双启动 Windows 10 和 Ubuntu 16.04

Fat*_*Ted 4 dual-boot uefi 16.04

作为 Ubuntu 的长期用户,我最近购买了一台 Acer Revo One,它在 60GB SSD 上预装了 Windows 8。这次我决定保留许可证。我利用免费升级到 MS Windows 10(我选择从 USB 光盘进行全新安装,以便我可以控制 SSD 上的分区 - 我为根分区留出了足够的空间)。此安装工作正常。

接下来,我安装了一个 HDD 并使用实时 USB 继续安装 Ubuntu 16.04。

我按如下方式对磁盘进行了分区(我从 Ubuntu live USB 启动后从 GParted 得到了这个):

/开发/ sda

/开发/sdb

基本上我想要:

  1. 两个操作系统都从 SSD 启动
  2. Ubuntu 将 HDD 用于名义上的/home交换分区和/tmp
  3. Windows 和 Ubuntu 都可以写入的共享分区

我不知道为什么/dev/sdb3并且/dev/sdb4有“msftdata”标志。

启用了安全启动(我已经阅读了各种帖子 - 有人说在安装 Ubuntu 时禁用了它,有人说你不需要这样做)。快速启动被禁用。

然而,Ubuntu 会按预期安装,但在重新启动时(已移除实时 USB 磁盘),机器仅引导至 Windows。

我已经检查了 BIOS,除了 Windows 启动管理器(或安装时的实时 USB 磁盘)之外,没有任何选项可以启动。

efibootmgr 报告:

BootCurrent:0002 
Timeout: 2 seconds  
BootOrder: 0000,0002,0001 
Boot0000* Windows Boot Manager  
Boot0001 ubuntu 
Boot0002* UEFI: SanDisk
Run Code Online (Sandbox Code Playgroud)

我注意到 Boot0001 旁边没有星号暗示它不是“活动的”。我尝试将其设置为活动状态,并且还尝试更改引导顺序,因此 Boot0001 是第一个。我什至尝试将 BootNext 更改为 0001。这些都不起作用。我确实注意到激活 Boot0001 的更改会在下次启动时重置 - 所以我的更改不会被保留。

我阅读了许多帖子,其中提出了一些建议:

  1. 有人说先安装 Windows,有人说相反。
  2. 再次安装 Grub。
  3. 手动修复 EFI 引导加载程序条目(通过安装 EFI 分区和复制/重命名条目)或使用引导修复。

我似乎无法附加 EFI 分区的转储,但这是一个片段:

./EFI
./EFI/Microsoft
./EFI/Microsoft/Boot
./EFI/Microsoft/Boot/bg-BG
./EFI/Microsoft/Boot/bg-BG/bootmgfw.efi.mui
./EFI/Microsoft/Boot/bg-BG/bootmgr.efi.mui
./EFI/Microsoft/Boot/bootmgr.efi
./EFI/Microsoft/Boot/memtest.efi
./EFI/Microsoft/Boot/boot.stl
./EFI/OEM/Boot
...
./EFI/Microsoft/Boot/en-GB
./EFI/Microsoft/Boot/en-GB/bootmgfw.efi.mui
./EFI/Microsoft/Boot/en-GB/bootmgr.efi.mui
...
./EFI/OEM
./EFI/OEM/Boot
./EFI/OEM/Boot/boot.stl
./EFI/OEM/Boot/bootmgfw.efi
./EFI/OEM/Boot/bootmgr.efi
./EFI/OEM/Boot/memtest.efi
./EFI/OEM/Boot/BOOTSTAT.DAT
./EFI/OEM/Boot/BCD
./EFI/OEM/Boot/BCD.LOG
./EFI/OEM/Boot/BCD.LOG1
./EFI/OEM/Boot/BCD.LOG2
...
./EFI/OEM/Boot/en-GB
./EFI/OEM/Boot/en-GB/bootmgfw.efi.mui
./EFI/OEM/Boot/en-GB/bootmgr.efi.mui
...
./EFI/ubuntu
./EFI/ubuntu/fw
./EFI/ubuntu/fwupx64.efi
./EFI/ubuntu/grubx64.efi
./EFI/ubuntu/grub.cfg
./EFI/ubuntu/shimx64.efi
./EFI/ubuntu/MokManager.efi
./OEM
./OEM/AcerOA30.xml
./OEM/Factory
./OEM/Factory/AMIDEWINx64.exe
./OEM/Factory/AMIFLDRV64.sys
./OEM/Factory/CHK.bat
./OEM/Factory/CHK_DK.bat
./OEM/Factory/Delay-Diags.exe
...
Run Code Online (Sandbox Code Playgroud)

我知道我快要解决这个问题了,那么以上哪些建议可能有效?我宁愿不要陷入 Windows 不再启动而不得不重新启动的情况。重新安装所有东西需要很长时间。

一种成功。

我的 BIOS 已经过时了,所以我更新了它。

我还使用 USB 启动盘中的 Boot-Repair 来修复 EFI 启动分区(我不确定它是否已损坏)。

然后我尝试了@fords 建议 - 在 w$ 中运行 bcdedit - 成功!Grub 显示有多种选择 - Ubuntu 是默认设置。

当我重新启动到 Windows 时,这一切都化为乌有,在关闭时,它决定应用一个阻止 Ubuntu 启动的更新。(深深的叹息)。

我得到的只是几行建议我尝试

sysctl reboot
Run Code Online (Sandbox Code Playgroud)

或者

sysctl defaults
Run Code Online (Sandbox Code Playgroud)

两者都没有太大作用。

Windows 更新是否撤消了 Windows bcdedit 和/或 Linux 引导修复?如果是这样,我如何防止 Windows 更新每天造成严重破坏?

小智 8

您是否尝试在 Windows 命令提示符下将默认引导加载程序设置为 Grub?当我安装 Ubuntu 以在 Windows 10 上运行时,我必须这样做:

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
Run Code Online (Sandbox Code Playgroud)

我还建议关闭安全启动。在双启动方面,Windows 是一个脾气暴躁的野兽。