如何修復 Linux 引導進入 BIOS 錯誤

已發表: 2022-09-28
藍色背景上的筆記本電腦,顯示 Linux 命令提示符。
fatmawati achmad zaenuri/Shutterstock.com

眾所周知,GRUB 更新會導致 Linux 計算機引導至 BIOS 或 UEFI 設置。 對此的修復利用了您真正應該知道的有用的系統恢復技巧。

案例研究:GRUB 2:2.06.r322

2022 年夏季的 Arch 和基於 Arch 的 Linux 發行版的系統更新包括新版本的 GRUB。 GRUB代表gr和統一引導程序。

引導加載程序是一個應用程序,它在您的計算機打開時啟動啟動過程。 需要從正確的分區以正確的順序啟動多個軟件工具和實用程序,以最終生成可操作且可訪問的操作系統。 GRUB 啟動了一系列事件。

如果您的計算機上安裝了多個操作系統,GRUB 會提供一個菜單,以便您選擇要使用的操作系統。 對 GRUB 2:2.06.r322 的代碼更改之一添加了對新 GRUB 選項 --is --is-supported 。 該選項用於指示是否存在引導至固件功能。 如果是,GRUB 會在啟動菜單中添加一個條目,讓您啟動到 EUFI 設置。

在名為“30_uefi-firmware.in”的腳本中引用了新選項。 此文件的差異顯示刪除了if語句,並添加了兩行。

其中一個新行是替換if語句。 另一個新行包含fwsetup --is-supported 。 “fwsetup”中的“fw”代表固件。 但是因為那行在新的if語句之上,所以它總是會運行。 如果它在if語句的主體內,它只會在if語句中的測試解析為 true 時運行。

UEFI 是什麼,它與 BIOS 有何不同?
相關什麼是 UEFI,它與 BIOS 有何不同?

這會導致許多(但不是全部)UEFI 計算機出現問題。 這取決於您已經安裝的 GRUB 版本是否支持此命令。 受影響的機器會做兩件事之一。 他們要么進入引導過程從未完成但不斷重新啟動的引導循環,要么計算機將直接引導至 UEFI 固件設置。 無論哪種方式,都無法強制您的計算機啟動到 Linux。

當您遇到這樣的情況時,總是有一個完全重新安裝的核選項。 這會起作用,但取決於您的硬盤驅動器的分區方式,如果沒有最近的備份,您可能會丟失數據。

低影響方法使用chroot和 Live USB 或 Live CD/DVD。 當您無法啟動或登錄 Linux 計算機時,這是一種很好的技術,可以幫助您了解和應對各種系統故障。

我們將使用的技術

為了使用這種技術,您需要有一個可引導的 USB 或帶有 Linux 發行版的 CD/DVD,它可以引導到一個實時的 Linux 實例。 通常這些被稱為 Live USB 或 Live CD/DVD。 所有主要發行版都支持此功能。

如何創建具有持久存儲的 Live Ubuntu USB 驅動器
相關如何創建具有持久存儲的 Live Ubuntu USB 驅動器

我們不會安裝任何東西,因此實時媒體不必與您在計算機上安裝的發行版相同。 例如,您可以使用 Ubuntu USB 修復 EndeavourOS 計算機。 如果您無法訪問任何實時媒體,則需要使用另一台計算機下載圖像並將其寫入 USB 記憶棒或 CD/DVD。

當您從實時媒體啟動時,您將能夠安裝和訪問您現有的文件系統。 您安裝的文件系統將顯示為從實時媒體引導的 Linux 文件系統的一部分。 那太棒了。 如果我們可以訪問它,我們就有機會修復它。 但它確實提出了一個問題。

如何在 Linux 上使用 chroot 命令
相關如何在 Linux 上使用 chroot 命令

此混合文件系統的根是實時媒體文件系統的根,而不是您安裝的文件系統的根。 為了讓你的 Linux 系統中配置的文件路徑引用它們正確的目標位置——在你的文件系統中的某個地方,而不是相對於實時 Linux 的根目錄的某個地方——我們需要使用chroot來設置一個新的根目錄,它指向您安裝的文件系統。 換句話說,以“/”開頭的路徑將使用文件系統的根目錄作為它們的起點。

我們為此使用的測試計算機使用ext4文件系統,但您也可以在其他文件系統上使用此技術。 您只需確定需要掛載的分區或卷,以及掛載它們的位置。 原理是一樣的。

付諸實踐

我們創建了一個可啟動的 USB 驅動器並從中啟動了我們受災的計算機。 我們使用的發行版是 EndeavourOS。 EndeavourOS 實時媒體啟動到 XFCE 4 桌面環境。

EndeavourOS 實時媒體引導至 XFCE 桌面環境

要確定哪些分區包含文件系統的根,哪些是引導分區,請打開終端窗口並使用fdisk命令。 我們使用-l (列表分區)選項。 您還需要使用sudo

 須藤 fdisk -l 

使用 sudo fdisk -l 命令列出分區和設備

滾動輸出,直到看到標有“EFI 系統”和“Linux 文件系統”的條目。

sudo fdisk -l 命令的輸出,突出顯示了引導和根分區

在這台計算機上,它們都在sda硬盤上。 它們位於分區一和二中,如分區標籤/dev/sda1/dev/sda2所示。

在您的計算機上,它們可能位於不同的硬盤驅動器和分區上。 注意它們所在的分區,我們需要在接下來的命令中使用它們。

我們需要通過將文件系統附加到活動文件系統來將文件系統掛載到這些分區上。 mount命令將為我們做到這一點。 請記住,您的分區標籤可能不同,因此請確保使用fdisk命令結果中的標籤。

 須藤掛載/dev/sda2 /mnt
 sudo mount /dev/sda1 /mnt/boot/efi 

掛載引導和文件系統根文件系統

為了使文件系統的有效根目錄從您實際安裝的文件系統的根目錄開始,我們將使用chroot將根目錄設置為“/mnt”掛載點。 這是將已安裝文件系統的根移植到活動文件系統的位置。

 須藤chroot /mnt 

使用 chroot 命令創建一個新的有效根

請注意,命令提示符更改為顯示您現在以 root 身份有效登錄,並且您位於計算機文件系統的根目錄“/”中。

我們可以通過切換到“/home”目錄並檢查其中存在哪些目錄來輕鬆測試這一點。

 光盤 /home
 ls 

使用 ls 列出用戶帳戶

您應該會看到在您的計算機上配置的每個用戶的目錄,包括您自己的用戶帳戶的目錄。 這台計算機只有一個用戶,稱為“dave”。 如果我們在使用chroot命令之前使用了cd /home ,我們就會進入實時文件系統的“/home”目錄。

為了清楚起見,您現在以root用戶身份訪問您的真實文件系統,所以要小心。

要解決 GRUB 2:2.06.r322 的問題,我們需要做的就是運行grub-install命令。

 grub-安裝

運行 grub-install 命令來修復 GRUB 引導到 BIOS 錯誤

通常不建議像這樣盲目地運行grub-install 。 在這種情況下,這是需要的。

修理或更換

如果您嘗試解決不同的問題,則需要查看您的發行版的論壇,以找到適合您問題的解決方案。 如果這是一個普遍的投訴,您很快就會找到解決方案。

至少,現在您可以訪問您的文件系統,您可以將數據複製到一些可移動媒體。 如果您決定完全重新安裝,您將不會丟失數據。

相關:如何在 Linux 上使用“安裝”命令複製文件