前言
在 ESXi 等虚拟化环境中部署 OpenWrt x86 时,官方镜像通常只有一百多 MB 的根分区空间。在安装 LuCI、OpenClash、Docker 等组件之前,扩容几乎是必做操作。
但 OpenWrt x86 的磁盘结构和启动方式,与常规 Linux 发行版存在明显差异。如果直接套用“Linux 扩容教程”,大概率会反复踩坑。
本文完整记录了一次 真实发生的 OpenWrt x86 根分区扩容过程,不仅包含最终可行方案,也包含所有失败尝试及对应的错误输出,作为一份可复盘、可复用的工程记录。
一、必须先了解的关键事实
- OpenWrt x86 无法在自身运行状态下离线维护根文件系统
resize2fs不能对已经挂载的/(rootfs)执行- 重建或调整分区后,PARTUUID 会发生变化
- OpenWrt x86 的 GRUB 默认使用 PARTUUID 作为 root 参数
结论只有一个:
必须借助 Linux Live 系统,对 OpenWrt 的磁盘进行离线维护。
二、最初的直觉方案:在 OpenWrt 内直接扩容(失败)
确认磁盘已经在 ESXi 中扩展到 25GB:
|
|
|
|
尝试直接扩展 ext4:
|
|
得到错误:
|
|
原因说明:
/dev/sda2正在作为/挂载- OpenWrt x86 不支持 rootfs 在线扩容
三、尝试关闭 ext4 journal(仍然失败)
|
|
|
|
即使在 failsafe 模式下,根分区依然会被挂载,无法满足 ext4 的离线条件。
四、尝试 failsafe / init hack(不可行)
尝试通过 GRUB 传入参数:
|
|
结果表现为:
- init 进程退出
- 内核自动重启
- 回到 GRUB
在 OpenWrt 24.x x86 环境下,该路径 不可行。
五、结论:必须使用外部 Linux Live 系统
到此可以确认:
在 OpenWrt x86 自身环境中,不可能完成根分区 ext4 扩容
唯一稳定方案是:
使用 Linux Live ISO,在 OpenWrt 未启动的情况下进行维护。
六、在 Ubuntu Live 中离线扩容(成功)
从 Ubuntu Live Server 启动后:
|
|
|
|
此时 /dev/sda2 未挂载,可以安全操作。
1. 文件系统检查
|
|
|
|
这是扩容分区后的正常现象。
2. 扩展 ext4 文件系统
|
|
|
|
ext4 文件系统已完整扩展。
七、返回 OpenWrt 后的启动问题
重启后系统卡在:
|
|
原因分析
- 扩容过程中分区被重建
- PARTUUID 已发生变化
- GRUB 仍使用旧 PARTUUID
八、永久修复 GRUB 启动参数
编辑配置文件:
|
|
将所有启动项中的:
|
|
统一修改为:
|
|
普通启动与 failsafe 启动项 都必须修改。
九、最终验证
|
|
|
|
根分区容量与启动状态均已恢复正常。
结语
OpenWrt x86 根分区扩容并不是工具问题,而是 系统设计层面的限制。
这次实践得出的结论非常明确:
- ❌ 不要在 OpenWrt 内尝试扩容 rootfs
- ❌ 不要依赖 failsafe 或 init hack
- ✅ 使用 Linux Live 离线维护
- ✅ 扩容后避免继续使用 PARTUUID
这是一条 唯一稳定、可复现、可长期使用的路径。