如何防止引導程式消失?

如何防止引導程式消失?

我在使用 Bitlocker 和安全啟動的 Lenovo Yoga C930 上透過 Grub 和 UEFI 雙啟動 Manjaro 和 Windows。如果我在 BIOS 中停用安全啟動,我可以成功啟動到 Manjaro,如果我在 BIOS 中重新啟用安全啟動,我也可以啟動到 Windows。由於未知的原因,而且似乎是隨機的,我會丟失我的 Linux 引導程式。我不知道它是否被刪除,或者突然無法識別,或者什麼,但我無法從它啟動,並且它沒有顯示為 BIOS 中的選項。

我可以按照 Wiki 上的說明設法重新安裝 Grub,但最終它會消失。這是怎麼回事,我該如何防止這種情況發生?

答案1

我認為 Windows 正在讓您的系統保持「無癌」狀態。

[編輯] 您有兩種解決方案,取決於您使用的引導方法:傳統引導方法和 UEFI。

遺產:

您可以用作bcd啟動管理器來啟動 Windows 或 Linux。

假設您已安裝 grub/dev/sda/dev/sda1是 Windows EFI 分割區

在Linux中:

mount /dev/sda1 /mnt
dd if=/dev/sda of=/mnt/linux.bin bs=512 count=1

在 Windows 中:

bcdedit /create /d "Linux" /application bootsector

BCDEdit 將傳回該條目的字母數字標識符,我將在其餘步驟中稱為 {ID}。您需要將 {ID} 替換為實際傳回的識別碼。 {ID} 的範例為 {d7294d4e-9837-11de-99ac-f3f3a79e3e93}。接下來,讓我們指定哪個分割區託管 linux.bin 檔案的副本:

bcdedit /set {ID} device partition=c:

我們的 linux.bin 檔案的路徑:

bcdedit /set {ID}  path \linux.bin

啟動時顯示的選單項目:

bcdedit /displayorder {ID} /addlast

最後,讓我們指定選單選項的顯示時間:

bcdedit /timeout 30

就是這樣!現在重新啟動,您將看到選單,您可以在其中選擇啟動到 Windows 或 Linux。當您選擇 Linux 時,您將進入 it 引導程式選單,您可以在其中選擇引導 Linux。

https://www.iceflatline.com/2009/09/how-to-dual-boot-windows-7-and-linux-using-bcdedit/

[編輯] UEFI

您的 Windows 系統有一個 EFI 分割區,可以從該分割區啟動。在 Linux 中,您將其安裝到/boot.然後,請確保您grub.cfg正在使用 uuid 來尋找根分割區(預設為這樣):例如: linux /vmlinuz-4.4.0-1-default root=UUID=6159e15d-f224-499d-88e0-437b5538f0f1 quiet splash=silent,如果沒有,您可以使用blkid列出根分割區的 UUID 並在 中調整 grub 配置/etc/grub.d

您將 grub 配置寫入/boot/boot/efi/EFI/manjaro/grub.cfg

grub2-mkconfig -o /boot/boot/efi/EFI/manjaro/grub.cfg

重新啟動,你「應該」就可以開始了。

答案2

大約兩年前,我遇到了類似的問題,使用 Trisquel Linux 和 Windows 8 雙重啟動。這裡關於超級用戶(當時有人告訴我,出於某種原因,雙啟動問題在 U&L 上是題外話)。

正如您將在這些帖子中看到的,問題不是 Windows 刪除或覆蓋 GRUB,而是它定期更改 UEFI 設定以告訴它使用 Windows 引導程序,而不是 GRUB。解決方案是在Windows中使用bcdedit,將預設引導程式路徑設定為GRUB,這解決了我的問題。

我不知道相同的解決方案是否適合您,但也許值得一試?

(另外,我認為您不需要啟用安全啟動來啟動 Windows。我在停用它的情況下啟動到 Windows 8 就可以了。)

答案3

我實際上自己解決了這個問題。結果我必須手動efibootmgr建立一個新的啟動項,並給它一個高優先級。到目前為止,一切都很好。

相關內容