ESXi 安装 OpenWrt:虚拟磁盘、网卡与存储扩容
本文面向 ESXi 上的 x86 OpenWrt 虚拟机。先确认镜像架构、根文件系统和 BIOS/UEFI 启动方式,再创建虚拟机;磁盘扩容增加的是持久存储容量,与分配给虚拟机的 RAM 是两件事。界面图作为操作位置参考,客户机版本名称和控制器选项以实际 ESXi 与固件为准。
步骤 1:创建或注册虚拟机
在虚拟机选项卡中点击“创建/注册虚拟机”。准备好固件发布方提供的校验值,先验证下载文件;不要把来源不明的预配置镜像与 OpenWrt 官方发行镜像混为一谈。

步骤 2:按文件类型选择入口
| 文件类型 | ESXi 中的处理方式 |
|---|---|
| OVA/OVF | 选择“从 OVA 或 OVF 文件部署虚拟机”,按向导导入完整虚拟机描述和磁盘 |
| VMDK | 创建新虚拟机,上传磁盘文件后选择“现有硬盘”;VMDK 本身不是 OVA/OVF |
| IMG / IMG.GZ | 先解压,并按固件与 ESXi 要求转换为兼容的 VMDK,再接入虚拟机 |
| ISO | 只有固件确实提供可启动安装 ISO 时,才接入虚拟 CD/DVD;不能把 IMG 改扩展名当成 ISO |
| 已有 VMX | 使用“注册现有虚拟机”导入已有配置 |
OpenWrt 的 VMware 指南 介绍了原始镜像转换;不同 VMDK 子格式与控制器的兼容性需按目标 ESXi 核对,转换完成不等于已经能启动。

步骤 3:名称与客户机系统
- 名称可自行设置,兼容性选择当前 ESXi 支持且计划使用的版本。
- 客户机类型选 Linux;x86-64 镜像使用相应的 64 位客户机选项。
- vCPU、RAM 和磁盘按插件、连接数与实际负载配置,不把界面中的某个 Linux 内核版本当作固件唯一要求。

步骤 4:接入固件磁盘
对于已经包含 OpenWrt 系统的 VMDK:
- 将完整磁盘文件上传到对应数据存储。若由描述文件和数据文件组成,必须一并保留,不能只传其中一个。
- 移除向导自动创建、尚未使用的空白硬盘;确认选中的不是固件盘或已有业务磁盘。
- 添加“现有硬盘”,选择刚上传的 VMDK,核对容量、控制器和虚拟设备节点。
- 不使用 ISO 时可移除虚拟 CD/DVD;使用安装 ISO 的流程则应保留目标空白磁盘和光驱,按安装器完成写入。

步骤 5:配置网络适配器
按所需 LAN/WAN 数量添加网卡,并分别接入正确的端口组,不要求所有虚拟机都配置四张网卡。使用 VMXNET 3 前确认固件有相应驱动;启动后从控制台用 ip link 核对实际接口与 MAC,再分配 LAN/WAN,不能仅凭网卡添加顺序猜接口名。
PCI 直通属于另一种接入方式,须先在 ESXi 中配置直通、确认设备可用及管理网络不会被切断。直通网卡不能同时当作宿主机普通虚拟交换机上联使用。

步骤 6:匹配启动方式
使用 EFI 镜像时选择 EFI;使用传统 BIOS 镜像时按其说明选择 BIOS。是否关闭 UEFI Secure Boot 取决于镜像是否支持其签名验证;不能因为文件是 ISO 就跳过启动模式检查。
首次从 ESXi 控制台启动,确认系统能识别磁盘和网卡。设置管理密码及 LAN/WAN 后,再验证客户端获取地址、访问后台和对外联网是否正常。

OpenWrt 磁盘与存储扩容
先通过 mount、df -h 和 lsblk -f 确认布局,再选择方式:
| 现有布局 | 扩容方向 |
|---|---|
| 根文件系统直接使用 ext4 | 扩大虚拟磁盘后,按实际分区表扩展根分区,再扩展 ext4 文件系统;不能直接套用下方 overlay 迁移步骤 |
squashfs 系统配合可写 /overlay | 可按当前固件的 extroot 支持情况,将可写层迁移到一个新的 ext4 分区 |
| 定制固件自带扩容功能 | 优先按其对应版本说明操作,避免手动分区与自动扩容互相冲突 |
下方沿用历史图片的“新分区作为 extroot”路线,适用于已经确认存在独立 /overlay、支持 extroot 的环境。若实际布局不符合,先停止这一流程;官方 extroot 文档 和当前固件说明应一起核对。
1. 备份并增大虚拟磁盘
先保存 OpenWrt 配置、虚拟机配置和可恢复的磁盘备份。正常关闭 OpenWrt,确认虚拟机已关机,再在 ESXi 中增大对应虚拟硬盘,随后启动。增加 VMDK 容量只增加未分配空间,不会自动扩大现有文件系统。


