ImmortalWrt x86(VMware)存储扩容超详细实战教程
适用场景:
- 设备:x86 软路由 / mini PC,在 Windows 上用 VMware Workstation 跑 ImmortalWrt
- 镜像:
immortalwrt-*x86-64-generic-squashfs-combined.vmdk(带squashfs-combined字样)- 目标:把默认只有两三百 MB 的可写空间,扩成 几十 G 的 ext4 overlay,重启不丢配置
0. 整体思路:我们究竟在干什么?
默认的 x86 ImmortalWrt squashfs 镜像有几个特点:
- 根文件系统是 squashfs(只读)
- 可写的配置放在
/overlay(一般在一个小分区上,或者 loop 里),通常只有 200~300MB - 我们在 VMware 里把虚拟磁盘扩容到 20G、40G……
→ 但系统并不会自动使用这些空间
所以扩容的本质就是:
- 在 虚拟磁盘 里新建一个 大分区(例如
/dev/sda4,20G); - 把这个分区格式化为 ext4;
- 把
/overlay搬到这个分区; - 修改
/etc/config/fstab,让系统重启时自动把/dev/sda4挂到/overlay; - 之后任何安装插件、保存配置,都是写到这个大分区里。
扩容成功与否的“验收标准”只有一个:
df -h | grep overlay看到:
/dev/sda4 19.2G 2.3M 18.2G 0% /overlayoverlayfs:/overlay 19.2G 2.3M 18.2G 0% /就说明:
/overlay用的是/dev/sda4(ext4,大空间);- 根目录
/通过 overlayfs 合并了这块大空间。
1. 准备阶段
1.1 下载合适的 ImmortalWrt 镜像
前提:使用的是 squashfs-combined.vmdk 镜像,例如:
immortalwrt-24.10.4-x86-64-generic-squashfs-combined.vmdk注意:
- 不要选
ext4-combined系列,我们这里就是专门教 squashfs 镜像扩容到 ext4 overlay。 - 适合跑在 VMware / Proxmox / ESXi / VirtualBox 上。
1.2 在 VMware 里创建虚拟机
- 新建虚拟机 → 选择“稍后安装操作系统”
- 系统类型选:Other Linux 64-bit(其它 Linux,64 位)
- CPU:1~2 核即可
- 内存:512MB~1024MB 都够用
- 网络:
- 选 桥接模式(Bridge)
- 不要勾选 “复制物理网络适配器的连接状态”(不必要,且有些场景会引发问题)
- 磁盘:
- 选择“使用现有虚拟磁盘”
- 指向下载好的
*.vmdk镜像
创建完成后,先不要急着启动。
1.3 扩大虚拟磁盘容量(在 VMware 中)
虚拟机关机的状态下:
- 打开虚拟机设置 → 选中“硬盘”
- 点击“扩展”或“增加容量”,将容量设置为你想要的大小,比如 20GB
- 确认保存
此时:
- 物理上虚拟盘已经变大了;
- 但 ImmortalWrt 里并不知道这些空间,需要我们在系统内部创建分区、格式化、挂载。
2. 在 ImmortalWrt 里查看磁盘结构
启动虚拟机,进入 ImmortalWrt:
默认用户名:root
默认没有密码(首次登陆可自行设置)。
2.1 查看分区情况
fdisk -l典型输出(示例):
Disk /dev/sda: 20 GiB, ...Device Boot Start End Sectors Size Id Type/dev/sda1 * 512 66047 65536 32M 83 Linux/dev/sda2 66560 680959 614400 300M 83 Linux此时只有 sda1、sda2(有的镜像会额外有 sda3)。
后面那一大段空间是空白的,我们要在空白区里创建一个新分区(例如 sda4)。
3. 创建新的大分区 /dev/sda4
注意: 这一段只在你确认已经把虚拟磁盘扩容到更大的容量之后再做。
进入 fdisk:
fdisk /dev/sda依次输入以下操作:
n→ 新建分区(new)p→ 主分区(primary)- 分区号:直接回车(一般自动给
3或4) - 起始扇区(First sector):直接回车(使用默认值,即前面分区之后)
- 结束扇区(Last sector):直接回车(使用默认,吃掉所有剩余空间)
你会看到类似提示:
Created a new partition 4 of type 'Linux' and of size 19.7 GiB.最后输入:
w写入分区表并退出。
此时再次执行:
fdisk -l应该可以看到:
/dev/sda1 32M/dev/sda2 300M/dev/sda4 19.7G这说明 /dev/sda4 已经存在,但还只是“原始分区”,没有文件系统。
4. 把 /dev/sda4 格式化成 ext4
这是把分区变成一个真正可用的 ext4 文件系统。
mkfs.ext4 /dev/sda4输出中能看到:
Creating filesystem with XXXXX 4k blocks and XXXXX inodes...Writing superblocks and filesystem accounting information: done说明格式化成功。
5. 测试挂载 /dev/sda4
5.1 创建挂载点
mkdir -p /mnt/sda45.2 手动挂载
mount /dev/sda4 /mnt/sda4终端可能会输出一行 ext4 挂载信息,大致类似:
EXT4-fs (sda4): mounted filesystem ... with ordered data mode5.3 用 df 检查
df -h | grep sda4正常情况你会看到:
/dev/sda4 19.2G 2.0M 18.2G 0% /mnt/sda4此时:
sda4已经是一个完全可用的 ext4 分区;- 但 还没有参与 overlay,系统空间仍然只有原来的两三百 MB。
6. 正确的扩容方式:通过 /etc/config/fstab 配置 overlay
6.1 重要概念:ImmortalWrt 使用的是 UCI 的 fstab
很多人的直觉是修改 /etc/fstab,但在 ImmortalWrt / OpenWrt 中:
- 真正生效的是
/etc/config/fstab(这是 UCI 配置文件) /etc/fstab是传统 Linux 的写法,ImmortalWrt 默认并不依赖这个文件
所以我们要编辑的是:
vi /etc/config/fstab6.2 查看当前 fstab 内容
刚装好的 ImmortalWrt 里,/etc/config/fstab 可能类似:
config global option anon_swap '0' option anon_mount '1' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0'
config mount option target '/overlay' option uuid 'xxxx-xxxx-xxxx-xxxx' option enabled '0'
config mount option target '/boot' option uuid 'yyyy-yyyy-yyyy-yyyy' option enabled '0'
config mount option target '/rom' option uuid 'zzzz-zzzz-zzzz-zzzz' option enabled '0'我们只需要改动其中 target 为 /overlay 的那个 config mount 块,其它保持不动也可以。
6.3 把 overlay 的挂载配置改成使用 /dev/sda4
目标是把这一段:
config mount option target '/overlay' option uuid 'xxxx-xxxx-xxxx-xxxx' option enabled '0'改成:
config mount option target '/overlay' option device '/dev/sda4' option fstype 'ext4' option options 'rw,sync' option enabled '1'几个关键点:
device一定要写成/dev/sda4(和你实际分区对应)fstype必须是ext4enabled必须是'1'(启用)uuid那一行可以删掉,也可以保留但不再使用(推荐删掉以免混淆)- 空格和缩进可以随意,只要每个字段之间至少 1 个空格即可。
6.4 vi 操作小抄
在 /etc/config/fstab 里:
- 用方向键移动到
uuid那一行 → 按dd删除整行; - 在
config mount下面逐行键入:
option target '/overlay'option device '/dev/sda4'option fstype 'ext4'option options 'rw,sync'option enabled '1'- 修改完成后按
ESC; - 输入
:wq回车保存退出。
7. 让配置立即生效 & 重启
7.1 让 block mount 重新读取 fstab 配置
block mount如果没有错误信息,说明语法正确。
7.2 重启系统
reboot系统重新启动后,overlay 会按照 /etc/config/fstab 的设置,自动把 /dev/sda4 挂到 /overlay。
8. 验收:确认扩容是否成功
系统重启后,执行:
df -h | grep overlay如果扩容成功,你会看到类似的输出:
/dev/sda4 19.2G 2.3M 18.2G 0% /overlayoverlayfs:/overlay 19.2G 2.3M 18.2G 0% /含义:
/dev/sda4:19.2G 的 ext4 分区挂载到了/overlay;overlayfs:/overlay:根目录/通过 overlayfs 使用了这块 19G 的空间;- 可用空间已经变成 18G+。
这意味着:
🎉 扩容彻底成功!以后安装任何插件、保存任何配置,都是写入
/dev/sda4这块大空间。
你可以再看整体磁盘情况:
df -h大致会看到:
Filesystem Size Used Avail Use% Mounted on/dev/root 9.8M 9.8M 0 100% /romtmpfs 346M 228K 346M 0% /tmp/dev/sda4 19.2G 2.3M 18.2G 0% /overlayoverlayfs:/overlay 19.2G 2.3M 18.2G 0% /和我们一开始那种 /dev/loop0 只有 288M 完全不是一个量级。
9. 常见坑 & 如何避免(本次踩坑总结)
结合这次实战过程,整理几个容易踩的坑:
9.1 只改 /etc/fstab,不改 /etc/config/fstab → 不会生效
ImmortalWrt / OpenWrt 真正产生效果的是 UCI 的 fstab 配置:
/etc/config/fstab如果只修改传统的:
/etc/fstab系统大概率不会理会,df -h 里依旧是 /dev/loop0 做 overlay。
9.2 写错字段名:fstyle / enable
正确的是:
option fstype 'ext4'option enabled '1'常见错误:
option fstyle 'ext4' # 少了一个 toption enable '1' # 少了一个 d写错之后:
系统会直接忽略这些字段,或者整个 config mount 项被忽略,导致扩容失败。
9.3 没有执行 block mount 就直接重启
虽然重启之后系统也会重新读 /etc/config/fstab,
但在实际调试中,建议:
- 先
block mount看看是否报错(用于验证配置语法); - 再
reboot。
9.4 分区没创建成功 / 没格式化
扩容前务必确认:
fdisk -l能看到 /dev/sda4,并且:
df -h | grep sda4在挂载测试之后能看到 /dev/sda4 挂在 /mnt/sda4。
如果 df -h 里压根没有 /dev/sda4:
- 要么 fdisk 没有
w写入; - 要么格式化 / 挂载有问题,需要重新检查。
10. 完成扩容后的建议操作
-
立即登录 LuCI(Web 后台)
在“系统 → 存储”里确认可用空间已经变大。 -
安装常用插件:
opkg updateopkg install htopopkg install nano# 按需安装 passwall / openclash / v2ray / sing-box 等 -
可以适当保留
/etc/config/fstab备份:cp /etc/config/fstab /etc/config/fstab.backup -
今后如果再需要换更大磁盘:
- 在 VMware 再次扩容虚拟硬盘;
- 用 fdisk 调整 /dev/sda4 尾部(或新建 /dev/sda5)并重新
mkfs.ext4; - 或者备份
/overlay内容到外部,再重建分区、恢复数据。
11. 一句话回顾本次完整流程
- 在 VMware 里把 vmdk 磁盘扩到 20G;
- 在 ImmortalWrt 里用
fdisk新建/dev/sda4; mkfs.ext4 /dev/sda4格式化;mount /dev/sda4 /mnt/sda4测试挂载;- 编辑
/etc/config/fstab:
config mount option target '/overlay' option device '/dev/sda4' option fstype 'ext4' option options 'rw,sync' option enabled '1'- 执行
block mount,再reboot; - 用
df -h | grep overlay确认/dev/sda4已经挂载到/overlay,
且可用空间从几百 MB 变成十几 / 几十 GB。
看到:
/dev/sda4 19.2G 2.3M 18.2G 0% /overlayoverlayfs:/overlay 19.2G 2.3M 18.2G 0% /就可以开心地宣布:扩容大成功! 🎉
写给未来的自己:
如果哪天你又在新机器上装 ImmortalWrt、又只剩 200 多 MB 的 overlay,不要再被各种教程绕晕。
按照这份 markdown 一步一步来,就能稳稳扩到十几二十 G,再也不用纠结空间不够装插件啦。:)
Some information may be outdated









