在 Windows 10 旁邊安裝了 Debian,但沒有顯示 GRUB
我有一個安裝了 Windows 10 的 SSD,一個硬碟驅動器最初完全在 NTFS 中分區 - 但我使用 Debian 安裝程序縮小了 NTFS 並在新釋放的空間上安裝了 Debian。
奇怪的是,安裝程序告訴我它沒有檢測到 Windows,並要求我確認將 GRUB 寫入 MBR。我拒絕了,並要求將 GRUB 安裝到剛剛安裝 Debian 的硬碟上(這與安裝 Windows 的 SSD 不同)。
我在我的 BIOS 中禁用了安全啟動,但即便如此電腦在 Windows 上自動啟動而不顯示 GRUB,並且 Windows 啟動管理器是我的 BIOS 在啟動管理器中檢測到的唯一一個。我的 BIOS 中沒有任何選項可以信任/選擇 EFI 文件,正如我檢查過的論壇中經常指出的那樣。
我想在 Windows 上自動啟動,除非我按住 SHIFT 在 Debian 上啟動(我知道在啟動時顯示 GRUB 時如何執行此操作……但它沒有)。我該怎麼辦?
我的電腦是聯想軍團Y520。
如果您的 BIOS 有一個引導選項,字面意思是“Windows 引導管理器”,這強烈表明您的 Windows 已經以 UEFI 樣式安裝。Debian 安裝程序甚至提供將 GRUB 寫入 MBR 的事實表明 Debian 安裝程序已以舊版 BIOS 樣式啟動。
16 位傳統 BIOS 引導載入程序無法鍊式載入 UEFI 引導載入程序(無需先轉換為 32 位或 64 位模式並設置 UEFI 環境,這有悖於首先處於傳統 16 位模式的目的地方)。
通常,用於引導 OS 安裝程序的引導模式(BIOS 與 UEFI)將自動確定要安裝的新 OS 將使用哪種模式。在 UEFI 模式下執行的作業系統安裝程序在技術上可以安裝基於 BIOS 的引導載入程序,而不是基於 UEFI 的引導載入程序,但相反的情況通常是不可能的,因為啟動舊版 BIOS 兼容性需要禁用 UEFI 執行時服務介面,這是編寫引導程序所必需的設置到系統 NVRAM 中(例如 BIOS 設置中的“Windows 引導管理器”文本) - 這是完成 UEFI 引導載入程序安裝的要求。
看起來您的筆記型電腦目前可能更喜歡在傳統 BIOS 模式下啟動而不是 UEFI,如果啟動媒體具有兩個可用選項,並且 Debian 10 安裝媒體確實具有這兩個選項。所以它可能在 BIOS 模式下啟動了 Debian 安裝程序,因此無法以標準方式完成 UEFI 引導載入程序的安裝。在 BIOS 模式下,安裝程序也不會告訴您安裝 UEFI 引導載入程序需要在要安裝 UEFI 引導載入程序的磁碟上具有 ESP(EFI 系統分區)。如果您沒有選擇在 HDD 上創建一個,則說明沒有安裝 UEFI 引導載入程序的有效位置。
還有一個問題是某些 UEFI 韌體實現存在錯誤和/或以 Windows 為中心。正如 Debian Wiki 所說:
不幸的是,許多 UEFI 韌體實現存在錯誤,如前所述。儘管引導條目和引導順序的規範非常清楚事情應該如何工作,但仍有很多系統出錯了。一些系統簡單地忽略添加新引導條目的有效請求。其他人會接受這些請求,但會拒絕使用它們,除非他們將自己描述為“Windows”或類似名稱。還有很多其他類似的錯誤,這表明許多系統供應商除了“它適用於 Windows 嗎?”之外幾乎沒有做任何測試。
幸運的是,系統供應商偶爾會修復韌體錯誤。因此,第一步,查看聯想是否有適用於您的型號的更新韌體(“BIOS 更新”),如果有,請安裝它。這可能會使安裝雙引導配置更容易。
作為第二步,如果可以的話,您可能應該禁用舊版 BIOS 兼容性功能。如果您發現“BIOS”設置允許強制系統僅使用 UEFI,請選擇該設置;或者有一個提到 CSM(“兼容性支持模組”)的設置,禁用它。現在應該更容易讓 Debian 安裝程序以 UEFI 模式啟動,就像您現有的 Windows 安裝一樣。這將使它安裝正確類型的引導載入程序。
作為第三步,請注意擁有 ESP(EFI 系統分區)的要求。它本質上是一個小的 FAT32 分區(僅 Debian 10 就足夠了 256M),在 Debian 中應該掛載到
/boot/efi
. 如果你使用 MBR 分區,它應該有一個特殊的分區類型程式碼0xef
;如果使用 GPT 分區,將分區標記為“可引導”和/或“ESP”的分區選項應該是正確的。如果您以後想這樣做,在您的 HDD 上安裝 ESP 將允許您將 HDD 移動到另一個系統並從中引導您現有的 Debian 安裝。為 Debian 在 HDD 上創建單獨 ESP 的替代方法是在設置分區時選擇 SSD 上的 Windows ESP,選擇不對其進行格式化,而是將其與現有文件系統一起掛載為
/boot/efi
. ESP 上的標準化目錄結構旨在處理同一 ESP 上多個作業系統的引導載入程序。如果您選擇此選項,Debian 10 的 UEFI 引導載入程序應該很好地適合標準 Windows 10 ESP 並留有餘地。但是您可能必須進入“高級/手動”分區選項才能執行此操作。如果您在此之後仍有問題,我建議您閱讀Roderick W. Smith 關於 UEFI 引導載入程序挑戰的文本。它是為 rEFInd 引導載入程序編寫的,但其中描述的許多內容也適用於 UEFI 版本的 GRUB。
一旦你的兩個作業系統都以 UEFI 風格啟動:
如果您的 SSD 是 NVMe 類型,那麼它在 Linux 中可能顯示為
/dev/nvme0n1
(其分區為/dev/nvme0n1pN
,N = 分區號)。確保 Linux 看到您的 SSD,然後update-grub
以 root 身份執行。如果它沒有說它檢測到 Windows,
blkid
請以 root 身份執行:它應該報告所有文件系統和分區的 UUID。在 SSD 上找到 Windows ESP 的文件系統UUID。如果 Windows ESP 使用標準的 FAT32 文件系統類型,它應該在表格中列出UUID="xxxx-xxxx"
(它實際上是一個 FAT32 文件系統序列號)。知道 UUID 後,您可以為 Windows 配置自定義 GRUB 菜單條目,方法是將以下幾行添加到末尾
/etc/grub.d/40_custom
:menuentry 'Whatever you want the Windows 10 boot menu entry to say' { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root xxxx-xxxx chainloader /EFI/Microsoft/Boot/bootmgfw.efi }
這應該是適用於 Windows 的基本 UEFI 鏈載入器條目。只需替換
xxxx-xxxx
為實際的 Windows ESP 文件系統 UUID。編輯文件後,update-grub
以 root 身份執行。然後將預設引導選項設置為debian
,你應該有你的引導菜單。聯想可能選擇超越 UEFI 規範要求並在其 UEFI 韌體中實現 NTFS 文件系統支持,並提供在 ESP 上使用 NTFS 的 Windows 安裝。在這種情況下,替換
insmod fat
為insmod ntfs
,文件系統 UUID 將具有不同的格式:在blkid
輸出中將類似於UUID="A268B58668B559AD"
.注意:查看
efibootmgr
命令。您可以使用它來操作 Linux 中的韌體啟動設置,而無需進入 BIOS 設置菜單。在 Windows 中,bcdedit
也可以這樣做,儘管我認為它的使用者界面更尷尬。