作为 Ubuntu 的长期用户,我最近购买了一台 Acer Revo One,它预装了 Windows 8 和 60GB SSD。这次我决定保留许可证。我利用了免费升级到 MS Windows 10 的机会(我选择从 USB 磁盘进行全新安装,这样我就可以控制 SSD 上的分区 - 我为根分区留出了足够的空间)。这个安装工作正常。
接下来,我安装了一个 HDD,并使用实时 USB 继续安装 Ubuntu 16.04。
我对磁盘进行了如下分区(从 Ubuntu live USB 启动后,我从 GParted 获得了这些信息):
基本上我想要:
- 两个操作系统都从 SSD 启动
- Ubuntu 使用 HDD 作为名义上的
/home
、交换分区和/tmp
- 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 的更改在下次启动时被重置 - 所以我的更改没有被保留。
我读了很多帖子,其中提出了一些建议:
- 有人说先安装 Windows,也有人说相反。
- 再次安装 Grub。
- 手动修复 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。