GRUB Bootloader 依靠我的可啟動快閃記憶體驅動器在內部 eMMc 驅動器上找到 Windows 10
對於這個問題的其餘部分,您可以假設任何帶有“內部”的東西是指我的筆記型電腦的內部 eMMc 驅動器,任何帶有“USB”的東西都是指我的可啟動 USB 快閃記憶體驅動器,“Debian”是指 Debian Buster,“Windows”是指 Windows 10.
我在內部驅動器上安裝了 Windows,在可啟動的 USB 快閃記憶體驅動器上安裝了 Debian。我的引導設置是 Grub Bootloader 優先於預設引導載入程序。
我的問題是,每當未連接可啟動驅動器時,Grub 顯然找不到任何東西並啟動命令行界面。連接後,圖形界面允許我在 Debian 和 Windows 之間進行選擇作為標準。
我已經在 Stack Exchange 上尋找了一個足夠相似的答案,但是當我告訴你我還不夠好,無法使用我發現的東西來解決問題時,請相信我。我引用:
這些都與我的情況無關,因為當連接 USB 記憶棒時我可以讓兩個作業系統都執行良好,並且我可以在 CLI Grub 出現之前ESC和****F9選擇我的啟動設備(Windows 是唯一可用的)。
我被困住了。理想情況下,我希望當 U 盤未連接時,我的電腦會自動啟動到 Windows,或者如果這不可能,允許我選擇我的啟動方法,而不必在 CLI Grub 啟動之前狙擊ESC 。
您似乎有一個基於 UEFI 的系統。GRUB 和 Windows 引導載入程序都安裝在 EFI 系統分區(簡稱 ESP)中,這是
(hd1,1)
GRUB 看到的分區。Debian 10 的預設 UEFI GRUB 基本上包括主
grubx64.efi
執行檔中的所有 GRUB 模組,因此缺少文件系統驅動程序不應該是這裡的問題。您的內部 eMMC 具有標準的 Windows 分區:
(hd1,1)
是 ESP,具有 FAT32 文件系統,大小約為 260M(在 4k 塊大小的磁碟上支持 FAT32 的最小大小)(hd1,2)
是“Microsoft Reserved”分區,完全沒有格式化,大小約為128M。它的存在是為了允許輕鬆轉換為 Windows 動態磁碟(相當於 Windows 的 Linux LVM)或其他轉換。(hd1,3)
是您的主要 Windows 系統驅動器,具有 NTFS 文件系統。(hd1,4)
是另一個具有 NTFS 文件系統的分區,可能是 Windows 恢復分區。您的所有 Linux 分區都位於外部快閃記憶體驅動器上。還有一個問題:預設情況下,Debian 10 只將一個非常小的 GRUB 配置文件安裝到 ESP 中。本質上,它僅通過 UUID 辨識包含 Linux
/boot
目錄的文件系統,並告訴 GRUB 從那裡載入其真實配置。顯然,當外部快閃記憶體驅動器斷開連接時,這不會發生。真正的配置文件包含所有啟動菜單定義,包括 Windows 的定義。沒有它們,GRUB 只能顯示命令提示符。您可以通過啟動 Linux 並將真正的 GRUB 配置文件複製到 ESP 來解決此問題,如下所示:
mv /boot/efi/EFI/debian/grub.cfg /boot/efi/EFI/debian/grub.cfg.mini cp /boot/grub/grub.cfg /boot/efi/EFI/debian/grub.cfg
但是,該
update-grub
命令(由 Debian 的核心更新包使用!)不會自動更新新位置。幸運的是,該命令只是一個腳本,因此很容易修改。首先,在包管理系統中創建一個轉移,這樣任何更新都不會覆蓋我們的更改:
dpkg-divert --local --rename --add /usr/sbin/update-grub
這將自動將目前重命名
/usr/sbin/update-grub
為/usr/sbin/update-grub.distrib
並將它的任何未來更新重定向到新位置。現在,您可以將腳本複制回原始位置,然後使用您喜歡的文本編輯器對其進行修改。
cp -a /usr/sbin/update-grub.distrib /usr/sbin/update-grub
最初,腳本如下所示:
#!/bin/sh set -e exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
您需要像這樣修改第三行:
#!/bin/sh set -e exec grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg "$@"
在任何主要的系統更新後(例如從 Debian 10 “buster” 到 Debian 11),您應該重新檢查
/usr/sbin/update-grub.distrib
和修改/usr/sbin/update-grub
以驗證轉移仍然有效並且新版本沒有對update-grub
腳本帶來任何更改。實際上,您可能還需要將一些其他文件複製到 ESP,例如 GRUB 字型檔(從
/boot/grub/fonts/unicode.pf2
到/boot/efi/EFI/debian/fonts/unicode.pf2
)以及可能的 GRUB 菜單背景圖像或與您可能正在使用的 GRUB 主題相關的類似內容。