Featured image of post 一次完整的 OpenWrt x86 根分区扩容与启动修复记录

一次完整的 OpenWrt x86 根分区扩容与启动修复记录

前言

在 ESXi 等虚拟化环境中部署 OpenWrt x86 时,官方镜像通常只有一百多 MB 的根分区空间。在安装 LuCI、OpenClash、Docker 等组件之前,扩容几乎是必做操作。

但 OpenWrt x86 的磁盘结构和启动方式,与常规 Linux 发行版存在明显差异。如果直接套用“Linux 扩容教程”,大概率会反复踩坑。

本文完整记录了一次 真实发生的 OpenWrt x86 根分区扩容过程,不仅包含最终可行方案,也包含所有失败尝试及对应的错误输出,作为一份可复盘、可复用的工程记录。


一、必须先了解的关键事实

  1. OpenWrt x86 无法在自身运行状态下离线维护根文件系统
  2. resize2fs 不能对已经挂载的 /(rootfs)执行
  3. 重建或调整分区后,PARTUUID 会发生变化
  4. OpenWrt x86 的 GRUB 默认使用 PARTUUID 作为 root 参数

结论只有一个:
必须借助 Linux Live 系统,对 OpenWrt 的磁盘进行离线维护。


二、最初的直觉方案:在 OpenWrt 内直接扩容(失败)

确认磁盘已经在 ESXi 中扩展到 25GB:

1
fdisk -l /dev/sda
1
2
3
Disk /dev/sda: 25 GiB
/dev/sda1   16M
/dev/sda2   25G

尝试直接扩展 ext4:

1
resize2fs /dev/sda2

得到错误:

1
2
Filesystem at /dev/sda2 is mounted on /
resize2fs: Invalid argument While checking for on-line resizing support

原因说明:

  • /dev/sda2 正在作为 / 挂载
  • OpenWrt x86 不支持 rootfs 在线扩容

三、尝试关闭 ext4 journal(仍然失败)

1
tune2fs -O ^has_journal /dev/sda2
1
2
The has_journal feature may only be cleared when the filesystem is
unmounted or mounted read-only.

即使在 failsafe 模式下,根分区依然会被挂载,无法满足 ext4 的离线条件。


四、尝试 failsafe / init hack(不可行)

尝试通过 GRUB 传入参数:

1
root=/dev/ram init=/bin/sh

结果表现为:

  • init 进程退出
  • 内核自动重启
  • 回到 GRUB

在 OpenWrt 24.x x86 环境下,该路径 不可行


五、结论:必须使用外部 Linux Live 系统

到此可以确认:

在 OpenWrt x86 自身环境中,不可能完成根分区 ext4 扩容

唯一稳定方案是:
使用 Linux Live ISO,在 OpenWrt 未启动的情况下进行维护。


六、在 Ubuntu Live 中离线扩容(成功)

从 Ubuntu Live Server 启动后:

1
lsblk
1
2
3
4
sda      25G
├─sda1   16M
├─sda2   25G
└─sda128

此时 /dev/sda2 未挂载,可以安全操作。

1. 文件系统检查

1
sudo e2fsck -f /dev/sda2
1
***** FILE SYSTEM WAS MODIFIED *****

这是扩容分区后的正常现象。


2. 扩展 ext4 文件系统

1
sudo resize2fs /dev/sda2
1
The filesystem on /dev/sda2 is now XXXXX blocks long.

ext4 文件系统已完整扩展。


七、返回 OpenWrt 后的启动问题

重启后系统卡在:

1
waiting for root device PARTUUID=...

原因分析

  • 扩容过程中分区被重建
  • PARTUUID 已发生变化
  • GRUB 仍使用旧 PARTUUID

八、永久修复 GRUB 启动参数

编辑配置文件:

1
vi /boot/grub/grub.cfg

将所有启动项中的:

1
root=PARTUUID=xxxx

统一修改为:

1
root=/dev/sda2

普通启动与 failsafe 启动项 都必须修改


九、最终验证

1
df -h
1
/dev/root   24.7G   Available 24.6G   Mounted on /

根分区容量与启动状态均已恢复正常。


结语

OpenWrt x86 根分区扩容并不是工具问题,而是 系统设计层面的限制

这次实践得出的结论非常明确:

  • ❌ 不要在 OpenWrt 内尝试扩容 rootfs
  • ❌ 不要依赖 failsafe 或 init hack
  • ✅ 使用 Linux Live 离线维护
  • ✅ 扩容后避免继续使用 PARTUUID

这是一条 唯一稳定、可复现、可长期使用的路径

使用 Hugo 构建
主题 StackJimmy 设计