最快速有效的回滚方式是直接从grub菜单选择旧内核启动:重启时长按shift(bios)或esc(uefi)调出grub,进入“advanced options”子菜单,选择带旧版本号(如5.15.0-91-generic)的条目启动;进系统后用uname -r确认,并执行sudo grub-set-default "ubuntu, with linux 5.15.0-91-generic"和sudo update-grub设为默认。

怎么从 GRUB 菜单启动旧内核
内核升级失败后最快速有效的回滚方式,就是不改任何配置、不重装包,直接选旧内核启动。只要 /boot/vmlinuz-* 和 /boot/initramfs-* 文件没被删,这个方法就一定可用。
- 重启时长按
Shift(BIOS 模式)或按Esc(UEFI 模式),强制唤出 GRUB 菜单 - 选
Advanced options for Ubuntu/centos...→ 进入子菜单 → 找带旧版本号的条目,比如vmlinuz-5.15.0-91-generic - 进系统后立刻执行
uname -r确认已切换;再运行ls /lib/modules/$(uname -r)看模块目录是否存在 - 若确认稳定,用
sudo grub-set-default "Ubuntu, with Linux 5.15.0-91-generic"(Ubuntu)或sudo grub2-set-default "CentOS Linux (4.18.0-305.el8.x86_64) 8"(RHEL/CentOS)设为默认 - 最后必须执行
sudo update-grub(Debian/Ubuntu)或sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS),否则下次重启仍会走新内核
注意:UEFI 系统若卡在 “Loading initial ramdisk…”,大概率是 Secure Boot 阻止了旧 initramfs 加载,需进固件设置临时禁用 Secure Boot。
如何用 apt 或 dnf 安全删除新内核
别手动 rm -rf /boot/vmlinuz-5.19* —— 这会残留 /lib/modules/5.19.0-xx/ 和 dpkg/dnf 数据库记录,后续 apt autoremove 可能误删其他依赖,甚至破坏包管理器状态。
- 先查当前运行内核:
uname -r - 列出所有已安装内核包:
dpkg -l | grep 'linux-image-.*-generic'(Ubuntu)或dnf list installed kernel\*(RHEL/CentOS) - 只删新内核对应的所有包:Ubuntu 用
sudo apt autoremove --purge linux-image-5.19.0-xx-generic linux-modules-5.19.0-xx-generic linux-headers-5.19.0-xx-generic;RHEL 用sudo dnf remove kernel-5.19.0-xx.el8 - 删完务必运行
sudo update-grub或sudo grub2-mkconfig -o /boot/grub2/grub.cfg,否则 GRUB 菜单不会刷新
关键点:必须确保旧内核的 linux-image、linux-modules、linux-headers 三个包都完整存在,缺一不可;否则即使文件还在,update-initramfs 也会报 “no image found”。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
initramfs 损坏时怎么修复
现象很典型:选旧内核启动后卡在 Loading initial ramdisk...,或启动日志里出现 Failed to load module 'xhci_hcd'、Unable to find root device。这不是内核坏了,而是 initramfs 镜像没正确生成或模块路径丢失。
- 用旧内核成功进系统后,立即重建对应镜像:
sudo update-initramfs -u -k 5.15.0-91-generic - 如果提示
No image found for 5.15.0-91-generic,说明/lib/modules/5.15.0-91-generic缺失 → 补装:sudo apt install linux-modules-5.15.0-91-generic(Ubuntu)或sudo dnf install kernel-core-5.15.0-91.el8(RHEL) - 不要在 Debian/Ubuntu 上用
mkinitcpio或dracut,工具链不兼容,会生成错误格式的 initramfs - 若旧内核根本进不去系统,只能靠 Live USB chroot 后再执行上述命令
容易忽略的是:某些第三方驱动(如 NVIDIA、WireGuard)编译进内核时,会把模块硬编码进 initramfs。换内核后若没重新编译驱动,就算 initramfs 重建成功,也可能因模块缺失而失败。
生产环境要不要搞自动回滚机制
Linux 内核本身没有原子升级或事务回滚能力。所谓“自动回滚”,本质是靠外部机制兜底,不是内核功能。
- 最轻量可靠的方案是
grub-reboot:部署新内核后,用sudo grub-reboot "Ubuntu, with Linux 5.19.0-xx-generic"下次只启动一次新内核,若失败,重启自动回落到旧默认项 - 有 LVM 或 btrfs 的系统,优先用快照:升级前
lvcreate -s或sudo btrfs subvolume snapshot,失败时直接回滚子卷,秒级恢复 - Timeshift/snapper 是更通用的选择,但要注意:Timeshift 默认不备份
/boot,而内核文件就在那儿,需手动勾选 “Include boot partition” - 别依赖
apt install linux-image=old-version降级 —— 新内核的 initramfs 可能已覆盖旧镜像,且降级过程本身可能触发新的 initramfs 重建,反而加剧问题
真正容易被忽略的细节是:GRUB 的 GRUB_SAVEDEFAULT=true 必须启用,否则 grub-reboot 或手动选中的内核不会成为下次默认;而这个配置项在很多定制镜像里默认是 false。










