Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6
2347 words
12 minutes
ImmortalWrt x86(VMware)存储扩容超详细实战教程

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 镜像有几个特点:

  1. 根文件系统是 squashfs(只读)
  2. 可写的配置放在 /overlay(一般在一个小分区上,或者 loop 里),通常只有 200~300MB
  3. 我们在 VMware 里把虚拟磁盘扩容到 20G、40G……
    → 但系统并不会自动使用这些空间

所以扩容的本质就是:

  1. 虚拟磁盘 里新建一个 大分区(例如 /dev/sda4,20G);
  2. 把这个分区格式化为 ext4
  3. /overlay 搬到这个分区;
  4. 修改 /etc/config/fstab,让系统重启时自动把 /dev/sda4 挂到 /overlay
  5. 之后任何安装插件、保存配置,都是写到这个大分区里。

扩容成功与否的“验收标准”只有一个:

df -h | grep overlay

看到:

/dev/sda4 19.2G 2.3M 18.2G 0% /overlay
overlayfs:/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 里创建虚拟机#

  1. 新建虚拟机 → 选择“稍后安装操作系统”
  2. 系统类型选:Other Linux 64-bit(其它 Linux,64 位)
  3. CPU:1~2 核即可
  4. 内存:512MB~1024MB 都够用
  5. 网络:
    • 桥接模式(Bridge)
    • 不要勾选 “复制物理网络适配器的连接状态”(不必要,且有些场景会引发问题)
  6. 磁盘:
    • 选择“使用现有虚拟磁盘”
    • 指向下载好的 *.vmdk 镜像

创建完成后,先不要急着启动

1.3 扩大虚拟磁盘容量(在 VMware 中)#

虚拟机关机的状态下:

  1. 打开虚拟机设置 → 选中“硬盘”
  2. 点击“扩展”或“增加容量”,将容量设置为你想要的大小,比如 20GB
  3. 确认保存

此时:

  • 物理上虚拟盘已经变大了;
  • 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

此时只有 sda1sda2(有的镜像会额外有 sda3)。
后面那一大段空间是空白的,我们要在空白区里创建一个新分区(例如 sda4)。


3. 创建新的大分区 /dev/sda4#

注意: 这一段只在你确认已经把虚拟磁盘扩容到更大的容量之后再做。

进入 fdisk:

fdisk /dev/sda

依次输入以下操作:

  1. n → 新建分区(new)
  2. p → 主分区(primary)
  3. 分区号:直接回车(一般自动给 34
  4. 起始扇区(First sector):直接回车(使用默认值,即前面分区之后)
  5. 结束扇区(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/sda4

5.2 手动挂载#

mount /dev/sda4 /mnt/sda4

终端可能会输出一行 ext4 挂载信息,大致类似:

EXT4-fs (sda4): mounted filesystem ... with ordered data mode

5.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/fstab

6.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 必须是 ext4
  • enabled 必须是 '1'(启用)
  • uuid 那一行可以删掉,也可以保留但不再使用(推荐删掉以免混淆)
  • 空格和缩进可以随意,只要每个字段之间至少 1 个空格即可。

6.4 vi 操作小抄#

/etc/config/fstab 里:

  1. 用方向键移动到 uuid 那一行 → 按 dd 删除整行;
  2. config mount 下面逐行键入:
option target '/overlay'
option device '/dev/sda4'
option fstype 'ext4'
option options 'rw,sync'
option enabled '1'
  1. 修改完成后按 ESC
  2. 输入 :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% /overlay
overlayfs:/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% /rom
tmpfs 346M 228K 346M 0% /tmp
/dev/sda4 19.2G 2.3M 18.2G 0% /overlay
overlayfs:/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' # 少了一个 t
option enable '1' # 少了一个 d

写错之后:
系统会直接忽略这些字段,或者整个 config mount 项被忽略,导致扩容失败。

9.3 没有执行 block mount 就直接重启#

虽然重启之后系统也会重新读 /etc/config/fstab
但在实际调试中,建议:

  1. block mount 看看是否报错(用于验证配置语法);
  2. reboot

9.4 分区没创建成功 / 没格式化#

扩容前务必确认:

fdisk -l

能看到 /dev/sda4,并且:

df -h | grep sda4

在挂载测试之后能看到 /dev/sda4 挂在 /mnt/sda4

如果 df -h 里压根没有 /dev/sda4

  • 要么 fdisk 没有 w 写入;
  • 要么格式化 / 挂载有问题,需要重新检查。

10. 完成扩容后的建议操作#

  1. 立即登录 LuCI(Web 后台)
    在“系统 → 存储”里确认可用空间已经变大。

  2. 安装常用插件:

    opkg update
    opkg install htop
    opkg install nano
    # 按需安装 passwall / openclash / v2ray / sing-box 等
  3. 可以适当保留 /etc/config/fstab 备份:

    cp /etc/config/fstab /etc/config/fstab.backup
  4. 今后如果再需要换更大磁盘:

    • 在 VMware 再次扩容虚拟硬盘;
    • 用 fdisk 调整 /dev/sda4 尾部(或新建 /dev/sda5)并重新 mkfs.ext4
    • 或者备份 /overlay 内容到外部,再重建分区、恢复数据。

11. 一句话回顾本次完整流程#

  1. 在 VMware 里把 vmdk 磁盘扩到 20G;
  2. 在 ImmortalWrt 里用 fdisk 新建 /dev/sda4
  3. mkfs.ext4 /dev/sda4 格式化;
  4. mount /dev/sda4 /mnt/sda4 测试挂载;
  5. 编辑 /etc/config/fstab
config mount
option target '/overlay'
option device '/dev/sda4'
option fstype 'ext4'
option options 'rw,sync'
option enabled '1'
  1. 执行 block mount,再 reboot
  2. df -h | grep overlay 确认 /dev/sda4 已经挂载到 /overlay
    且可用空间从几百 MB 变成十几 / 几十 GB。

看到:

/dev/sda4 19.2G 2.3M 18.2G 0% /overlay
overlayfs:/overlay 19.2G 2.3M 18.2G 0% /

就可以开心地宣布:扩容大成功! 🎉


写给未来的自己:
如果哪天你又在新机器上装 ImmortalWrt、又只剩 200 多 MB 的 overlay,不要再被各种教程绕晕。
按照这份 markdown 一步一步来,就能稳稳扩到十几二十 G,再也不用纠结空间不够装插件啦。:)

ImmortalWrt x86(VMware)存储扩容超详细实战教程
https://github.com/posts/immortalwrt_vmware_ext4_overlay_expand_guide2/
Author
Hachimi
Published at
2024-06-15
License
CC BY-NC-SA 4.0

Some information may be outdated

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00