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