Ubuntu 22.04执行dist-upgrade后,Initramfs在挂载本地根分区前启动ATA-over-Ethernet导致开机依赖DHCP租约阻塞
Ubuntu 22.04执行dist-upgrade后,Initramfs在挂载本地根分区前启动ATA-over-Ethernet导致开机依赖DHCP租约阻塞
嘿,这种情况确实挺闹心的——明明根分区在本地存储上,开机却非要卡着等DHCP租约,完全没必要对吧?大概率是这次dist-upgrade的时候,initramfs(开机初期加载的临时文件系统)里被意外加入了ATA-over-Ethernet(AoE)相关的钩子或模块,导致系统在挂载根分区的预准备阶段,就触发了DHCP客户端去尝试获取网络地址。
给你一步步的排查和修复方案:
1. 确认问题根源
先验证initramfs里是否真的带了不必要的网络相关组件:
lsinitramfs /boot/initrd.img-$(uname -r) | grep -E '(dhcp|aoe)'
如果输出里出现dhclient这类DHCP客户端,或是aoe相关的模块/脚本,那就实锤是这个问题了。
2. 清理initramfs里的不必要网络钩子
- 检查
/etc/initramfs-tools/hooks/目录,若存在aoe、dhcp相关的脚本文件,直接删除它们。 - 打开
/etc/initramfs-tools/modules文件,看看有没有强制加载aoe模块的行(比如aoe或aoe_net),有的话用#注释掉这些行。 - 查看
/etc/initramfs-tools/conf.d/目录下的配置文件,比如有没有名为ip的文件写着IP=dhcp,如果有就改成IP=none,或者直接删除该文件。
3. 更新initramfs镜像
修改完配置后,必须更新initramfs才能让改动生效:
sudo update-initramfs -u -k all
这个命令会更新所有已安装内核对应的initramfs镜像,确保不管启动哪个内核都不会有问题。
4. 临时验证(可选)
如果担心重启后仍有问题,可以先通过grub临时添加参数测试:
- 开机时按住Shift进入grub菜单,选中常用内核按
e进入编辑模式 - 在
linux开头的行末尾添加ip=none参数,按Ctrl+X启动系统 - 如果这次能正常开机不卡DHCP,说明修复方向正确,接下来可以永久添加这个参数:
- 编辑
/etc/default/grub文件,找到GRUB_CMDLINE_LINUX_DEFAULT,在引号内加入ip=none(比如从"quiet splash"改成"quiet splash ip=none") - 执行
sudo update-grub更新grub配置,以后开机就会自动带上这个参数了。
- 编辑
从你提供的dmesg和屏幕显示信息来看,系统在Running /scripts/init/premount阶段启动了DHCP客户端,完全是initramfs里的额外钩子触发的,把这些不必要的网络组件从initramfs里移除,就能恢复正常的本地开机流程了。
备注:内容来源于stack exchange,提问作者igel
相关产品推荐
相关产品推荐

