1. 为什么我最终选择了 iVentoy 做批量装机
机房上架新机器,最烦的从来不是硬件安装,而是装系统。十几台甚至几十台机器,一台一台插U盘、选启动项、点下一步,一天下来人直接废掉。我最早用的是传统 PXE 方案,配 DHCP、TFTP、HTTP 服务,再手写 pxelinux.cfg,光是让不同型号的网卡都能拿到正确的启动文件就折腾了整整两天。后来换成 Windows Deployment Services,又卡在驱动注入和 UEFI 兼容性上。直到用上 iVentoy,我才真正体会到什么叫"一根网线批量装系统"。
iVentoy 是 Ventoy 的作者做的网络启动版本,核心思路非常直接:把 ISO 镜像丢到一个目录里,启动 iVentoy 服务,客户端通过网络启动后会自动列出所有可用的镜像,选一个就能装。它同时支持 BIOS 和 UEFI,支持 x86_64 和 ARM64,支持 Windows、Linux、VMware ESXi 等常见系统的 ISO 直接启动,不需要你手动解包、不需要改配置文件、不需要为每个镜像单独写启动菜单。对于经常要给服务器批量装系统的运维来说,这东西基本就是"增强版 PXE 服务器一键部署"的最优解。
这篇文章我打算把自己从零部署 iVentoy 的完整过程写清楚,包括网络环境怎么规划、服务端怎么配置、客户端怎么引导、批量装机怎么自动化,以及我踩过的那些坑。不管你是第一次接触 PXE 网络启动,还是已经用过传统方案想换更省事的工具,应该都能直接抄作业。
2. 部署前的网络环境规划与准备工作
2.1 理解 PXE 网络启动的基本链路
在动手之前,有必要把 PXE 的整个链路讲清楚,不然出了问题你根本不知道从哪查。PXE 全称 Preboot Execution Environment,简单说就是网卡自带的一个小系统,它在操作系统启动之前就能通过网络从服务器下载启动文件。整个流程大致是这样的:
- 客户端开机,网卡发出 DHCP 请求,同时带上 PXE 相关的扩展字段。
- DHCP 服务器回应,除了分配 IP,还要告诉客户端"启动文件在哪台服务器上、叫什么名字"。
- 客户端根据 DHCP 给的信息,通过 TFTP 或 HTTP 去下载启动文件。
- 启动文件运行后,再去服务器拉取完整的镜像或内核。
传统方案里,第 2 步和第 3 步需要你自己搭 DHCP、TFTP、HTTP 三个服务,还要保证它们之间的配置对得上。iVentoy 把这些全部打包进了一个程序里,你只需要运行它,它自己会处理 DHCP 代理、TFTP 传输和 HTTP 分发。这就是它比传统方案省事的地方。
注意:iVentoy 默认会启动自己的 DHCP 服务。如果你的网络里已经有一台 DHCP 服务器在跑,两者会冲突,必须做额外配置。这一点后面会详细讲。
2.2 硬件与网络环境的最低要求
iVentoy 对服务端的要求其实很低,我实测下来,一台普通的办公机就能扛住十几台客户端同时装机。下面是我建议的配置:
| 项目 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 双核 | 四核及以上 | 并发装机时 CPU 主要消耗在 HTTP 分发 |
| 内存 | 2GB | 4GB 及以上 | 镜像缓存会占用一部分内存 |
| 硬盘 | 20GB | 根据镜像数量定 | 一个 Windows ISO 约 5GB,Linux 约 1-4GB |
| 网卡 | 千兆 | 千兆及以上 | 百兆网卡装 Windows 会非常慢 |
| 网络 | 独立交换机 | 独立交换机 | 避免和办公网络混在一起 |
网络方面,我强烈建议单独拉一个交换机,把服务端和所有待装机的客户端接在这个交换机上,形成一个独立的二层网络。原因有两个:一是 iVentoy 的 DHCP 不会污染你现有的办公网络,二是千兆交换机下装机速度能跑满,装一个 Windows Server 大概十几分钟。
2.3 网线与水晶头的那些细节
热词里出现了"网线制作""网线水晶头定义",说明很多人是自己压网线的。这里我多说两句,因为装机过程中网络不稳定,十有八九是网线的问题。
现在千兆网络必须用超五类(Cat5e)以上的网线,而且八根线全部要接通。很多人压线只压了 1、2、3、6 四根,百兆能用,千兆直接掉到百兆甚至不通。T568B 的线序是:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。两头都用 T568B 就是直通线,服务端到交换机、客户端到交换机都用直通线。
压好之后一定要用测线仪测一遍,八灯依次亮起才算合格。我遇到过一根线七灯亮一灯不亮,装机装到一半客户端掉线,排查了半天才发现是水晶头没压紧。这种问题在批量装机时特别致命,因为你会以为是服务端配置有问题。
实操心得:批量装机前,把所有要用的网线全部测一遍,别省这几分钟。装机过程中掉线重来,浪费的时间是测线时间的几十倍。
3. iVentoy 服务端的下载与核心配置
3.1 下载与目录结构说明
iVentoy 官方提供 Windows 和 Linux 两个版本。Windows 版直接下载压缩包解压就能用,Linux 版是一个可执行文件加一个目录。我两种都用过,Windows 版适合临时用,Linux 版适合长期跑在服务器上。
解压后的目录结构大致是这样:
iventoy/ ├── iventoy # Linux 主程序 / Windows 下是 iventoy.exe ├── iso/ # 放 ISO 镜像的目录 ├── lib/ # 依赖库 ├── data/ # 运行时数据 └── log/ # 日志目录你只需要把要装的 ISO 全部丢进iso/目录,iVentoy 启动时会自动扫描并生成启动菜单。这一点比传统 PXE 强太多,传统方案每加一个镜像都要改配置文件,iVentoy 是即放即用。
3.2 启动参数与关键配置项
Linux 下启动命令很简单:
sudo ./iventoy.sh startWindows 下直接双击iventoy.exe,会弹出一个图形界面。但真正要配置的东西在图形界面或者配置文件里。下面是我认为最关键的几个配置项:
网络模式选择。iVentoy 有两种网络模式:一种是"外部 DHCP 模式",也就是网络里已经有 DHCP 服务器,iVentoy 只负责 TFTP 和 HTTP;另一种是"iVentoy DHCP 模式",iVentoy 自己当 DHCP 服务器。独立网络环境下用后者最省事,直接选 iVentoy DHCP 模式即可。
DHCP 地址池。默认是192.168.1.100到192.168.1.200,如果你的网络不是这个网段,要改成和服务端同网段的地址。比如服务端是10.0.0.1,地址池就设成10.0.0.100到10.0.0.200。
HTTP 端口。默认 16000,一般不用改。但如果你的服务端上跑了别的 Web 服务占用了端口,就要换一个。
启动模式。iVentoy 支持 BIOS、UEFI、以及两者同时支持。建议选"Both",这样不管客户端是老机器还是新机器都能启动。
配置改完之后,点"启动"按钮,服务端就开始工作了。日志里会显示 DHCP、TFTP、HTTP 三个服务的启动状态,三个都显示 OK 才算正常。
3.3 镜像目录的组织技巧
iVentoy 支持子目录,这一点很实用。我一般这样组织:
iso/ ├── windows/ │ ├── Win11_23H2.iso │ ├── WinServer2022.iso │ └── Win10_22H2.iso ├── linux/ │ ├── ubuntu-22.04.iso │ ├── centos-7.iso │ └── debian-12.iso └── tools/ └── memtest86.iso客户端启动后,菜单会按目录层级展示,找起来很清楚。如果你镜像特别多,还可以用 iVentoy 的"镜像过滤"功能,只显示匹配特定关键字的镜像。
注意:ISO 文件名不要用中文和特殊字符,虽然 iVentoy 支持,但某些客户端在 UEFI 模式下加载中文路径会出问题。我吃过这个亏,后来全部改成英文加数字。
4. 客户端网络启动与批量装机实操
4.1 客户端 BIOS 设置要点
客户端要能从网络启动,需要在 BIOS 里做几件事:
- 开启网卡的 PXE 启动选项。一般在 Boot 菜单里,把"Network Boot"或"PXE Boot"调到启动顺序第一位。
- 关闭 Secure Boot。虽然 iVentoy 支持 Secure Boot,但某些老网卡的 PXE 固件和 Secure Boot 配合有问题,关掉最稳。
- 确认启动模式。UEFI 机器选 UEFI PXE,老机器选 Legacy PXE。如果 BIOS 里同时有"UEFI"和"Legacy"两个网络启动项,选 UEFI 那个。
不同品牌的服务器进入 PXE 的快捷键不一样,我整理了一个常用对照表:
| 品牌 | 快捷键 | 备注 |
|---|---|---|
| Dell | F12 | 选择一次性启动菜单 |
| HP | F9 | 启动菜单 |
| Lenovo | F12 | 启动菜单 |
| 华硕主板 | F8 | 启动菜单 |
| 技嘉主板 | F12 | 启动菜单 |
| 微星主板 | F11 | 启动菜单 |
4.2 从网络启动到选择镜像的完整过程
客户端设置好之后,开机应该能看到网卡在搜索 DHCP,然后出现 iVentoy 的启动菜单。菜单里会列出iso/目录下所有的镜像,用方向键选择,回车确认。
这里有个细节:iVentoy 的菜单支持两种模式,一种是"直接启动 ISO",另一种是"注入自动安装脚本"。前者就是普通的启动安装程序,需要你手动点下一步;后者可以配合应答文件实现全自动安装。批量装机肯定要用后者。
选择镜像后,iVentoy 会通过 HTTP 把镜像传输到客户端内存里,然后启动。Windows ISO 大概 5GB,千兆网络下传输时间约 1 分钟,加上安装过程,一台机器从启动到装完大概 15 到 20 分钟。如果你同时装 10 台,总时间不会变成 200 分钟,因为传输是并行的,瓶颈在服务端的网卡和硬盘读取速度。
4.3 批量装机的并发控制与性能调优
iVentoy 默认没有限制并发数,但服务端的网卡带宽是有限的。千兆网卡理论带宽 125MB/s,如果同时给 10 台客户端传输,每台只能分到 12.5MB/s,传输时间会拉长到 7 分钟左右。所以并发数不是越多越好。
我的经验是:千兆网络下,同时装 5 到 8 台比较合适。如果服务端是万兆网卡,可以同时装 20 台以上。另外,把 ISO 放在 SSD 上比放在机械硬盘上快很多,因为多客户端并发读取时,机械硬盘的随机读取会成为瓶颈。
如果你要装的机器特别多,可以考虑用 iVentoy 的"多网卡"功能,服务端插多张网卡,每张网卡接一个交换机,分担流量。这个功能在专业版里支持,免费版单网卡也够用。
实操心得:装机前先把所有 ISO 在服务端本地读一遍,让文件进入系统缓存。这样客户端来拉的时候,直接从内存读,速度会快很多。Linux 下可以用
cat *.iso > /dev/null预热。
5. 自动应答文件与全自动装机配置
5.1 Windows 自动安装应答文件
手动点下一步装一台机器还行,装十台就是折磨。Windows 的自动安装靠的是autounattend.xml应答文件。iVentoy 支持在启动时自动注入这个文件。
制作应答文件可以用 Windows ADK 里的 Windows System Image Manager,也可以直接手写。核心要配置的几项:
- 磁盘分区方案(自动清空磁盘、创建分区)
- 语言和时区
- 产品密钥(可选,也可以装完再激活)
- 计算机名(可以用随机名或从 DHCP 获取)
- 管理员密码
- 首次登录后要执行的脚本
把autounattend.xml放在 ISO 根目录,或者放在 iVentoy 的data/目录下,启动时选择"注入应答文件"即可。这样客户端启动后全自动完成安装,中间不需要任何人工干预。
5.2 Linux 自动安装配置
Linux 这边,Ubuntu 用 autoinstall,CentOS 用 kickstart。以 Ubuntu 22.04 为例,你需要准备一个user-data文件:
#cloud-config autoinstall: version: 1 identity: hostname: ubuntu-server username: admin password: "$6$rounds=4096$..." storage: layout: name: direct packages: - openssh-server - vim这个文件放在 ISO 的nocloud目录下,或者通过 iVentoy 的注入功能传入。Ubuntu 22.04 的服务器版安装程序会自动读取这个配置,实现无人值守安装。
CentOS 的 kickstart 文件类似,核心是配置分区、网络、软件包和用户。iVentoy 支持把 kickstart 文件通过 HTTP 提供给客户端,你只需要在启动参数里加上inst.ks=http://服务端IP:16000/ks.cfg即可。
5.3 装机后的初始化脚本
系统装完只是第一步,后面还有一堆事情:改主机名、配 IP、装监控 agent、加入域或集群。这些可以写成一个初始化脚本,在应答文件里配置首次登录自动执行。
我一般会准备一个post-install.sh,放在服务端的 HTTP 目录下,客户端装完后用 curl 拉下来执行。脚本内容大致包括:
#!/bin/bash # 设置主机名 hostnamectl set-hostname $(cat /etc/hostname) # 配置静态 IP # 安装常用工具 apt install -y vim curl wget htop # 安装监控 agent # 配置时间同步 timedatectl set-ntp true这样一套流程下来,从裸机到可用状态,全程不需要人工介入。我最多的一次同时装了 12 台,坐在旁边喝咖啡,半小时后全部装完。
6. 常见故障排查与避坑经验
6.1 客户端拿不到 IP 或启动失败
这是最常见的问题,排查思路按顺序来:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 客户端一直显示 DHCP... | DHCP 没响应 | 检查服务端 DHCP 是否启动,网线是否通 |
| 拿到 IP 但无法下载启动文件 | TFTP/HTTP 不通 | 检查防火墙,确认 69 和 16000 端口开放 |
| 启动文件下载后黑屏 | 启动模式不匹配 | UEFI 机器选了 Legacy 启动,或反之 |
| 菜单出现但选镜像后报错 | ISO 损坏 | 校验 ISO 的 MD5,重新下载 |
我遇到最多的是防火墙问题。Linux 服务端上如果开了 firewalld 或 ufw,默认会挡掉 TFTP 和 HTTP 端口。临时关闭防火墙测试:
sudo systemctl stop firewalld # 或者 sudo ufw disable确认是防火墙问题后,再按需开放端口,而不是一直关着。
6.2 iVentoy 服务端崩溃或重启
热词里有"iventoy 总是重启""无法设置""崩溃了",说明不少人遇到了稳定性问题。我总结下来主要有几个原因:
一是端口冲突。iVentoy 默认用 16000 端口,如果这个端口被别的程序占了,服务启动会失败。用netstat -tlnp | grep 16000查一下,有冲突就改端口。
二是权限问题。Linux 下 iVentoy 需要 root 权限才能操作网络接口和绑定 69 端口。如果你用普通用户启动,DHCP 和 TFTP 会起不来。一定要用sudo。
三是网卡选择错误。服务端有多张网卡时,iVentoy 可能绑到了错误的网卡上。在配置界面里明确指定要用的网卡,别用"自动"。
四是 ISO 目录里有损坏的文件。iVentoy 启动时会扫描所有 ISO,如果某个文件损坏或格式不对,可能导致扫描过程崩溃。把可疑的 ISO 移出去再试。
6.3 装机速度慢的优化思路
装机慢通常不是 iVentoy 的问题,而是网络或存储的问题。按这个顺序排查:
- 确认客户端和服务端都是千兆连接。看交换机的指示灯,千兆是绿色,百兆是橙色。如果客户端显示百兆,换网线或换交换机端口。
- 确认 ISO 存放在 SSD 上。机械硬盘并发读取时,磁头来回寻道,速度会掉得很厉害。
- 减少并发数。同时装的机器越多,每台分到的带宽越少。
- 关闭服务端上其他占带宽的程序。比如正在跑备份、正在同步文件,都会抢带宽。
避坑技巧:如果你的交换机支持链路聚合,把服务端的两张网卡做 bond,带宽翻倍,并发装机能力直接提升一倍。这个在批量装机场景下效果非常明显。
6.4 特殊场景:只有一根网线怎么连服务器管理口
热词里有人问"只有一条网线,怎么通过本地电脑连服务器管理口"。这个场景和 iVentoy 相关,因为很多人是在管理口上做网络启动的。服务器一般有独立的 IPMI 管理口,用一根网线把笔记本和管理口直连,笔记本设一个同网段的静态 IP,就能通过浏览器访问管理界面,然后在管理界面里挂载 ISO 或配置 PXE 启动。
具体操作:笔记本网卡设成192.168.1.100/24,服务器管理口默认通常是192.168.1.1或192.168.0.1,浏览器访问这个地址,登录后就能看到远程控制台。在远程控制台里可以挂载本地 ISO,也可以配置从网络启动。这样你不需要跑到机房,坐在工位上就能给服务器装系统。
7. 进阶玩法与扩展思路
7.1 在虚拟化环境中部署 iVentoy
如果你没有物理机做测试,完全可以在 VMware 或 Proxmox 里跑 iVentoy。虚拟机装一个 Linux,把 iVentoy 跑起来,然后创建几个测试虚拟机,网卡设成和 iVentoy 同一个虚拟网络,就能模拟批量装机。这个方式特别适合学习和验证配置,不用担心搞坏物理机。
在 Proxmox 里,创建一个 Linux 虚拟机,网卡桥接到vmbr0,然后在这个虚拟机上跑 iVentoy。再创建几个待装机的虚拟机,网卡也桥接到vmbr0,启动时选网络启动,就能看到 iVentoy 的菜单。整个过程不需要任何物理网线和交换机。
7.2 结合自动化运维工具做集群部署
iVentoy 解决的是"装系统"这一步,装完之后的事情可以交给 Ansible、SaltStack 这类工具。我的做法是:iVentoy 装完系统后,初始化脚本自动把机器的主机名和 IP 注册到 Ansible 的 inventory 里,然后 Ansible 统一推送配置、安装软件、部署服务。这样从裸机到集群就绪,全程自动化。
如果你要部署的是 Kubernetes 集群,也可以用类似思路:iVentoy 装好基础系统,初始化脚本安装 containerd、kubelet、kubeadm,然后由一个 master 节点执行kubeadm join把其他节点拉进来。整个过程可以做到无人值守。
7.3 镜像更新与版本管理
ISO 镜像会不断更新,Ubuntu 每半年一个新版本,Windows 每年一个大版本。建议在服务端上建一个版本管理目录,保留最近两三个版本,旧的及时清理,避免磁盘占满。
我一般用日期加版本号命名,比如ubuntu-22.04.3-20240115.iso,这样一眼就能看出是哪个版本、什么时候下载的。iVentoy 的菜单会按文件名排序,最新的版本放在最前面,选起来也方便。
另外,下载完 ISO 后一定要校验哈希值。Ubuntu 和 CentOS 官网都提供 SHA256,Windows 可以用微软官网的哈希工具。校验通过再放进iso/目录,避免装机装到一半发现镜像损坏。
8. 我个人的一些实操体会
iVentoy 这个工具,我从早期版本用到现在,最大的感受就是"省心"。传统 PXE 方案你要懂 DHCP、TFTP、HTTP、pxelinux、grub,还要为每个镜像单独配置,门槛不低。iVentoy 把这些全部封装了,你只需要放 ISO、点启动,剩下的它自己搞定。对于不是专门做网络启动的运维来说,这个工具能省下大量时间。
但它也不是万能的。如果你的网络环境特别复杂,比如有多个 VLAN、有现有的 DHCP 服务器不能动、有安全策略限制,那还是需要花时间做适配。另外,iVentoy 的免费版和专业版在功能上有差异,批量装机场景下免费版基本够用,但如果需要多网卡、更细的权限控制,可以考虑专业版。
最后分享一个小技巧:装机前把服务端的系统时间校准一下。我遇到过因为服务端时间不对,导致 Windows 客户端装完后系统时间错乱,域认证失败。用timedatectl或chrony同步一下时间,几秒钟的事,能避免很多莫名其妙的认证问题。这个细节很少有人提,但实际运维中确实会碰到。