ESXi 7.0离线部署实战:自定义镜像、驱动注入与Kickstart无人值守
简介VMware-ESXi-7.0.0.zip 是面向虚拟化运维人员与实验室搭建者的 ESXi 7.0 离线安装包适合在无外网或内网受限环境中部署裸机虚拟化平台也便于研究官方驱动封装结构。压缩包共 75 个文件以 72 个 vib 驱动与组件包为主涵盖 pvscsi、ne1000、i40en、lsi-mr3、smartpqi、nvmerdma 等存储与网卡驱动另含 2 个 xml 元数据文件和 1 个嵌套 zip整体约 344.44MB可用于离线安装或自定义镜像封装。目前已有 5614 人学习下载。对于希望摆脱在线安装依赖、手动排查驱动兼容性或尝试将第三方驱动集成进 ESXi 7.0 镜像的读者这份包体提供了完整的组件清单与版本信息可作为对照官方 vib 命名规则、梳理驱动依赖关系、验证封装流程的实用素材也方便在离线场景下快速完成部署与调试。1. 从一份离线包说起ESXi 7.0 部署到底在解决什么问题手里拿到一个VMware-ESXi-7.0.0.zip很多人第一反应是「解压、找 ISO、刻盘、装」。但真到机房或实验室里事情往往没这么顺目标机器没有外网、没有 vCenter、没有共享存储甚至连显示器都要临时借。这时候一份离线包的价值就出来了——它把安装介质、驱动补充包、镜像配置文件全塞进一个压缩包里让你能在完全断网的环境里把裸金属变成一台可用的虚拟化宿主机。这篇笔记面向三类人第一次接触 ESXi 7.0 的运维新手、需要在离线环境批量交付的工程师、以及想搞清楚「为什么我的机器装完认不到网卡/存储」的排障者。我会从离线包的结构讲起一路走到安装参数、驱动注入、常见翻车点最后给一个能直接抄的自动化部署思路。全程不依赖任何在线源所有命令和配置都能在断网机器上复现。2. 拆开 ESXi 7.0.0.zip离线包里到底装了什么2.1 离线包的目录结构与关键文件识别拿到压缩包先别急着解压到桌面找个有足够空间的目录用unzip -l先看清单。典型的 ESXi 7.0 离线包解压后会出现几个核心目录vmware-esxi-7.0.0-xxxxxxx/下面通常包含metadata.zip、vib20/、profiles/、boot.cfg以及最关键的安装镜像文件。不同来源的包命名略有差异但结构逻辑一致。# 先看压缩包清单确认没有嵌套压缩 unzip -l VMware-ESXi-7.0.0.zip | head -40 # 解压到独立目录避免污染当前工作区 mkdir -p /opt/esxi-offline cd /opt/esxi-offline unzip /path/to/VMware-ESXi-7.0.0.zip # 查看解压后的顶层结构 find . -maxdepth 2 -type d | sort逻辑说明unzip -l只列清单不解压能快速判断包是否完整、有没有多层嵌套。解压后find看目录层级正常应该能看到vib20和profiles两个目录。vib20里放的是驱动和组件包VIBprofiles里是镜像配置文件Image Profile这两个是后续做自定义镜像的基础。参数说明-maxdepth 2限制递归深度避免输出爆炸-type d只看目录。如果你拿到的包解压后只有一个 ISO 文件那说明它是「纯 ISO 包」而非「离线 depot 包」后续注入驱动的做法会不同需要先确认清楚。2.2 ISO 镜像与 VIB 包的关系为什么不能直接刻盘就完事很多人以为离线包里的 ISO 就是全部刻盘装完发现网卡不认、RAID 卡不认然后开始怀疑人生。根本原因是官方 ISO 内置的驱动是通用集而你的服务器可能用了较新的网卡或阵列卡驱动没进官方镜像。离线包里的vib20目录就是给你补驱动的。# 查看 ISO 文件位置和大小 ls -lh *.iso # 列出 vib20 目录下的驱动包 ls vib20/ | head -20 # 查看某个 VIB 的元信息需要先解压 VIB # VIB 本质是 zip可以用 unzip 看内部结构 unzip -l vib20/某个驱动.vib | head -20逻辑说明ISO 是安装介质VIB 是驱动/组件包。ESXi 7.0 的镜像构建逻辑是「基础镜像 驱动包 可用镜像」。如果你直接拿官方 ISO 装等于放弃了离线包里可能包含的补充驱动。正确做法是用profiles里的 Image Profile 做基准把vib20里的驱动加进去重新导出一个 ISO。参数说明ls -lh看文件大小正常 ESXi 7.0 ISO 在 300MB 到 400MB 之间unzip -l看 VIB 内部结构通常包含descriptor.xml、payload/等。注意 VIB 的命名里会带驱动版本和厂商代号比如net-厂商-驱动名-版本.vib认准厂商代号能避免装错驱动。提示如果你不确定某个 VIB 是否兼容当前 ESXi 7.0 版本先看它的descriptor.xml里的acceptance-level和version字段不匹配的强行注入会导致镜像构建失败。3. 用 Image Builder 做自定义镜像从离线包到可启动 ISO3.1 准备 Image Builder 环境与导入离线 depotImage Builder 是 ESXi 自带的镜像定制工具通常在 vCenter 的 PowerCLI 里用但离线环境下我们直接用 ESXi 主机上的esxcli配合imagebuilder命令。如果你手头没有现成的 ESXi 环境也可以在一台 Linux 机器上用vibauthor和esxcli的离线模式操作但最稳的还是找一台能临时启动的 ESXi 主机。# 在 ESXi 主机上进入维护模式如果已有 ESXi 环境 esxcli system maintenanceMode set --enable true # 查看当前 Image Builder 的 depot 列表 esxcli imagebuilder depot list # 添加离线包作为 depot假设离线包已上传到 /vmfs/volumes/datastore1/esxi-offline/ esxcli imagebuilder depot add --depot/vmfs/volumes/datastore1/esxi-offline/ # 再次查看 depot确认已导入 esxcli imagebuilder depot list逻辑说明depot add把离线包注册为 Image Builder 的软件源。导入后depot list会显示这个 depot 的 ID 和路径。注意路径必须是 ESXi 主机能访问到的本地存储或 NFS 路径不能是 Windows 共享路径。参数说明--depot后面跟的是离线包解压后的根目录不是 zip 文件本身。如果你上传的是 zip需要先在 ESXi 的 shell 里解压ESXi 的 shell 支持unzip但空间有限建议在外部解压后只上传必要目录。3.2 创建自定义 Image Profile 并注入驱动有了 depot下一步是创建一个新的 Image Profile把官方基础镜像和补充驱动合并。# 列出可用的 Image Profile esxcli imagebuilder profile list # 克隆一个基础 profile假设基础 profile 名为 ESXi-7.0.0-xxxx-standard esxcli imagebuilder profile clone --cloneESXi-7.0.0-xxxx-standard --newnameESXi-7.0.0-custom # 向自定义 profile 添加 VIB驱动包 esxcli imagebuilder profile add --profileESXi-7.0.0-custom --vibnet-厂商-驱动名 # 查看自定义 profile 的软件包列表确认驱动已加入 esxcli imagebuilder profile get --profileESXi-7.0.0-custom逻辑说明profile clone复制一份基础配置避免污染原始 profile。profile add把指定 VIB 加入自定义 profile。profile get用来验证输出里会列出所有包含的 VIB确认你加的驱动在列表里。参数说明--vib后面跟的是 VIB 的名称不是文件名。VIB 名称可以从depot list或vib20目录下的descriptor.xml里找到。如果添加时报依赖错误说明该 VIB 依赖其他组件需要先把依赖的 VIB 也加进去。3.3 导出 ISO 并验证镜像完整性自定义 profile 建好后导出成 ISO 就能拿去刻盘或挂载安装了。# 导出 ISO 到指定路径 esxcli imagebuilder profile export --profileESXi-7.0.0-custom --destination/vmfs/volumes/datastore1/custom-esxi.iso # 查看导出文件大小 ls -lh /vmfs/volumes/datastore1/custom-esxi.iso # 验证 ISO 的 profile 信息可选用 esxcli 的 imagebuilder 校验 esxcli imagebuilder profile get --profileESXi-7.0.0-custom | grep -i vib逻辑说明profile export把自定义 profile 打包成可启动 ISO。导出后检查文件大小正常应该在 350MB 到 450MB 之间取决于加入的驱动数量。如果只有几十 MB说明导出失败或 profile 不完整。参数说明--destination必须是 ESXi 主机可写的路径通常是本地 datastore。导出过程可能耗时几分钟取决于驱动包大小。导出完成后建议用md5sum或sha256sum校验一下避免传输损坏。注意导出的 ISO 只包含你加入的驱动不会自动包含所有硬件驱动。如果目标机器还有其他未识别的硬件需要重复「添加 VIB → 导出」的流程。4. 裸金属安装 ESXi 7.0从启动到首次配置4.1 制作启动盘与 BIOS 关键设置ISO 有了接下来是写盘和启动。用dd或 Rufus 都行但 ESXi 7.0 对 U 盘引导有要求建议用 8GB 以上的 USB 2.0/3.0 盘。# Linux 下写盘假设 U 盘是 /dev/sdb务必确认清楚 sudo dd ifcustom-esxi.iso of/dev/sdb bs4M statusprogress oflagsync # 写完后同步缓存 sync逻辑说明dd直接写裸设备bs4M提高写入效率oflagsync确保数据落盘。写完后sync再拔盘避免缓存未刷导致启动失败。参数说明if是输入 ISOof是目标设备。千万确认of后面是 U 盘设备名写错会毁掉硬盘数据。写盘前用lsblk确认设备。BIOS 设置方面需要确认几项开启 VT-x/AMD-V 虚拟化支持、关闭 Secure BootESXi 7.0 对 Secure Boot 支持有限除非你签名了驱动、设置 U 盘为第一启动项。如果服务器有 RAID 卡还要确认 RAID 卡固件版本和 ESXi 7.0 兼容。4.2 安装过程中的分区与网络配置启动后进入安装界面按提示走。关键步骤有两个选择安装磁盘和配置网络。安装磁盘选择ESXi 7.0 对系统盘容量要求比 6.x 高官方建议至少 32GB实际测试 16GB 也能装但日志分区会紧张。如果服务器有 SD 卡或 M.2 小盘优先用它们装系统把大容量磁盘留给虚拟机存储。网络配置安装过程中会要求设置管理网络。默认是 DHCP但生产环境建议静态 IP。# 安装完成后在 ESXi shell 里配置静态 IP如果安装时没设 esxcli network ip interface ipv4 set --interface-namevmk0 --typestatic --ipv4192.168.1.100 --netmask255.255.255.0 --gateway192.168.1.1 # 设置 DNS esxcli network ip dns server add --server192.168.1.2 # 查看网络配置确认 esxcli network ip interface ipv4 get逻辑说明ipv4 set设置管理接口的静态地址dns server add加 DNS。ipv4 get验证配置是否生效。参数说明--interface-name通常是vmk0这是管理接口。--typestatic表示静态--ipv4和--netmask按实际网络填。如果有多网卡需要先确认哪个是管理口。4.3 首次登录与基础安全加固安装完成后用浏览器访问https://管理IP用 root 和你设置的密码登录。首次登录后建议做几件事# 开启 SSH临时用用完关掉 esxcli system services start --serviceTSM-SSH # 查看当前服务状态 esxcli system services list | grep -i ssh # 配置 NTP 时间同步时间不准会导致证书和日志问题 esxcli system ntp set --serverpool.ntp.org esxcli system ntp set --enabledtrue # 查看 NTP 状态 esxcli system ntp get逻辑说明SSH 默认关闭需要时手动开。NTP 同步对 ESXi 很重要时间偏差过大会导致 vCenter 连接失败、证书校验错误。参数说明--serviceTSM-SSH是 SSH 服务名。NTP 服务器按实际环境填内网有 NTP 源就用内网的。--enabledtrue开启自动同步。提示生产环境建议装完就配 NTP 和 syslog别等出问题了再补。ESXi 的日志默认存在内存盘重启就丢配个远程 syslog 能省很多排障时间。5. 避坑与排查ESXi 7.0 离线部署的五个血泪教训5.1 网卡不识别驱动没注入还是硬件太新现象安装完 ESXi 7.0esxcli network nic list看不到网卡或者只看到一个管理口其他口全丢。原因官方 ISO 内置驱动不包含你的网卡型号尤其是较新的 10G/25G 网卡或品牌服务器定制网卡。解决回到第 3 章从离线包的vib20里找到对应厂商的网卡驱动注入自定义 profile 后重新导出 ISO。如果离线包里也没有需要去厂商支持页面找对应 ESXi 7.0 的 VIB。注入后用esxcli network nic list确认。5.2 安装卡在「Loading module」Secure Boot 或 U 盘问题现象U 盘启动后卡在Loading module或Relocating modules进度条不动。原因常见两种——Secure Boot 没关或者 U 盘写入方式不对用了 FAT32 直接拷贝而非 dd 写入。解决进 BIOS 关 Secure Boot重新用dd写盘不要用「解压 ISO 到 U 盘」的方式。如果还不行换 USB 2.0 的盘试试部分服务器对 USB 3.0 引导兼容性差。5.3 系统盘容量不足16GB 装完就告警现象装完 ESXi 7.0vSphere Client 里提示「系统分区空间不足」或日志分区满。原因ESXi 7.0 的默认分区方案对系统盘要求提高16GB 盘装完后日志分区只剩几百 MB跑几天就满。解决换 32GB 以上的盘装系统或者安装时手动调整分区需要进入安装界面的高级选项。如果已经装好可以把日志重定向到远程 syslog减少本地写入。5.4 管理网络不通VLAN 或双网卡绑定搞错现象装完配了静态 IP但 ping 不通或者能 ping 通但 vSphere Client 连不上。原因管理口接入了需要 VLAN 标记的网络但 ESXi 默认没配 VLAN或者服务器有多个网口管理口接错了。解决确认管理口对应的物理网口在 ESXi 里给vmk0配 VLAN ID# 给管理接口配 VLAN假设 VLAN ID 是 100 esxcli network ip interface set --interface-namevmk0 --vlan-id100 # 查看确认 esxcli network ip interface get如果不需要 VLAN检查交换机端口配置和网线。5.5 驱动注入后镜像构建失败依赖缺失或版本冲突现象profile add时报依赖错误或者导出 ISO 时失败。原因VIB 之间有依赖关系单独加一个驱动可能缺依赖包或者 VIB 版本与 ESXi 7.0 基础镜像不匹配。解决先看错误信息里缺哪个依赖把依赖的 VIB 也加进去。如果版本不匹配找对应 ESXi 7.0 版本的驱动。实在不行用profile get看基础 profile 里已有的 VIB 版本找同版本的驱动包。6. 进阶用 Kickstart 做无人值守批量部署前面讲的都是单台安装如果你有十台二十台机器要装一台台点鼠标不现实。ESXi 支持 Kickstart 脚本把安装配置写成文件启动时自动读取全程无人值守。6.1 Kickstart 脚本的核心字段与最小示例Kickstart 脚本是一个文本文件包含安装磁盘、网络、密码、分区等配置。最小可用脚本如下# ks.cfg 最小示例 # 接受许可协议 vmaccepteula # 设置 root 密码加密后的用 openssl passwd -1 生成 rootpw --iscrypted $1$xxxx$xxxxxxxxxxxxxxxxxxxxxx # 安装到第一块磁盘覆盖现有数据 install --firstdisk --overwritevmfs # 设置管理网络为静态 network --bootprotostatic --ip192.168.1.100 --netmask255.255.255.0 --gateway192.168.1.1 --hostnameesxi-node01 --nameserver192.168.1.2 # 安装完成后重启 reboot逻辑说明vmaccepteula自动接受许可rootpw设置密码必须用加密串install指定安装磁盘和覆盖策略network配网络reboot装完重启。参数说明--firstdisk表示装到第一块磁盘也可以用--disknaa.xxxx指定具体磁盘。--overwritevmfs会清空磁盘上已有的 VMFS 分区生产环境慎用。密码加密串用openssl passwd -1 你的密码生成。6.2 把 Kickstart 脚本挂到启动介质上Kickstart 脚本可以放在 U 盘、HTTP 服务器或 NFS 上。离线环境最方便的是放 U 盘。# 假设 U 盘挂载在 /mnt/usb把 ks.cfg 放到根目录 cp ks.cfg /mnt/usb/ # 修改启动参数让安装程序读取 ks.cfg # 在启动菜单按 ShiftO在启动参数末尾加 # ksusb:/ks.cfg逻辑说明ESXi 安装程序启动时会解析ks参数从指定位置读取脚本。usb:/ks.cfg表示从 U 盘根目录读。参数说明如果脚本放 HTTP 服务器写成kshttp://192.168.1.10/ks.cfg。放 NFS 写成ksnfs://192.168.1.10:/path/ks.cfg。注意 U 盘必须是安装盘本身或者另一个被识别的 U 盘。6.3 批量部署时的差异化处理十台机器 IP 不能一样Kickstart 脚本需要差异化。常见做法是每台机器一个脚本或者用脚本里的变量配合 DHCP。# 用 DHCP 自动分配 IP 的写法 network --bootprotodhcp --hostnameesxi-node # 或者用脚本参数传入需要自定义启动参数 # 启动时加ksusb:/ks.cfg ip192.168.1.101 netmask255.255.255.0 gateway192.168.1.1逻辑说明--bootprotodhcp让机器先拿 DHCP装完后再手动改静态。或者启动时通过ip参数传入网络配置Kickstart 脚本里用--bootprotostatic但不写死 IP由启动参数覆盖。参数说明启动参数里的ip、netmask、gateway会覆盖脚本里的网络配置。这种方式适合批量部署时用 PXE 或 U 盘启动每台机器改一下启动参数即可。注意Kickstart 脚本里的密码加密串不要用明文也不要把加密串提交到公开仓库。批量部署时建议每台机器用不同密码或者装完后统一改。6.4 验证与收尾装完不是终点无人值守装完后别急着上生产。先做几项验证# 检查网络 esxcli network ip interface ipv4 get # 检查存储 esxcli storage filesystem list # 检查驱动 esxcli network nic list esxcli storage core adapter list # 检查 NTP esxcli system ntp get # 检查日志分区 df -h逻辑说明这几条命令覆盖网络、存储、驱动、时间、磁盘空间五个关键维度。装完先跑一遍确认没有明显异常再接入 vCenter 或部署虚拟机。参数说明df -h看各分区使用率重点看/var/log和/scratch。如果/var/log使用率超过 80%考虑配远程 syslog 或清理旧日志。我自己踩过最深的坑是一台机器装完看着一切正常跑了三天突然管理网络断了最后查出来是网卡驱动版本和固件不匹配高负载下驱动崩溃。从那以后我装完 ESXi 必做两件事一是esxcli network nic list确认驱动版本二是跑一轮压力测试比如用vmkping大包 ping 网关几千次确认没有丢包或驱动异常。离线包里的驱动不一定是最新的但一定是最稳的——别盲目追新稳定比版本号重要。希望帮到你。本文还有配套的精品资源点击获取