2. 准备工具并识别磁盘
使用 opkg 的固件可安装以下工具;内核模块必须与当前固件内核匹配,不能强制安装不兼容包:
sh
opkg update
opkg install cfdisk lsblk block-mount kmod-fs-ext4 e2fsprogs使用 apk 或定制软件源的固件,按其软件管理界面获取对应工具。先确认命令可用,再查看当前状态:
sh
lsblk -f
block info
mount
df -h记录根分区、当前 /overlay 来源和新增空闲空间。以下 /dev/sda、/dev/sda3 只是历史布局示例,实际也可能是 /dev/vda、NVMe 或其他编号。
3. 只在未分配空间创建新分区
例如确认待扩展磁盘确实为 /dev/sda 后,进入:
sh
cfdisk /dev/sda仅选择新增的 Free Space 创建分区。写入前检查原有分区的起始位置和大小没有变化,不删除、格式化或重建现有系统分区。若内核无法重新读取分区表,正常重启后再检查,不能继续使用旧的设备信息。

4. 核对新分区身份
sh
lsblk -f
block info核对新增分区的磁盘、容量和编号,确认它不包含现有数据、不是已挂载的根分区或 overlay。历史示例新增的是 /dev/sda3,不是每台机器都会得到这个编号。

5. 格式化已确认的新分区
以下操作会清空指定分区。只有上一步确认 /dev/sda3 就是新建的空分区时才能使用该值,否则先替换为实际设备:
sh
storage_part=/dev/sda3
mkfs.ext4 "$storage_part"
block info "$storage_part"从本步到迁移完成使用同一个 SSH 会话;重新登录后要重新确认变量值,不能假定变量仍在。
6. 配置 UUID 并迁移原 overlay
先检查已有配置,避免出现两个启用的 /overlay 挂载条目:
sh
uci show fstab确认没有既有 extroot 配置后,备份配置,读取新分区 UUID:
sh
cp /etc/config/fstab /etc/config/fstab.before-extroot
storage_uuid="$(block info "$storage_part" | sed -n 's/.*UUID="\([^"]*\)".*/\1/p')"
printf '新分区 UUID: %s\n' "$storage_uuid"核对 UUID 与 block info 对应分区一致后,再配置启动时的 extroot 挂载:
sh
if [ -n "$storage_uuid" ]; then
uci set fstab.extroot='mount'
uci set fstab.extroot.uuid="$storage_uuid"
uci set fstab.extroot.target='/overlay'
uci set fstab.extroot.enabled='1'
uci commit fstab
else
printf '未取得 UUID,请停止并检查新分区。\n' >&2
fi停止会写入配置或持久数据的应用。确认 UUID 配置正确、目标路径未被其他文件系统占用后,将新分区临时挂载并复制原可写层,保留权限和目录结构:
sh
mkdir -p /mnt/extroot-new
mount "$storage_part" /mnt/extroot-new确认挂载成功后再复制,不能在挂载失败时把数据复制到原系统分区:
sh
mount | grep ' /mnt/extroot-new '输出必须显示新分区挂在 /mnt/extroot-new,再执行:
sh
tar -C /overlay -cf - . | tar -C /mnt/extroot-new -xf -
sync检查复制过程没有错误,新分区包含原 overlay 的目录和配置。只添加挂载条目却不迁移数据,会造成原有安装包或设置不可见。

7. 正常重启以切换 extroot
复制完成后卸载临时挂载,再从 OpenWrt 正常重启。不要在运行中直接把新分区覆盖挂到活动 /overlay:
sh
umount /mnt/extroot-new卸载失败时先检查仍在使用该目录的进程,不强制拔盘。确认临时挂载已经正常卸载后,再单独执行:
sh
reboot重启时保留 ESXi 控制台,观察是否成功载入 extroot;异常时依据之前保存的配置和磁盘备份恢复。


8. 验证容量、挂载与原配置
sh
mount | grep -E ' /overlay | / '
df -h /overlay /
block info
logread -e extroot确认 /overlay 来自预期 UUID 对应的新分区,根目录可用容量随之增加,并检查原有配置、软件包和网络功能。再保存一个小配置并正常重启,确认数据持久化;若仍使用旧分区,应检查 fstab、文件系统驱动和启动日志,不能仅凭分区已经变大判定成功。

相关 ESXi 教程
创建虚拟机前可先核对 ESXi 安装与虚拟网络配置;如果准备在局域网中部署 DNS 过滤,可继续查看 ESXi 安装 AdGuardHome。