在 UEFI 上双启动 Windows 10 和 Ubuntu 16.04

在 UEFI 上双启动 Windows 10 和 Ubuntu 16.04

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

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

我对磁盘进行了如下分区(从 Ubuntu live USB 启动后,我从 GParted 获得了这些信息):

/dev/sda

/dev/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

我注意到 Boot0001 旁边没有星号,表示它不是“活动的”。我尝试过将其设置为活动的,也尝试过更改启动顺序,使 Boot0001 排在第一位。我甚至尝试过将 BootNext 更改为 0001。这些都不起作用。我确实注意到激活 Boot0001 的更改在下次启动时被重置 - 所以我的更改没有被保留。

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

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

我似乎无法附加 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
...

我知道我快要解决这个问题了,那么上述哪个建议可能有用呢?我不想陷入 Windows 无法启动并不得不重新启动的情况。重新安装所有内容需要很长时间。

某种程度上的成功。

我的 BIOS 已过时,所以我对其进行了更新。

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

然后我尝试了@fords 的建议 - 在 w$ 中运行 bcdedit - 成功!Grub 显示了大量选择 - Ubuntu 是默认的。

当我重新启动 Windows 时,这一切都变成了泡影,在关机时,Windows 决定应用更新,从而阻止 Ubuntu 启动。(深深的叹息)。

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

sysctl reboot

或者

sysctl defaults

两者都没有起到什么作用。

Windows 更新是否撤消了 Windows bcdedit 和/或 Linux Boot-Repair?如果是,我该如何防止 Windows 更新每天造成严重破坏?

答案1

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

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

我还建议关闭安全启动。在双重启动方面,Windows 是个棘手的问题。

答案2

在 Windows 10 Creator's Update 之后,右键单击 Windows 徽标会显示 PowerShell(Admin) 选项,而不是命令提示符(Admin)。我尝试使用 PowerShell 编辑 bcdedit,但搞砸了。所以,除非您知道自己在做什么,否则不要将 PowerShell 与 bcdedit 一起使用。

解决方案是搜索命令提示符,在管理员模式下打开它(右键单击 -> 以管理员身份打开),然后使用上面已经提到的常规命令 -

bcdedit /set {bootmgr} path "\EFI\ubuntu\shimx64.efi"

如果有人知道如何使用 PowerShell 进行 bcdedit,请在此处发帖。

答案3

我收回刚才的话……w$ 并没有毁了我的一天(令人惊讶)——是我在编辑 /etc/fstab 以优化 ssd 方面的能力太差,导致我无法启动 Ubuntu。一切都很好。

希望我的经历对大家有帮助!

答案4

另一个解决方案是使用两个 EFI 分区。一个仅用于 Windows,另一个用于 Linux 和其他系统,在第二个分区中创建 EFI\Microsoft\Boot\ 路径并将 shimx64.efi 复制到此路径内的 bootmgrfw.efi,并保持 EFI\ubuntu\ 不变。ACER 笔记本电脑将此分区上的 shim 视为 Windows 启动管理器,并从此处启动。我看到 os-prober,如果在此分区中只有 bootmgrfw.efi 而没有 BCD 等,则只识别第一个原始分区上的 Windows 引导加载程序,而不会在 grub.cfg 中创建双重菜单项。因此,您可以启动 GRUB EFI 并使用正确的 chaniload 调用 ubuntu 或 Windows 到另一个分区。在这种模式下,Windows 在第一个分区中保持正确的 EFI 分区结构,并且在更新期间不应覆盖第二个分区中的假 bootmgrfw.efi(shim)。我正在使用 ACER 5750g。

相关内容