Ubuntu 22.04 EC2执行dist-upgrade后启动报UBSAN数组越界错误
1. 出错原因与规避方案
- 核心原因:
apt-get dist-upgrade会强制升级所有依赖包,包括Linux内核。你升级到的linux-aws-6.5内核版本存在xen-netfront驱动的数组越界bug,t2.micro属于Xen虚拟化架构实例,依赖该驱动实现网络功能,内核启动时触发UBSAN检测直接导致系统崩溃。 - 规避方式:
- 停止使用
apt-get dist-upgrade,改用apt-get upgrade——仅升级现有包,不会强制升级内核大版本或新增/移除依赖 - 升级前先锁定
linux-aws包版本,执行命令:apt-mark hold linux-aws - 待Ubuntu官方或AWS发布该内核bug的修复补丁后,再执行
apt-mark unhold linux-aws进行安全升级
- 停止使用
2. 迁移至Nitro实例后的修复步骤
成功迁移至Nitro实例并能通过串行控制台访问后,按以下步骤修复:
- 启动实例进入串行控制台,在GRUB启动菜单选择Ubuntu条目,按
e编辑启动项;在linux开头的行末尾添加init=/bin/bash,按Ctrl+X进入单用户模式 - 将根文件系统挂载为可读写模式:
mount -o remount,rw / - 卸载存在bug的6.5版本内核:
- 列出已安装的内核版本:
dpkg --list | grep linux-image - 卸载对应版本:
apt-get purge linux-image-6.5.0-10XX-aws(将XX替换为实际版本号)
- 列出已安装的内核版本:
- 安装之前可用的稳定内核版本(例如6.2系列):
apt-get install linux-image-6.2.0-10XX-aws(替换XX为对应版本号) - 更新GRUB引导配置:
update-grub - 恢复正常启动设置:编辑
/etc/default/grub,确保GRUB_DEFAULT=0或指向正确的稳定内核条目,保存后重新执行update-grub - 执行
reboot重启实例,确认正常启动后,锁定该稳定内核版本:apt-mark hold linux-aws
内容的提问来源于stack exchange,提问作者Adam Harrison
相关产品推荐
相关产品推荐

