pxelinux.0
是 Syslinux 项目中的核心网络引导文件,用于 PXE(预启动执行环境)启动流程,它存储在 TFTP 服务器上,当客户端通过网卡启动时,会从服务器加载该文件,进而读取配置文件(如 pxelinux.cfg/default
)决定启动选项(如加载 Linux 内核、Live CD 镜像等)。注意:直接修改 pxelinux.0
二进制文件既不安全也不必要,实际修改的是其配置文件。
为什么需要修改?
用户通常需要修改 pxelinux.0
的配置文件以实现:
- 更改默认启动的操作系统(如从 Ubuntu 切换为 CentOS)
- 添加/删除启动菜单项
- 调整内核启动参数(如
vga=792
设置分辨率) - 修复网络安装错误(如驱动加载失败)
详细修改步骤(通过配置文件)
定位配置文件
- 配置文件通常位于 TFTP 服务器的
pxelinux.cfg
目录中。 - 主配置文件默认命名为
default
(或根据客户端 MAC 地址/IP 命名)。 - 示例路径:
/var/lib/tftpboot/pxelinux.cfg/default
编辑配置文件
使用文本编辑器(如 nano
或 vim
)修改文件:
sudo nano /var/lib/tftpboot/pxelinux.cfg/default
关键配置项:
DEFAULT ubuntu # 默认启动项标签 TIMEOUT 50 # 菜单等待时间(单位:1/10秒) PROMPT 1 # 显示提示符 LABEL ubuntu MENU LABEL Ubuntu 22.04 KERNEL ubuntu/vmlinuz APPEND initrd=ubuntu/initrd.gz root=/dev/nfs netboot=nfs nfsroot=192.168.1.10:/nfs/ubuntu LABEL centos MENU LABEL CentOS 8 KERNEL centos/vmlinuz APPEND initrd=centos/initrd.img inst.repo=http://192.168.1.10/centos8
配置说明
DEFAULT
:指定默认启动项的LABEL
名称。TIMEOUT
:超时后自动启动默认项(50
= 5秒)。LABEL
:定义一个启动项,需唯一。KERNEL
:指定内核文件路径(相对 TFTP 根目录)。APPEND
:传递内核参数(如 NFS 路径、初始化内存盘)。
重启服务生效
sudo systemctl restart tftp-hpa # 重启 TFTP 服务 sudo systemctl restart dhcpd # 若 DHCP 指定了 TFTP 服务器,需重启 DHCP
验证修改
客户端重新 PXE 启动后,检查:
- 菜单是否显示新条目
- 默认项是否切换
- 内核参数是否生效(通过系统日志查看)
⚠️ 注意事项
- 权限问题:
- 确保 TFTP 目录权限:
chmod -R 755 /var/lib/tftpboot
- 配置文件需全局可读:
chmod 644 pxelinux.cfg/default
- 确保 TFTP 目录权限:
- 配置文件命名规则:
- 可基于客户端 IP 的十六进制命名(如
C0A8010A
对应168.1.10
)。 - 优先级:MAC 地址 > IP 十六进制 >
default
。
- 可基于客户端 IP 的十六进制命名(如
- 备份原配置:
cp /var/lib/tftpboot/pxelinux.cfg/default ./default.bak
- 避免直接修改
pxelinux.0
:- 该文件由 Syslinux 工具生成,手动编辑可能导致引导失败,需更新时,重新编译:
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz tar -xzf syslinux-6.03.tar.gz cd syslinux-6.03/bios/core make # 生成新的 pxelinux.0
- 该文件由 Syslinux 工具生成,手动编辑可能导致引导失败,需更新时,重新编译:
常见问题解答
Q1:修改后客户端无法启动?
- 检查 TFTP 路径是否正确(使用
tftp localhost
测试文件下载)。 - 确认
APPEND
参数中内核/驱动路径无误。
Q2:如何添加 Windows PXE 启动?
需配合 wimboot
工具,示例配置:
LABEL windows MENU LABEL Windows 10 KERNEL wimboot APPEND initrd=win10/bootmgr initrd=win10/boot.wim
Q3:菜单不显示?
- 确保
PROMPT 1
已设置(或MENU PROMPT 0
关闭强制菜单)。 - 检查
TIMEOUT
值是否过小。
引用说明
- Syslinux 官方文档:https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
- TFTP 服务器配置:https://help.ubuntu.com/community/TFTP
- PXE 协议详解:RFC 2131, RFC 1350
提示:操作前请确认您具备 Linux 系统管理基础,生产环境中建议在测试网络验证后再部署。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4705.html