阿里云旧系列实例迁移后无网络问题解决
昨天收到阿里云的通知,Kaijia一台青岛机房2年半前创建的阿里云实例(可用区B)需要迁移到新的物理机上(即从两三年前最早的系列I升级到现在的系列III)。毕竟是性能升级,于是Kaijia很高兴得预约了吃螃蟹,结果升级完成了之后,实例就无法再次连接上了。
Kaijia从管理面板终端登录,发现执行ifconfig并无原有的eth0和eth1,而手动激活网卡时则会出现错误:
# ifup -v eth0
cannot find device “eth0”
由于阿里云底层的XEN虚拟化架构并无公开,因此不能自己黑箱排障,Kaijia联系了工程师,得到了反馈原因如下:
迁移后网络设备名在Linux启动时被修改了。需要重新修改下Grub禁止启动时修改网卡设备名。
相应的解决方案是修改/etc/default/grub配置文件,增加GRUB_CMDLINE_LINUX默认传入参数:
1 |
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0" |
然后重新生成Grub配置文件并重启:
1 2 |
grub-mkconfig -o /boot/grub/grub.cfg reboot |
新增加的启动参数“net.ifnames=0 biosdevname=0”的作用分别是在RHEL7和RHEL6中禁用可预测网卡设备名称(Predictable Network Interface Names)。增加此两项参数后,在较新的内核中,系统仍将使用eth0、eth1编号网络设备,而不是其后引入的可预测设备名(例如wlp58s0)。
因此Kaijia猜测原先阿里云系列I实例使用的XEN没有启动可预测设备名,而新的系列III则启用了此特性,因此实例迁移完成启动后,网卡的名称已经不是eth0、eth1了,然而迁移时阿里云并没有修改实例的/etc/network/interfaces文件,虚拟机操作系统仍然在尝试激活已经名为eth0、eth1的网卡(实际已经不存在了),所以出现了此错误。
评论