912 字
5 分钟
使用PXE方案安装系统
2026-04-27

简介#

netboot.xyz是一个开源项目,基于PXE/iPXE实现的增强版网络装系统的启动工具。 而PXE是一套让电脑从网卡启动而无需从硬盘或U盘启动的标准协议,支持多种系统,并且非常适合批量安装系统的场景

云服务器环境网络重装系统#

  • 1:查看系统信息并备份,安装新系统的时候可能会用到
# 查看系统盘
df -h /

# 查看网络配置
ip a

# 查看是否支持uefi
ls /sys/firmware/efi
  • 2:下载 netboot.xyz 启动镜像(iPXE引导器)
wget https://boot.netboot.xyz/ipxe/netboot.xyz.img
  • 3:将镜像DD写入整块系统盘(记得替换你实际的系统盘,会覆盖原系统,请确保重要数据已备份)
dd if=netboot.xyz.img of=/dev/vda bs=4M
  • 4:强制将缓存写入磁盘,确保数据落盘完成
sync
  • 5:重启服务器
reboot
  • 6:通过云厂商后台的服务器VNC界面进入启动菜单,选择网络安装
Linux Network Installs (64-bit)

如果重装成功,结束后会自动进入新系统,需要注意的是新系统一般没有开启root用户的ssh权限,需要用普通用户ssh连接,然后切换为root用户后再修改。Alpine系统默认是安装在内存中的,进入系统后需要执行setup-alpine命令安装到硬盘。

如果安装失败的话可能是硬盘分区有问题或者其他设置不对,可以返回到netboot.xyz 启动菜单,重新选择网络安装再装一遍即可。


自建netbootxyz服务安装系统#

非常适合局域网内批量装机,服务端使用Linux系统,客户端装Debian12系统为例。

服务端和客户端必须要在同一局域网,服务端地址以192.168.1.10为例,请注意替换自己实际的地址。

  • 安装dnsmasq
apt install dnsmasq -y
  • Docker部署netbootxyz服务
services:
  netbootxyz:
    image: ghcr.io/netbootxyz/netbootxyz
    container_name: netbootxyz
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config   # 存放自动生成的配置文件和自定义菜单
      - ./assets:/assets   # 存放资源,可以直接通过HTTP端口访问
    ports:
      - 3000:3000          # Web UI 端口
      - 69:69/udp          # TFTP 端口
      - 80:80              # HTTP 端口
    restart: unless-stopped

编辑/etc/dnsmasq.conf

# 注意替换实际的网卡名称
interface=eth0
bind-interfaces
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,12h

# 如果有其他DHCP的话可以开启强制接管
# dhcp-authoritative

# 直接指向 Docker 容器暴露在宿主机的 TFTP 端口
dhcp-boot=tag:!efi64,netboot.xyz.kpxe,,192.168.1.10
dhcp-match=set:efi64,option:client-arch,7
dhcp-boot=tag:efi64,netboot.xyz.efi,,192.168.1.10
  • 重启dnsmasq
systemctl restart dnsmasq
  • 下载镜像文件
# 创建目标目录
mkdir -p ./assets/debian

# 下载 linux 内核文件
wget -P ./assets/debian https://mirrors.tuna.tsinghua.edu.cn/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux

# 下载 initrd.gz 初始化文件系统
wget -P ./assets/debian https://mirrors.tuna.tsinghua.edu.cn/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz

此时,这些文件会自动被容器内的 Nginx 代理,可以通过 http://192.168.1.10:80/debian/linux 访问。

浏览器访问:http://192.168.1.10:3000 进入 netboot.xyz 可视化控制台。

点击Menus,修改boot.cfg文件:

  • 第8行:将boot.netboot.xyz/3.0.1 改为 http://192.168.1.10:80/menus
  • 第9行新增:set custom_url http://192.168.1.10:80/menus/custom.ipxe
  • 第14行:将https://github.com/netbootxyz 改为 http://192.168.1.10:80

然后编辑 custom.ipxe(如果没有则新建)。

填入以下内容:

#!ipxe

# 这里的 ${next-server} 变量会自动获取当前 DHCP 中指向的服务器 IP
set server_url http://${next-server}:80/debian

kernel ${server_url}/linux initrd=initrd.gz
initrd ${server_url}/initrd.gz
boot

记得点击右上角保存。

  • 使配置可公开访问:
cp -r ./config/menus/ ./assets/

完成后建议重启一次netbootxyz容器

没问题的话,客户端机器进入bios将PXE网络启动改为第一个启动项即可。

Windows#

对于安装Windows系统,可以使用 https://github.com/ipxe/wimboot 来直接加载 Windows 安装程序。

微软官方的Windows ISO镜像文件中,解压后sources目录下有一个核心文件boot.wim。这个boot.wim本质上就是一个微型的 Windows PE环境,可以用来启动并运行Windows安装程序。

使用PXE方案安装系统
https://emohe.cn/posts/40/
作者
阿涛の小破站
发布于
2026-04-27
许可协议
CC BY-NC-SA 4.0