Linux Grub引導修復指南

一、啟動問題

1、如果你的計算機在開機後直接進入grub rescue模式,可能需要查看grub的環境變數和掛載點等信息,並且重新安裝grub。

set命令可以查看當前grub環境的變數值:
set
# 正常grub menu界面將顯示類似下面的信息
prefix=(hd0,gpt2)/boot/grub
root=hd0,gpt2
...

2、如果grub menu界面可以出現,但是無法正常啟動Linux操作系統,可能是因為grub配置文件(如/boot/grub/grub.cfg)被刪除或損壞。解決辦法是進入grub命令行模式,查看當前grub菜單中的各項設置。

# 進入grub命令行模式
grub>
# 查看grub菜單
cat (hd0,gpt2)/boot/grub/grub.cfg
# 輸出grub內容,並檢查各項設置是否正確。

3、如果進入grub的menu之後,找不到正確的選項來啟動Linux系統,可能需要手動添加一些啟動菜單。這時可以使用grub-mkconfig或手動編輯grub配置文件。

# 使用grub-mkconfig自動生成grub menu
grub-mkconfig -o /boot/grub/grub.cfg
# 手動編輯grub.cfg,添加啟動菜單(下面是示例)
menuentry "My Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz root=/dev/sda2
    initrd /initrd.img
}

二、分區問題

1、如果Linux的根分區發生磁碟損壞或者刪除,可能需要重新建立分區並且安裝Linux系統。

# 使用fdisk命令來查看當前分區情況
sudo fdisk -l /dev/sda
# 新建一個主分區
sudo fdisk /dev/sda
n # 創建新的分區
p # 創建一個主分區
# 選擇分區起始和結束的扇區(按回車鍵表示使用默認值)
w # 保存並退出
# 格式化剛才新建的分區
sudo mkfs.ext4 /dev/sda3
# 掛載分區到/mnt下
sudo mount /dev/sda3 /mnt
# 將當前系統的文件拷貝到新分區
sudo cp -ax / /mnt
# 更新新分區的fstab文件
sudo nano /mnt/etc/fstab
# 在fstab中加入下面這行
UUID=3fdda0dd-6bef-4bab-9bef-4d8edaaa5aac / ext4 errors=remount-ro 0 1

2、如果Linux系統的根分區尚未損壞或刪除,但是grub引導信息不正確,可能需要修改grub引導信息之後重新安裝grub。

# 找到當前系統的根分區,假設為/dev/sda2
# 掛載該分區到/mnt下
sudo mount /dev/sda2 /mnt
# 掛載/boot分區(如果有的話)
sudo mount /dev/sda1 /mnt/boot
# 掛載虛擬文件系統到/mnt下
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
# 進入/mnt下的Linux系統,注意切換root用戶
sudo chroot /mnt
# 重新安裝grub引導信息
grub-install /dev/sda
# 更新grub配置
update-grub
# 退出chroot環境並卸載/mnt下的各個目錄
exit
for i in /dev/pts /dev /proc /sys /run /boot; do sudo umount /mnt$i; done
sudo umount /mnt

三、故障診斷

1、如果grub引導信息顯示錯誤信息,可能需要開啟grub菜單的調試模式,或者查看grub日誌文件(如/var/log/grub.log)來顯示更多詳細信息。

# 開啟grub調試模式
grub> set debug=all
# 新建啟動菜單,選擇調試模式
menuentry "Debugging my Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz root=/dev/sda2 debug
    initrd /initrd.img
}
# 重啟計算機,選擇該菜單後,即可顯示grub調試信息

2、如果Linux系統啟動後,發現各種問題,可能需要進入單用戶模式(也稱緊急模式)進行故障診斷。

# 進入grub菜單,選擇要進入的Linux啟動菜單,按e鍵進入編輯模式
# 找到以「linux」開頭的一行,末尾加入「single」或「emergency」,如下所示
linux /vmlinuz root=/dev/sda2 single
# 按Ctrl+X或F10進入單用戶模式
# 進入之後,可以檢查文件系統、日誌文件、網路配置等

四、安全機制

1、為了防止grub和Linux系統被未經授權的用戶或程序篡改,可以通過以下辦法加強系統的安全性:

# 給grub.cfg加密並且保護
# 安裝grub-mkstandalone
sudo apt install grub-efi-amd64-bin
# 生成一個grub密碼,比如mypassword
echo -e "mypassword\nmypassword" | sudo grub-mkpasswd-pbkdf2 | grep 'PBKDF2' | awk -F " " '{print "set superusers=「root\npassword_pbkdf2 root " $NF}' | sudo tee -a /etc/grub.d/40_custom
# 生成加密後的grub.cfg文件
sudo grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --fonts="unicode" --themes="default" -o grub.efi /boot/grub/grub.cfg
# 移動已有的grub.efi文件
sudo mv /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64.efi.bak
# 移動新生成的grub.efi文件
sudo mv grub.efi /boot/efi/EFI/ubuntu/grubx64.efi

2、另外,還可以設置Linux系統的boot loader鎖,使得只能使用密鑰來啟動Linux系統,防止系統被非法篡改。

# 安裝mokutil工具
sudo apt-get install mokutil
# 創建一個私鑰
sudo openssl req -new -x509 -newkey rsa:2048 -keyout ₹(id -un)-$(hostname -s).key  -outform DER -out ₹(id -un)-$(hostname -s).der -days 36500 -nodes -subj "/CN=$(hostname)"
# 上傳該密鑰到Linux MOK中,並且輸入密碼
sudo mokutil --import ₹(id -un)-$(hostname -s).der
# 重啟計算機,進入UEFI界面,選擇「MOK management」,導入秘鑰
# 重啟,之後再次安裝grub-efi-amd64-signed,這樣只有使用秘鑰才能啟動Linux系統
sudo apt-get install grub-efi-amd64-signed

五、總結

本文介紹了如何修復Linux系統的grub引導問題,包括啟動問題、分區問題、故障診斷和安全機制等方面。通過本文的指引和代碼示例,希望讀者能夠更好地理解Linux系統的grub引導工作原理,並且掌握一些實用的技巧,使得我們在Linux系統的日常運維工作中能夠快速而準確地解決grub引導問題。

原創文章,作者:KTSKM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333514.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KTSKM的頭像KTSKM
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Python字元轉列表指南

    Python是一個極為流行的腳本語言,在數據處理、數據分析、人工智慧等領域廣泛應用。在很多場景下需要將字元串轉換為列表,以便於操作和處理,本篇文章將從多個方面對Python字元轉列…

    編程 2025-04-29
  • Python初學者指南:第一個Python程序安裝步驟

    在本篇指南中,我們將通過以下方式來詳細講解第一個Python程序安裝步驟: Python的安裝和環境配置 在命令行中編寫和運行第一個Python程序 使用IDE編寫和運行第一個Py…

    編程 2025-04-29
  • Python起筆落筆全能開發指南

    Python起筆落筆是指在編寫Python代碼時的編寫習慣。一個好的起筆落筆習慣可以提高代碼的可讀性、可維護性和可擴展性,本文將從多個方面進行詳細闡述。 一、變數命名 變數命名是起…

    編程 2025-04-29
  • FusionMaps應用指南

    FusionMaps是一款基於JavaScript和Flash的互動式地圖可視化工具。它提供了一種簡單易用的方式,將複雜的數據可視化為地圖。本文將從基礎的配置開始講解,到如何定製和…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29

發表回復

登錄後才能評論