---
url: https://eoht.net/esxi/install/openwrt.md
description: >-
  区分 ESXi 中 OVA/OVF、VMDK 和 ISO 的安装入口，说明 OpenWrt 镜像与启动模式、虚拟网卡的匹配，并按 ext4 根分区和
  squashfs/overlay 两种布局解释磁盘扩容、数据迁移与重启验证。
---

# ESXi 安装 OpenWrt：虚拟磁盘、网卡与存储扩容 {#esxi-openwrt-installation}

本文面向 ESXi 上的 x86 OpenWrt 虚拟机。先确认镜像架构、根文件系统和 BIOS/UEFI 启动方式，再创建虚拟机；磁盘扩容增加的是持久存储容量，与分配给虚拟机的 RAM 是两件事。界面图作为操作位置参考，客户机版本名称和控制器选项以实际 ESXi 与固件为准。

## 步骤 1：创建或注册虚拟机 {#create-or-register-virtual-machine}

在虚拟机选项卡中点击“创建/注册虚拟机”。准备好固件发布方提供的校验值，先验证下载文件；不要把来源不明的预配置镜像与 OpenWrt 官方发行镜像混为一谈。

![install Openwrt =688x](https://i.eoht.net/docs/20230927203810.webp "创建或注册虚拟机")

## 步骤 2：按文件类型选择入口 {#select-creation-type}

| 文件类型 | ESXi 中的处理方式 |
| --- | --- |
| OVA/OVF | 选择“从 OVA 或 OVF 文件部署虚拟机”，按向导导入完整虚拟机描述和磁盘 |
| VMDK | 创建新虚拟机，上传磁盘文件后选择“现有硬盘”；VMDK 本身不是 OVA/OVF |
| IMG / IMG.GZ | 先解压，并按固件与 ESXi 要求转换为兼容的 VMDK，再接入虚拟机 |
| ISO | 只有固件确实提供可启动安装 ISO 时，才接入虚拟 CD/DVD；不能把 IMG 改扩展名当成 ISO |
| 已有 VMX | 使用“注册现有虚拟机”导入已有配置 |

OpenWrt 的 [VMware 指南](https://openwrt.org/docs/guide-user/virtualization/vmware) 介绍了原始镜像转换；不同 VMDK 子格式与控制器的兼容性需按目标 ESXi 核对，转换完成不等于已经能启动。

![install Openwrt =688x](https://i.eoht.net/docs/20230927203845.webp "选择创建类型")

## 步骤 3：名称与客户机系统 {#set-name-and-guest-os}

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

![install Openwrt =688x](https://i.eoht.net/docs/20230927203850.webp "选择名称和客户机系统")

## 步骤 4：接入固件磁盘 {#customize-virtual-machine-settings}

对于已经包含 OpenWrt 系统的 VMDK：

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

![install Openwrt =688x](https://i.eoht.net/docs/20230927203939.webp "自定义硬盘和光驱")

## 步骤 5：配置网络适配器 {#configure-network-adapter}

按所需 LAN/WAN 数量添加网卡，并分别接入正确的端口组，不要求所有虚拟机都配置四张网卡。使用 VMXNET 3 前确认固件有相应驱动；启动后从控制台用 `ip link` 核对实际接口与 MAC，再分配 LAN/WAN，不能仅凭网卡添加顺序猜接口名。

PCI 直通属于另一种接入方式，须先在 ESXi 中配置直通、确认设备可用及管理网络不会被切断。直通网卡不能同时当作宿主机普通虚拟交换机上联使用。

![install Openwrt =688x](https://i.eoht.net/docs/20230927204000.webp "配置虚拟网卡或 PCI 直通")

## 步骤 6：匹配启动方式 {#configure-virtual-machine-options}

使用 EFI 镜像时选择 EFI；使用传统 BIOS 镜像时按其说明选择 BIOS。是否关闭 UEFI Secure Boot 取决于镜像是否支持其签名验证；不能因为文件是 ISO 就跳过启动模式检查。

首次从 ESXi 控制台启动，确认系统能识别磁盘和网卡。设置管理密码及 LAN/WAN 后，再验证客户端获取地址、访问后台和对外联网是否正常。

![install Openwrt =688x](https://i.eoht.net/docs/20230927204017.webp "配置启动方式")

## OpenWrt 磁盘与存储扩容 {#expand-openwrt-storage}

先通过 `mount`、`df -h` 和 `lsblk -f` 确认布局，再选择方式：

| 现有布局 | 扩容方向 |
| --- | --- |
| 根文件系统直接使用 ext4 | 扩大虚拟磁盘后，按实际分区表扩展根分区，再扩展 ext4 文件系统；不能直接套用下方 overlay 迁移步骤 |
| squashfs 系统配合可写 `/overlay` | 可按当前固件的 extroot 支持情况，将可写层迁移到一个新的 ext4 分区 |
| 定制固件自带扩容功能 | 优先按其对应版本说明操作，避免手动分区与自动扩容互相冲突 |

下方沿用历史图片的“新分区作为 extroot”路线，适用于已经确认存在独立 `/overlay`、支持 extroot 的环境。若实际布局不符合，先停止这一流程；[官方 extroot 文档](https://openwrt.org/docs/guide-user/additional-software/extroot_configuration) 和当前固件说明应一起核对。

### 1. 备份并增大虚拟磁盘 {#flash-openwrt-firmware}

先保存 OpenWrt 配置、虚拟机配置和可恢复的磁盘备份。正常关闭 OpenWrt，确认虚拟机已关机，再在 ESXi 中增大对应虚拟硬盘，随后启动。增加 VMDK 容量只增加未分配空间，不会自动扩大现有文件系统。

![install Openwrt =688x](https://i.eoht.net/docs/2022112001.webp "历史 OpenWrt 可用存储容量")

![install Openwrt =688x](https://i.eoht.net/docs/2022112002.webp "在 ESXi 中调整虚拟磁盘容量")

### 2. 准备工具并识别磁盘 {#install-required-tools-via-ssh}

使用 `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. 只在未分配空间创建新分区 {#create-new-disk-partition}

例如确认待扩展磁盘确实为 `/dev/sda` 后，进入：

```sh
cfdisk /dev/sda
```

仅选择新增的 Free Space 创建分区。写入前检查原有分区的起始位置和大小没有变化，不删除、格式化或重建现有系统分区。若内核无法重新读取分区表，正常重启后再检查，不能继续使用旧的设备信息。

![install Openwrt =688x](https://i.eoht.net/docs/2022112003.webp "只在未分配空间中新建分区")

### 4. 核对新分区身份 {#confirm-new-sda3-partition}

```sh
lsblk -f
block info
```

核对新增分区的磁盘、容量和编号，确认它不包含现有数据、不是已挂载的根分区或 overlay。历史示例新增的是 `/dev/sda3`，不是每台机器都会得到这个编号。

![install Openwrt =688x](https://i.eoht.net/docs/2022112004.webp "确认新增存储分区")

### 5. 格式化已确认的新分区 {#format-sda3-partition}

以下操作会清空指定分区。只有上一步确认 `/dev/sda3` 就是新建的空分区时才能使用该值，否则先替换为实际设备：

```sh
storage_part=/dev/sda3
mkfs.ext4 "$storage_part"
block info "$storage_part"
```

从本步到迁移完成使用同一个 SSH 会话；重新登录后要重新确认变量值，不能假定变量仍在。

### 6. 配置 UUID 并迁移原 overlay {#create-mount-point}

先检查已有配置，避免出现两个启用的 `/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 的目录和配置。只添加挂载条目却不迁移数据，会造成原有安装包或设置不可见。

![install Openwrt =688x](https://i.eoht.net/docs/2022112005.webp "历史挂载点配置界面")

### 7. 正常重启以切换 extroot {#mount-sda3-as-overlay}

复制完成后卸载临时挂载，再从 OpenWrt 正常重启。不要在运行中直接把新分区覆盖挂到活动 `/overlay`：

```sh
umount /mnt/extroot-new
```

卸载失败时先检查仍在使用该目录的进程，不强制拔盘。确认临时挂载已经正常卸载后，再单独执行：

```sh
reboot
```

重启时保留 ESXi 控制台，观察是否成功载入 extroot；异常时依据之前保存的配置和磁盘备份恢复。

![install Openwrt =688x](https://i.eoht.net/docs/2022112030.webp "历史 overlay 挂载设置")

![install Openwrt =688x](https://i.eoht.net/docs/2022112006.webp "历史重启与挂载界面")

### 8. 验证容量、挂载与原配置 {#verify-expanded-storage}

```sh
mount | grep -E ' /overlay | / '
df -h /overlay /
block info
logread -e extroot
```

确认 `/overlay` 来自预期 UUID 对应的新分区，根目录可用容量随之增加，并检查原有配置、软件包和网络功能。再保存一个小配置并正常重启，确认数据持久化；若仍使用旧分区，应检查 fstab、文件系统驱动和启动日志，不能仅凭分区已经变大判定成功。

![install Openwrt =688x](https://i.eoht.net/docs/2022112007.webp "检查扩容后的可用存储空间")

## 相关 ESXi 教程 {#related-esxi-guides}

创建虚拟机前可先核对 [ESXi 安装与虚拟网络配置](/esxi/install/guide)；如果准备在局域网中部署 DNS 过滤，可继续查看 [ESXi 安装 AdGuardHome](/esxi/install/adguardhome)。
