最近遇到一個棘手的問題:服務器重啟后無法正常啟動,排查后發現是默認加載的內核有問題。手動選擇某個內核可以進入系統,但每次重啟后,系統仍然嘗試使用故障內核,導致無法自動進入正確的環境。
網上很多方法建議直接修改 /etc/default/grub,但如果操作失誤,可能會讓系統無法啟動。因此,我找到了一個更安全、更簡單的方法,讓 Ubuntu 自動記住上次成功啟動的內核,避免每次都要手動選擇。
1. 先確認當前系統使用的內核
在更改默認內核之前,先確認當前正在運行的內核版本:
uname -r
示例輸出:
5.15.0-43-generic
這表明系統當前使用的是 5.15.0-43-generic 內核。
2. 查看所有已安裝的內核
Ubuntu 可能安裝了多個內核版本,我們可以通過以下命令查看所有可用的內核:
dpkg –get-selections | grep linux-image
示例輸出:
linux-image-5.13.0-30-generic deinstall
linux-image-5.13.0-52-generic deinstall
linux-image-5.15.0-41-generic install
linux-image-5.15.0-43-generic install
linux-image-generic-hwe-20.04 install
分析輸出:
標記 install 的是當前系統可用的內核。
標記 deinstall 的表示這些內核已經被卸載或不再使用。
3. 讓系統自動記住當前啟動的內核
通常,我們可以手動修改 /etc/default/grub 來指定默認內核,但如果配置錯誤,可能會導致系統無法啟動。因此,我們采用更安全的方法——讓 GRUB 記住上次成功啟動的內核,并在下次自動使用它。
3.1 編輯 GRUB 配置
打開 GRUB 配置文件:
sudo nano /etc/default/grub
在文件中添加以下兩行:
GRUB_SAVEDEFAULT=trueGRUB_DEFAULT=saved
參數解析:
GRUB_SAVEDEFAULT=true:每次成功啟動后,系統都會自動保存當前啟動的內核。
GRUB_DEFAULT=saved:讓 GRUB 記住上次啟動的內核,而不是始終選擇默認的 0(第一個內核)。
4. 更新 GRUB 并重啟
修改完 GRUB 配置后,運行以下命令更新 GRUB 使更改生效:
sudo update-grub
然后重啟服務器:
sudo reboot
5. 在 GRUB 界面手動選擇正確的內核
當系統啟動時:
按住 Shift(BIOS 機型)或 ESC(UEFI 機型)進入 GRUB 菜單。
選擇 “Advanced options for Ubuntu”。
選擇 可以正常啟動的內核,然后按 Enter 進入系統。
這次成功啟動的內核會被 GRUB 記住,并在下次重啟時自動使用,無需每次手動選擇。
6. 驗證默認啟動的內核是否生效
啟動后,檢查當前運行的內核:
uname -r
如果返回的版本是你剛才選擇的內核,就說明設置成功了。
7. 清理不需要的舊內核(可選)
如果系統中安裝了多個舊內核,可以清理掉不再使用的版本,釋放磁盤空間。
查看所有已安裝的內核:
dpkg –list | grep linux-image
卸載舊內核(示例刪除 5.13.0-30):
sudo apt remove –purge linux-image-5.13.0-30-generic
清理無用的依賴文件:
sudo apt autoremove
更新 GRUB 配置:
sudo update-grub
8. 如果修改 GRUB 配置導致系統無法啟動怎么辦?
如果 /etc/default/grub 配置錯誤,導致系統無法啟動,可以使用以下方法恢復:
8.1 進入 GRUB 恢復模式
重新啟動系統,在啟動時按住 Shift(BIOS 機型)或 ESC(UEFI 機型) 進入 GRUB 菜單。
選擇 “Advanced options for Ubuntu”,然后選擇一個可用的舊內核進入系統。
8.2 還原 GRUB 配置
進入系統后,打開終端:
sudo nano /etc/default/grub
將 GRUB_DEFAULT=saved 改回默認值:
GRUB_DEFAULT=0
然后更新 GRUB 并重啟:
sudo update-grub
sudo reboot