一网打尽:手把手教你搭建PXE网络启动服务器

告别繁琐的U盘启动盘,让电脑通过网络一键安装操作系统 复制代码

在日常IT运维中,我们经常需要为多台计算机安装操作系统。传统的U盘或光盘安装方式效率低下,尤其面对大批量设备时。今天,我将详细介绍如何搭建PXE网络启动服务器,实现计算机无需本地存储介质,直接通过网络安装操作系统。

什么是PXE?

PXE(Preboot eXecution Environment,预启动执行环境)是由Intel设计的协议,它使计算机可以通过网络启动操作系统,而不依赖本地存储设备(如硬盘、U盘或光盘)。

PXE工作流程大致如下:

  1. 客户端开机选择网络启动
  2. 通过DHCP获取IP地址和启动服务器位置
  3. 通过TFTP下载启动文件
  4. 加载操作系统安装程序

环境准备

在开始之前,请确保你拥有:

  • 一台运行Linux的服务器(本文以Ubuntu 20.04为例)
  • 足够的磁盘空间存放操作系统镜像
  • 稳定的局域网环境
  • 客户端计算机支持网络启动

搭建步骤

1. 安装必要软件

首先更新系统并安装所需软件包:

sql 复制代码
sudo apt update
sudo apt install -y isc-dhcp-server tftpd-hpa apache2 syslinux

2. 配置DHCP服务器

编辑DHCP服务器配置文件 /etc/dhcp/dhcpd.conf

bash 复制代码
sudo nano /etc/dhcp/dhcpd.conf

添加以下内容(请根据你的网络环境调整):

ini 复制代码
# 基本DHCP配置
authoritative;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option subnet-mask 255.255.255.0;
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    
    # PXE相关配置
    filename "pxelinux.0";  # PXE启动文件名
    next-server 192.168.1.10;  # TFTP服务器IP地址(你的PXE服务器IP)
}

启动DHCP服务:

vbscript 复制代码
sudo systemctl enable isc-dhcp-server
sudo systemctl start isc-dhcp-server

3. 配置TFTP服务器

创建TFTP目录结构:

bash 复制代码
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
sudo mkdir -p /var/lib/tftpboot/ubuntu

复制SYSLINUX引导文件:

bash 复制代码
sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/modules/bios/libutil.c32 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/modules/bios/menu.c32 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

4. 准备操作系统镜像

以Ubuntu 20.04为例,下载并解压ISO文件:

bash 复制代码
# 创建Web服务器目录
sudo mkdir -p /var/www/html/ubuntu

# 挂载或解压Ubuntu ISO
sudo mount -o loop ubuntu-20.04.3-live-server-amd64.iso /mnt
sudo cp -r /mnt/* /var/www/html/ubuntu/
sudo umount /mnt

5. 配置PXE启动菜单

创建默认启动配置文件 /var/lib/tftpboot/pxelinux.cfg/default

csharp 复制代码
sudo nano /var/lib/tftpboot/pxelinux.cfg/default

添加以下内容:

less 复制代码
DEFAULT menu.c32
PROMPT 0
TIMEOUT 300

MENU TITLE PXE Boot Server

LABEL ubuntu20.04
    MENU LABEL Install Ubuntu 20.04 Server
    KERNEL ubuntu/casper/vmlinuz
    APPEND initrd=ubuntu/casper/initrd root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.1.10/ubuntu/ubuntu-20.04.3-live-server-amd64.iso

LABEL local
    MENU LABEL Boot from Local Drive
    LOCALBOOT 0

6. 设置文件权限并启动服务

bash 复制代码
# 设置TFTP目录权限
sudo chown -R tftp:tftp /var/lib/tftpboot
sudo chmod -R 755 /var/lib/tftpboot

# 启动TFTP服务
sudo systemctl enable tftpd-hpa
sudo systemctl start tftpd-hpa

# 启动Apache服务(用于提供ISO文件)
sudo systemctl enable apache2
sudo systemctl start apache2

7. 配置防火墙(如有)

如果系统启用了防火墙,需要开放相关端口:

bash 复制代码
sudo ufw allow 69/udp    # TFTP
sudo ufw allow 80/tcp    # HTTP(用于ISO文件)
sudo ufw allow 67/udp    # DHCP

测试PXE启动

现在,你可以测试PXE服务器了:

  1. 将客户端计算机连接到同一网络
  2. 在BIOS中设置网络启动为第一启动项
  3. 重启计算机,应该能看到PXE启动菜单
  4. 选择"Install Ubuntu 20.04 Server"开始安装

高级配置

添加更多操作系统

你可以按照相同的方式添加更多操作系统,如CentOS、Windows等。只需:

  1. 将ISO文件内容解压到Web服务器目录
  2. 在PXE菜单中添加相应的启动项
  3. 配置正确的内核和初始化内存盘路径

使用Kickstart/Preseed实现无人值守安装

为了实现完全自动化的安装,可以配置Kickstart(CentOS/RHEL)或Preseed(Debian/Ubuntu)文件:

bash 复制代码
# 在APPEND行添加自动安装参数
APPEND initrd=ubuntu/casper/initrd root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.1.10/ubuntu/ubuntu-20.04.3-live-server-amd64.iso auto=true priority=critical preseed/url=http://192.168.1.10/ubuntu/preseed.cfg

故障排除

如果PXE启动失败,可以检查以下几点:

  1. 网络连接:确保客户端与服务器在同一子网
  2. DHCP服务:检查DHCP服务器是否正常运行,客户端是否获得IP地址
  3. 防火墙设置:确认相关端口已开放
  4. 文件路径:检查TFTP和HTTP服务器上的文件路径是否正确
  5. 文件权限:确保TFTP目录有适当的读取权限

结语

通过本文的指导,你应该已经成功搭建了一个功能完整的PXE服务器。PXE网络启动不仅提高了系统部署效率,还为大规模计算机管理提供了便利。随着经验的积累,你可以进一步探索高级功能,如无人值守安装、多操作系统支持和自动化脚本集成,打造更强大的网络部署环境。

如果你在搭建过程中遇到任何问题,欢迎在评论区留言讨论!

相关推荐
荣--16 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森17 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信