UEFI 上雙啟動 Windows 10 和 Ubuntu 16.04

UEFI 上雙啟動 Windows 10 和 Ubuntu 16.04

作為 Ubuntu 的長期用戶,我最近購買了一台 Acer Revo One,它在 60GB SSD 上預先安裝了 Windows 8。這次我決定保留許可證。我利用了 MS Windows 10 的免費升級(我選擇從 USB 光碟進行全新安裝,這樣我就可以控制 SSD 上的分割區 - 我為根分割區留下了足夠的空間)。這個安裝效果很好。

接下來,我安裝了 HDD 並使用 live 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 分割區並複製/重新命名條目)或使用開機修復。

我似乎無法附加 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 開機修復?如果是這樣,我如何防止 Windows 更新每天造成嚴重破壞?

答案1

您是否嘗試過在 Windows 命令提示字元中將預設引導程式設定為 Grub?當我安裝 Ubuntu 以在 Windows 10 上運行時,我必須這樣做:

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

我還建議關閉安全啟動。在雙重啟動方面,Windows 是個脾氣暴躁的野獸。

答案2

Windows 10 建立者更新後,以滑鼠右鍵按一下 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 筆記型電腦將此分割區上的墊片視為 Windows 啟動管理器,並且也從此處啟動。我看到 os-prober,如果在這個分區中只有 bootmgrfw.efi 而不是 BCD 等,則僅識別第一個原始分區上的 Windows 引導程序,而不是在 grub.cfg 中創建雙菜單項目。因此,您可以啟動 GRUB EFI 並使用正確的 chaniload 呼叫 ubuntu 或 windows 到另一個分割區。在此模式下,Windows 在第一個分割區中保留正確的 EFI 分割區結構,並且在更新期間不應覆寫第二個分割區中的假 bootmgrfw.efi (shim)。對我來說,正在使用 ACER 5750g。

相關內容