告别U盘!用PXE+NFS给裸机批量装Ubuntu 22.04,5分钟搞定一台
5分钟批量部署UbuntuPXENFS自动化装机实战指南当机房里堆着50台裸机等待安装系统时你会选择一个个插U盘还是喝杯咖啡等它们自动完成PXENFS组合正是为这种场景而生的效率神器。想象一下所有机器同时启动5分钟后全部进入完全一致的Ubuntu系统——这就是现代运维的标准姿势。1. 为什么PXENFS是批量部署的终极方案传统装机方式在批量部署时暴露的痛点简直可以写一本《运维人员防脱发指南》。U盘需要逐个插拔耗时且易出错镜像工具虽然能克隆硬盘但每台机器仍需本地存储。相比之下PXENFS的方案就像给整个机房装上了系统无线充电功能。三种部署方式对比表方案部署速度硬件要求一致性保障后期维护难度U盘安装⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐镜像克隆⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐PXENFS网络启动⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐PXE(预启动执行环境)的工作原理很有意思裸机开机后网卡会广播求救信号PXE服务器回应说我这儿有系统拿去用吧。而NFS(网络文件系统)则让所有机器共用一个精装过的系统镜像就像共享厨房里的中央料理台。提示在硬件配置统一的场景下如网吧、实验室、云计算节点PXENFS方案部署100台机器的时间≈部署1台的时间网络传输耗时。2. 十分钟搭建PXE服务器我们先在Ubuntu 22.04上搭建PXE服务端假设服务器IP为192.168.1.100。以下操作需要root权限# 安装必要组件 apt install -y tftpd-hpa isc-dhcp-server nfs-kernel-server syslinux-common关键配置文件示例/etc/dhcp/dhcpd.confsubnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.150 192.168.1.200; option routers 192.168.1.1; option broadcast-address 192.168.1.255; filename pxelinux.0; next-server 192.168.1.100; }启动服务时的常见坑点防火墙需放行67/UDP(dhcp)、69/UDP(tftp)、2049/TCP(nfs)TFTP目录权限必须设为777确保/var/lib/tftpboot包含这些文件pxelinux.0从syslinux包复制ldlinux.c32从syslinux包复制menu.c32从syslinux包复制3. 制作黄金系统镜像找一台样板机假设IP为192.168.1.101安装Ubuntu 22.04配置好所有必要软件后执行# 在样板机上创建系统快照 sudo -i mkdir /nfsroot mount -t nfs 192.168.1.100:/nfsroot /mnt rsync -aAXv / --exclude{/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*} /mnt/必须调整的NFS配置/etc/exports/nfsroot 192.168.1.0/24(rw,no_root_squash,async,no_subtree_check)内核定制是保证网络启动成功的关键修改/etc/initramfs-tools/initramfs.confBOOTnfs MODULESnetboot添加网卡驱动到/etc/initramfs-tools/modules重新生成initrdupdate-initramfs -u -k uname -r4. 客户端调优与批量启动技巧PXE菜单配置/var/lib/tftpboot/pxelinux.cfg/default需要特别关注内核参数label ubuntu-nfs menu label ^Ubuntu 22.04 NFS Boot kernel ubuntu/vmlinuz append initrdubuntu/initrd.img root/dev/nfs nfsroot192.168.1.100:/nfsroot ipdhcp rw性能优化参数对比参数默认值推荐值效果nfs.nfs4_disable_idmapping10提升NFS文件操作速度20%sunrpc.tcp_slot_table_entries1664增加并发连接能力vm.dirty_ratio2010降低内存缓存风险实际部署时可以用这个命令批量唤醒裸机需提前配置好Wake-on-LAN# 批量发送魔术包 for i in {1..50}; do wakeonlan MAC_ADDRESS_PREFIX:$((i100)) done遇到启动失败时按这个检查清单排查客户端是否获取到DHCP租约TFTP日志是否有传输错误NFS导出列表是否包含客户端IP内核参数中的NFS路径是否正确5. 高级应用差异化管理与自动扩展纯无盘方案可能不适合所有场景。我们可以实现混合部署——系统运行在NFS上但为每台机器保留独立的/var和/home# 在客户端fstab中添加 tmpfs /var tmpfs defaults,size1G 0 0 192.168.1.100:/home/client1 /home nfs defaults 0 0自动化扩展方案使用Ansible批量更新NFS根目录- name: Update NFS clients hosts: all tasks: - apt: update_cacheyes upgradedist - command: reboot async: 0 poll: 0通过PXE菜单实现多系统选择结合Cobbler实现裸机全生命周期管理曾经给200台科研计算节点部署时我们发现一个有趣现象所有机器同时启动时NFS服务器会出现IO瓶颈。解决方案是在/etc/nfs.conf中添加[nfsd] threads32这个配置让部署时间从原来的8分钟降到3分钟——足够冲一杯手冲咖啡的时间整个集群就准备就绪了。