如何使用 GRUB Rescue 修復 Linux
已發表: 2023-05-14ls
、 set
、 linux
和initrd
命令修復您的 Linux 系統。 相反,如果您看到“grub rescue>”提示,請使用set
、 insmod
、 linux
和initrd
命令來啟動您的 PC。如果您的 Linux 計算機無法啟動進入其操作系統,您可能會發現自己正盯著 GRUB shell 中的提示符。 請按照以下步驟修復損壞的啟動過程。
當您的引導加載程序不啟動時
使用 GRUB 外殼
使用 GRUB 救援 Shell
其他可能的補救措施
當您的引導加載程序不啟動時
很少有計算機問題像無法啟動一樣讓您的心沉淪得如此之快。 如果沒有運行的操作系統,您的計算機就不是真正的計算機。
這可能是一個非常不透明的問題,沒有簡單的方法可以深入了解根本原因。 如果無法訪問 Linux,您將無法使用任何常用的診斷工具和流程來調查問題。 在不確定問題是什麼的情況下,您如何解決它?
在 Linux 上,GRUB 是控制引導過程的軟件。 如果您安裝了多個操作系統,它會讓您選擇要啟動的操作系統。
GRUB 由其配置控制。 它也依賴於其他支持文件來執行其功能。 如果其中任何一個丟失或損壞,GRUB 將無法工作。 對計算機硬盤驅動器和分區的更改需要反映在 GRUB 的配置中。 如果不是這種情況,GRUB 的指令將沒有意義,並且您的引導過程將無法運行。
附帶說明一下,我們所說的 GRUB 實際上是 GRUB 2。這是 2012 年發布的 GRUB 的高級版本。在其他更改中,它改變了“grub.cfg”文件的創建方式,讓您從可移動媒體啟動。
如果 GRUB 無法加載操作系統,您將只能盯著 GRUB shell 中的提示符。 這是一個極簡主義的環境,可讓您執行一些操作。 但是,如果操作得當,這些步驟可以使您的計算機復活。
有兩種不同的 GRUB shell。 根據問題的根本原因,您可能會發現自己處於 GRUB shell 提示符下:
蠐螬>
或者在 GRUB救援shell 提示符下:
蠐螬救援>
GRUB 救援 shell 比 GRUB shell 更受限制,但它仍然包含足夠的衝擊力讓您的計算機啟動。 計算機啟動後,您就可以更好地解決根本原因。
使用 GRUB 外殼
GRUB shell 是一個命令行界面,可讓您使用一小部分 Linux 命令。 如果您發現自己在這里而不是通常的登錄屏幕,則意味著您的啟動過程一團糟。
您可以訪問的命令與通常的 Linux 版本不同。 例如,GRUB shell ls
命令不是 Bash ls
命令。 它與它幾乎沒有共同之處。 我們可以使用--help
選項看到這一點。
ls--幫助
它僅列出了五個選項。 這與 Bash 中ls
支持的幾十個選項相去甚遠。 儘管如此,即使我們的命令面板有些柔和,我們仍然可以糾正這種情況。
在提示符下,鍵入ls
並按“Enter”。
ls
在這台計算機上,它列出了三個項目。
- (hd0)是第一塊硬盤。
- (hd0,gpt1)是第一個硬盤上的第一個分區。
- (hd0,gpt2)是第一個硬盤上的第二個分區。
“gpt”標籤代表 GUID 分區表。 當我們引用一個分區時,我們需要包括括號“ ()
”,但我們可以省略標籤。
要依次查看分區,我們將使用ls
。
ls (hd0,1)
ls (hd0,2)
我們發現第二個分區上有一個 Linux 文件系統。 我們將通過查看該分區的根目錄來進一步調查。
ls (hd0,2)/
很明顯,這是 Linux 分區,上面有引導目錄。 這是存儲 GRUB 文件、Linux 引導映像和其他引導文件的地方。
在這台計算機上,我們需要在發出命令時引用分區(hd0,2)
。 在您的計算機上,您可以使用您在其中找到 Linux 安裝的任何分區。
我們可以使用cat
命令通過將目錄路徑和文件名附加到分區名稱來查找文本文件,如下所示:
cat (hd0,2)/等/問題
在多重引導安裝中,這是驗證您在正確分區上的有用方法。 它也非常適合查看配置文件內部。
在這裡,我們使用帶有-l
(長)和-h
(人類可讀大小)選項的ls
命令來列出“/boot”目錄中的文件。
ls -lh (hd0,2)/啟動
為了讓這台計算機啟動,我們需要告訴 GRUB 我們新發現的 Linux 分區包含啟動文件。
設置根=(hd0,2)
我們需要指定從哪個 Linux 內核啟動。 我們使用linux
命令執行此操作。 請注意,我們還必須使用通常的 Linux 硬盤驅動器和分區命名方案提供根目錄。
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
在我們的示例計算機上,我們使用(hd0)
這是第一個硬盤驅動器。 這在通常的 Linux 命名法中稱為sda
。 我們發現第二個分區是 Linux 分區,所以我們需要指定sda2
。
您的機器可能有所不同。 例如,如果您的 Linux 分區報告為(hd2,1)
,這意味著分區一位於第三個硬盤驅動器或sdc1
上。
我們還需要指定在計算機啟動時使用哪個基於 RAM 的文件系統映像。 這必須使用與我們正在使用的 Linux 內核相同的數字組件。
initrd /boot/initrd.img-6.2.0-20-generic
現在,要啟動我們的系統,請鍵入“boot”並按“Enter”。
這應該將您的計算機啟動到 Linux。 這讓我們再次運行,但我們仍然需要修復 GRUB,這樣我們就不需要在每次啟動計算機時都這樣做。
我們將運行update-grub
。 這將掃描我們的系統,識別操作系統,並創建一個新的 GRUB 配置。 我們需要以 root 用戶身份運行它。
須藤更新-grub
在極少數情況下,您可能還需要使用grub-install
重新安裝 GRUB 引導裝載程序。
sudo grub-install /dev/sda
請注意,您不需要指定要安裝在哪個分區上,只需指定哪個驅動器即可。 在正常安裝中,它與您的 Linux 所在的驅動器相同。
布丁的證明會在下次重啟時出現。 您的計算機應正常重啟。
相關:如何配置 GRUB2 引導裝載程序的設置
使用 GRUB 救援 Shell
根據引導問題的性質,您可能不會進入 GRUB shell。 您可能處於 GRUB救援模式。 如果是這種情況,您的提示將如下所示:
蠐螬救援>
我們需要在這個 shell 中發出的命令是不同的。 我們需要使用ls
來查找 Linux 分區,就像您使用 GRUB shell 一樣。 確定 Linux 分區後,您可以繼續輸入這些命令。
請記住使用適合您計算機的驅動器標識符和內核版本號。 insmod
命令加載內核模塊。
設置前綴=(hd0,2)/boot/grub
設置根=(hd0,2)
insmod正常
insmod Linux
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
initrd /boot/initrd.img-6.2.0-20-generic
然後,您可以鍵入“boot”並按“Enter”重新啟動計算機。 一旦它重新啟動並且您已登錄,請使用update-grub
命令更新 GRUB。
其他可能的補救措施
如果問題是缺少啟動文件,例如“vmlinuz”和“initrd.img”文件,您可以從 Live DVD 或可啟動的 Linux USB 閃存驅動器啟動計算機,並將丟失的文件複製到位。
請注意,“vmlinuz”和“initrd.img”文件必須具有相同的版本號,因為它們是一對匹配的。
相關:如何在你的 Mac 上創建一個可啟動的 Linux Live USB