Ubuntu22.04降级内核版本
说明:
在生产环境中因兼容性问题Ubuntu 22.04系统需要固定内核版本,在实际操作过程中因误操作原因导致系统内核升级为最新版本,在不影响开发测试状态下选择降级内核版本。
首先查看内核在 grub 中的菜单索引
bash
grep menuentry /boot/grub/grub.cfg | grep -i linux | nl -v 0
输出
bash
0 menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
1 submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
2 menuentry 'Ubuntu, with Linux 6.8.0-90-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-90-generic-advanced-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
3 menuentry 'Ubuntu, with Linux 6.8.0-90-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-90-generic-recovery-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
4 menuentry 'Ubuntu, with Linux 6.8.0-40-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-40-generic-advanced-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
5 menuentry 'Ubuntu, with Linux 6.8.0-40-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-40-generic-recovery-104a526b-4f44-4f1e-90b8-a8e93675ac90' {
修改 grub 配置文件
bash
sudo vim /etc/default/grub
修改为对应内容
bash
GRUB_HIDDEN_TIMEOUT=0 # 取消 GRUB_HIDDEN_TIMEOUT 的注释(如果存在),设置为 0
GRUB_DEFAULT=4 # 设置默认启动项为低版本内核的索引(这里我选4,也可以使用0进入grub菜单后手动选择)
GRUB_TIMEOUT_STYLE=menu # 显示 grub 菜单(可选,方便手动选择内核)
GRUB_TIMEOUT=10 # grub 菜单显示 10 秒,超时后自动启动默认内核
更新 grub 配置,并重启
bash
sudo update-grub
sudo reboot # 重启系统
进入 GRUB 菜单,选择 Advanced options for Ubuntu,然后选择对应内核启动
bash
uname -r
6.8.0-40-generic # 输出内核版本
删除高版本内核(彻底清理)
bash
dpkg --get-selections | grep linux-image | grep -v deinstall
输出
bash
linux-image-6.8.0-40-generic hold
linux-image-6.8.0-90-generic install
linux-image-generic-hwe-22.04 install
删除高版本内核的相关包
bash
# 删除高版本内核镜像、头文件、模块
apt purge linux-image-6.8.0-90-generic linux-headers-6.8.0-90-generic linux-modules-6.8.0-90-generic linux-modules-extra-6.8.0-90-generic
# 删除依赖的通用包(如 generic-hwe-22.04,可选)
sudo apt purge linux-image-generic-hwe-22.04 linux-headers-generic-hwe-22.04
清理内核残留文件
bash
sudo apt autoremove --purge # 自动清理不再需要的依赖包
sudo update-grub # 更新 grub 配置(删除高内核后,grub 菜单会自动更新)
还原/etc/default/grub配置文件
bash
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
更新 grub 配置,并重启
bash
sudo update-grub
sudo reboot # 重启系统
小结:
禁止删除当前运行的内核:执行 uname -r 查看当前内核,删除操作时绝对不能删这个版本。
至少保留一个可用内核:系统中必须保留 1~2 个稳定内核,避免所有内核被删导致无法启动。
降级内核后硬件驱动可能失效:如果降级后出现 USB、网卡等硬件不识别,可能是低内核不支持该硬件,需重新安装对应驱动或升级回原内核。
无法启动的补救方案:如果重启后无法进入系统,在 grub 菜单中选择 「高级选项」,手动选择原来的高版本内核启动,再重新调整配置。