
我在筆記型電腦上安裝了帶有 uefi 的 W10 / Ubuntu 雙重開機。
但是當我打開電腦時,沒有 grub,它會自動在 Windows 10 上啟動。
當我按啟動選項時,然後手動選擇好的 efi 檔案(ubuntu 的)
它可以工作,我有我的 grub (使用 ubuntu + windows)
所以我嘗試使用 bcdedit 更改啟動項(在 Windows cmd 中):
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
但我沒有進行任何更改,電腦仍然在 Windows 10 上自動啟動。
當我打開電腦時如何啟動 shimx64.efi?
答案1
嘗試使用第三方EasyUEFI;它有一個更簡單的用戶介面,並繞過了一些問題bcdedit
。
如果失敗,則 EFI 可能有缺陷。此時有多種選擇,依優先順序排列:
- 某些 EFI 需要設定密碼或明確將二進位檔案列入白名單才能啟動。宏碁尤其因此而臭名昭著。看這個 AskUbuntu 問題和解答有關如何解決此問題的資訊。
- 韌體升級(查看製造商的網站)可能幫助,但這是一個漫長的過程——升級可能會刪除 Ubuntu 選項,這將需要重新建立它們。
- 如果仍然可能,我的下一個建議是退回計算機以獲得退款。製造商解決此類問題的速度太慢。大多數人都這樣做了,但是如果您的新電腦有此錯誤,那麼此時沒有任何藉口。如果您退回計算機,請務必寫信給製造商,告訴他們退回計算機的原因。
- 近乎最後的最後手段選項是重新命名 Windows 引導程式檔案(
EFI/Microsoft/Boot/bootmgfw.efi
在EFI系統分割區[ESP]) 到其他內容,並將 GRUB(grubx64.efi
; 或 Shim [shimx64.efi
],如果您想在啟用安全啟動的情況下啟動)放在其位置,然後重新配置 GRUB 以使用新的 Windows 啟動載入程式名稱啟動 Windows。這啟動修復工具在其“高級”功能表上有一個選項可以執行此操作。你可以用我的做類似的事情rEFInd 啟動管理器以其mvrefind
命令。 - 絕對的最後一搏的可能性是在 BIOS/CSM/legacy 模式而不是 EFI 模式下重新安裝 Windows 和 Ubuntu。 (您也許可以將磁碟從 GPT 轉換為 MBR 並重新安裝兩個作業系統的引導程序,但這個過程很乏味,並且很容易最終導致災難,所以我建議您僅在以下情況下使用它:我是專家。
答案2
如果您先安裝了 Ubuntu,這可能是正常行為。
正如評論所說,您必須使用 grub。
https://www.lifewire.com/fix-uefi-bootloader-issues-when-dual-booting-2200655
這篇文章可能會有所幫助,它是針對 uefi 系統並更改「啟動順序」以便出現 Grub。
答案3
(這是對羅德史密斯答案的評論,不幸的是我沒有足夠的業力。)
EFI/Microsoft/Boot/bootmgfw.efi
無論 EFI NVRAM 設定如何,我的(HP)筆記型電腦都會先嘗試啟動,重命名該檔案對我來說完美無缺。
不要忘記編輯您的 chainloader 行以grub.cfg
指向重新命名的 Windows EFI。此外,Windows 有時會在更新後「修復」您的啟動分割區,因此您必須再次重新命名它。
答案4
感謝以下人士的回答羅德史密斯,它透過軟體的介紹幫助我解決了我的問題EasyUEFI。我將提供我的故事,希望它可以幫助別人。
我正在使用命令更改引導程序bcdedit
,但沒有成功。看軟體EasyUEFI,我可以看到 Fedora 引導程式以及 Windows 引導程式(看到了 2 個 Windows 引導程式 - 第 2 個是大概由 Grub 用於引導到 Windows),但在 cmd 中bcdedit
只顯示一個條目,該條目正在更改,從 EasyUEFI 中可以看出 - 但更改發生在優先級最低的 Windows 開機載入程式中,這就是為什麼它一開始就沒有用-顯示使用 EasyUEFI 與 CMD 的開機載入程式順序的映像。
但是,還有另一個問題,即使將引導程式優先權變更為 Fedora 為最高(grub 引導程式),重新啟動後(即使安全啟動關閉),Windows 仍然可以啟動!在 EasyUEFI 面板中,我可以看到 Windows Bootloader 已經到達頂部。
透過將特定的 Windows BootLoader 路徑更改為 Grub 引導程序,問題得到了解決 - 這是我們通常使用命令執行的操作
bcdedit /set {bootmgr} path <path_to_the_bootloader>
,但這裡它影響了先前優先級最低的 Windows Bootloader。