由于近期项目需要,在对一批华为鲲鹏920的ARM服务器(型号为天宫TG225 B1)进行批量装机的过程中,遇到了各种各样千奇百怪的bug(换个高情商的说法就是遇到了各种各样和x86服务器不一样的地方),遂记录本文,以供后续可能遇到问题时参考。
在阅读本文前,建议先阅读两篇前序文章《如何在20分钟内批量部署20台ESXi服务器》以及《使用PXE+NFS EFI引导安装RHEL6/7以及Kickstart安装》,有助于理解本文中提到的各种问题。(该两篇文章均可以在本平台上搜到)
本次实施中使用的服务器为天宫TG225 B1型号,CPU使用的是2颗基于ARM的华为鲲鹏920 32核双路型号,硬盘使用的是8块960G SSD,RAID卡使用的是Adeptec 3152-8i。实施的具体工作是需要批量将几十台该型号服务器批量配置为RAID5,并批量安装上麒麟V10的操作系统。实施思路为,首先使用虚拟机搭建pxe dhcp server环境,使服务器用pxe引导clonezilla通过脚本的方式进行RAID配置,然后使用pxe引导麒麟OS手动安装第一台服务器,使用该机器安装后自动生成的kickstart脚本进行后续服务器的自动部署麒麟操作系统。由于麒麟V10目前的版本是基于centos8,所以可以类比上述两篇文章中提到的批量部署RHEL的经验。下面就针对本次实施中遇到的问题逐一进行分析。
一、关于PXE获取到IP之后无ACK,无法获取引导文件。
目前ARM服务器基本都是使用UEFI的方式进行引导,我们只需要关注EFI方式引导即可,Legacy引导已经随着时代的发展被扫进历史的垃圾桶。
正常情况下通过DHCP引导的PXE安装, DHCPdiscover -> DHCPoffer -> DHCPRequest -> DHCPACK,但是很奇怪的是在我们这个型号的服务器上始终没有发现有DHCP ACK的记录,这就意味着服务器无法获取到EFI引导文件。原来以为是我的dhcpd.conf配置写的不对,仔细核对了一翻发现没有问题,也在虚拟机测试了一下能正常引导。经过一翻搜索,发现原来是鲲鹏920的ARM服务器,在dhcpd的vendor-class-identifier 参数定义有特殊的字符串,下面给出本次实施中使用的dhcpd.conf的部分配置文件。
subnet 192.168.3.0 netmask 255.255.255.0 { range 192.168.3.10 192.168.3.239; option routers 192.168.3.3; next-server 192.168.3.3; class "HW-client" { match if substring (option vendor-class-identifier, 0, 9) = "HW-Client"; if option architecture-type = 00:0b { # Huawei Kunpeng 920 ARM64 aarch64 EFI BIOS filename "images/BOOTAA64.EFI"; } } class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; if option architecture-type = 00:07 or option architecture-type = 00:09 { # x86-64 EFI BIOS filename "images/shim.efi"; # filename "images/BOOTX64.efi"; } else if option architecture-type = 00:0b { # ARM64 aarch64 EFI BIOS filename "images/BOOTAA64.EFI"; } else { # Legacy non-EFI BIOS filename "pxelinux.0"; } } }