圈小蛙

解决OpenWrt使用squashfs只读系统提示No space left on device的问题

当前的情况是:VMware ESXi 虚拟机 安装了 Squashfs 格式的OpenWrt固件,使用时提示No space left on device的错误,本文详细讲解解决此问题的方法。

OpenWrt 中,Squashfs 属于只读文件系统。它的特性是:

既然是 ESXi 虚拟机跑 Squashfs,最完美的解决办法是 “金蝉脱壳”法:在 ESXi 中加一块全新的独立虚拟硬盘,然后把系统的“家”(Overlay)彻底搬过去。请按照以下步骤操作:

第一步:在 ESXi 中添加一块新硬盘

1、登录 ESXi 后台,关闭 OpenWrt 虚拟机。
2、编辑虚拟机设置,点击 添加新设备 -> 新建标准硬盘。
3、容量设置为你想要的大小(例如 20GB 或更多),保存。
4、开启 OpenWrt 虚拟机。此时,这块新硬盘在系统中会被识别为 /dev/sdb。

第二步:利用内存(RAM)给系统“续命”以安装工具

由于原本的存储已经爆满挂起,我们需要利用内存临时清理出空间来安装格式化工具:

1、通过 SSH 连接 OpenWrt,执行以下命令重启临时释放内存:

reboot

2、重启后立刻连接 SSH,执行以下命令(注意:不要去安装体积庞大的 block-mount 或 yq):

#更新软件源
apk update
#仅安装最核心、体积最小的磁盘和格式化工具
apk add fdisk e2fsprogs

第三步:对新硬盘进行分区与格式化

接着来处理那块 20GB 的新硬盘 /dev/sdb:

1、运行分区命令:

fdisk /dev/sdb

2、在交互界面中,依次输入以下字母(每输一个敲一次回车):

3、将新分区格式化为 ext4 文件系统:

mkfs.ext4 /dev/sdb1

第四步:迁移数据到新硬盘

将目前系统里现有的配置和数据拷贝到这块大硬盘中:

#创建临时挂载点并挂载新硬盘
mkdir /tmp/new_overlay
mount /dev/sdb1 /tmp/new_overlay
#将原只读系统之上的配置数据完整复制过去
cp -a /overlay/. /tmp/new_overlay
#卸载临时挂载
umount /tmp/new_overlay

第五步:在 OpenWrt的Web 后台(LuCI)接管系统

1、打开 OpenWrt 网页后台,进入 系统 (System) -> 挂载点 (Mount Points)。
2、找到 挂载点 (Mount Points) 区域,点击 添加 (Add):

3、点击页面右下角的 保存并应用 (Save & Apply)。
4、回到 ESXi 或在网页端重启 OpenWrt 虚拟机。

重启完成后,再次进入 OpenWrt 首页,可以发现“路由存储 / 空闲空间”已经变成了 20GB,且由于 Squashfs 的底层保护,未来即使软路由折腾固件崩溃,随时还可以在 ESXi 里拔掉这块新硬盘实现“一键重置配置”。

Exit mobile version