如何防止引導載入程序消失?
我通過 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 並禁用它就好了。)