Dual-Boot

如何防止引導載入程序消失?

  • October 13, 2019

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

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

我假設 Windows 使您的系統保持“無癌”。

$$ EDIT $$您有兩種解決方案,具體取決於您使用的引導方法,舊版和 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 時,您將被帶到它的引導載入程序菜單,您可以在其中選擇引導 Linux。

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

$$ EDIT $$ 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 並在/etc/grub.d.

你寫出你的 grub 配置到/boot/boot/efi/EFI/manjaro/grub.cfg

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

重新啟動,您“應該”一切順利。

大約兩年前,我遇到了與此類似的問題,使用 Windows 8 雙啟動 Trisquel Linux。我在 Super User 上發布了一個問題/答案當時我被告知雙啟動問題在U&L,出於某種原因)。

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

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

(另外,我認為您不需要啟用安全啟動來啟動 Windows。我啟動到 Windows 8 並禁用它就好了。)

引用自:https://unix.stackexchange.com/questions/523443