天天看點

Grub啟動Linux引導到BIOS問題的解決

  前幾天為了将archlinux gnome從X11調整為Wayland,修改grub(sudo nano /etc/default/grub),在核心參數中添加 “ibt=off“,再執行sudo grub-mkconfig -o /boot/grub/grub.cfg後重新開機,無法啟動archlinux,直接引導到BIOS,頭一次碰到這種情況。很顯然,引導出了問題,好在通過F12選擇Windows10可以正常啟動。

  系統環境:聯想老桌上型電腦,1塊固态硬碟+1塊機械硬碟,固态硬碟上裝有win10+arch雙系統,UEFI+grub引導。

  分析問題:進win10,打開diskgenius,導出arch所在ext4分區下使用者名所在檔案夾下的.bash_history檔案,用記事本打開看最近的操作指令,作撤銷準備,最後的2條指令确實是文頭提到的。為了防止是此前修改的/usr/lib/udev/rules.d/61-gdm.rules和/etc/gdm/custom.conf兩個檔案造成的問題,我在win10下分别導出修改并重新導入再試問題依舊,确認是grub出了問題。

  解決問題:下載下傳archlinux ISO,複制到Ventoy啟動優盤啟動系統,執行以下代碼重新安裝grub。

#用優盤上的archlinux挂載固态硬碟中archlinux,預設是root。用fdisk -l檢視arch安裝在哪個分區上,我的是/dev/sda5
mount /dev/sda5 /mnt
arch-chroot /mnt
#重新安裝并更新grub,注意是UEFI引導不是MBR引導。期間删除此前在核心參數中加入的“ibt=off“,我不确認造成啟動故障是因為加了這個參數,懷疑是更新grub時造成的其他偶發故障,當時沒注意看指令執行結果就重新開機了。以下第一條指令非常關鍵,sda1是ESP分區,這裡我走了不少彎路
mount /dev/sda1 /boot
grub-install --target=x86_64-efi --efi-directory=/boot/efi  --bootloader-id=grub --recheck
nano /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
           

   所得經驗:其實也是數十次試錯的結果,最大的收獲是/boot的位置。無論是當時在win10中檢視還是用ISO啟動後檢視arch所在分區的/boot檔案夾,都是空的,而arch正常啟動後有檔案,後來才想起來安裝arch的時候/boot是自動挂載的ESP分區(見下圖),實體檔案其實是在ESP分區上的。這是UEFI引導多系統需要注意的一個細節。其中最關鍵的一步是mount /dev/sda1/boot,因為不挂載的話grub将安裝在arch所在分區的/boot檔案夾下,無法寫入ESP分區,導緻UEFI無法引導到arch所在的分區,UEFI最初引導時并不識别ext4分區,隻有讀取arch引導檔案後才知道下一步往哪裡走。此外,檢視安裝arch時的指令,可檢視/home/root/.bash_history檔案。

Grub啟動Linux引導到BIOS問題的解決
Grub啟動Linux引導到BIOS問題的解決

繼續閱讀