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