裸金属装机一直卡在 iscsistart,根因是 ethX 网卡乱序,iSCSI 连接建在了错误的网卡上。在 PXELINUX 配置里加 IPAPPEND 2,让引导程序自动把引导网卡的 MAC 追加给内核,即可解决。
现象
创建裸金属时,网卡乱序导致 iSCSI 镜像加载不了,装机一直卡在 iscsistart。
排查
看 PXELINUX 配置:
/pxelinux.cfg# cat 01-8c-96-a5-2d-fb-70
DEFAULT linux
LABEL linux
menu default
menu label Linux
KERNEL vmlinuz
APPEND initrd=initrd.img ip=10.0.0.64:10.0.0.185::255.255.255.0:bm-example:eth0:off ISCSI_TARGET_NAME=iqn.2012-04.example.com:bm-example-boot.img ISCSI_TARGET_IP=10.0.0.185 ISCSI_TARGET_PORT=3260 root=UUID=4a99650e-84e7-4c6a-83f9-1b1c964f39de rw net.ifnames=0 biosdevname=0
这里 APPEND 里有个重要参数:eth0,就是通过 eth0 建立 iSCSI 连接,切换 rootfs。
根因
问题就在这里:ethX 天生就有乱序问题。
我们期望网卡 1 是 eth0,物理链路上和 iSCSI 在一个网络上。
但是因为乱序问题,网卡 2 名称是 eth1,这样 iSCSI 就不通了,因为物理链路就不通。
这个时候 BM 装机就一直卡在 iscsistart。
解决办法
在 PXELINUX 配置中加上 IPAPPEND 2。
添加 IPAPPEND 2 后,PXELINUX 引导程序在加载内核时,会自动把刚才成功下载到 PXE 文件的那个网卡的 MAC 地址以 BOOTIF=01-8c-96-a5-2d-fb-70 的形式动态追加到 APPEND 末尾。内核根据 BOOTIF 准确地把 IP 赋给这张网卡,完全不需要在配置文件里手动写死 MAC 或 eth0。
/pxelinux.cfg# cat 01-8c-96-a5-2d-fb-70
DEFAULT linux
LABEL linux
menu default
menu label Linux
KERNEL vmlinuz
IPAPPEND 2 # 新加参数
APPEND initrd=initrd.img ip=10.0.0.64:10.0.0.185::255.255.255.0:bm-example::off ISCSI_TARGET_NAME=iqn.2012-04.example.com:bm-example-boot.img ISCSI_TARGET_IP=10.0.0.185 ISCSI_TARGET_PORT=3260 root=UUID=4a99650e-84e7-4c6a-83f9-1b1c964f39de rw net.ifnames=0 biosdevname=0
APPEND 中去掉 eth0(ethX)。
小结
- ethX 网卡命名天生有乱序问题,不能依赖
eth0来建立 iSCSI 连接; IPAPPEND 2让 PXELINUX 自动把引导网卡的 MAC 以BOOTIF形式追加给内核;- 内核根据
BOOTIF准确绑定网卡,彻底解决乱序问题; - 配置里不要写死 MAC 或
eth0,交给 PXELINUX 动态处理。