参考OpenWrt 扩容 Overlay,为你的固件增加可用空间,从此安装程序随心所欲

第 038 期 OpenWrt 完美扩容 Overlay 硬核新方法,真扩容,零空间浪费,专治强迫症! - First Sunlight


扩容需求的起因是:在每次长时间运行 openwrt 后,总会出现保存配置无法写入的报错提示。

经过观察,发现这种时刻下,系统的软件包空闲空间几乎为 0,判断是因为空间被占满后无法写入导致保存报错,那么解决办法就是对它进行扩容。

网上有很多种扩容的方法,其中我个人主要尝试了以下两种方案:

  • 第一种方案是直接对刷机包下手,在安装部署之前就搞定扩容;
  • 第二种方案则是在已经安装部署后,新建一个大分区,并将旧分区内容迁移到大分区后实现扩容。

方案一

该方案主要是对镜像包直接进行扩容,一劳永逸,个人比较推荐这个方案,一来修改简单,二来不会影响升级部署。

1、首先下载好镜像包,如果镜像包是压缩文件,如 gz 结尾,那么需要先解压出镜像包,一般是 img 后缀的文件就是镜像包。解压命令一般如下:

#解压,得到img文件
gzip -kd VLEDE1.5.4-HOME.img.gz

2、在这个 img 镜像文件后面增加空数据,如我这里增加 5GB 的空数据

#扩容5GB
dd if=/dev/zero bs=1G count=5 >> VLEDE1.5.4-HOME.img

3、这时候我们会发现 img 文件体积已经变大了 5GB,但只是因为空数据撑大了文件,下面我们执行分区命令:

parted VLEDE1.5.4-HOME.img

4、使用 print 命令查看当前镜像包的分区情况

print

5、可以看到分区 2 是镜像包默认的分区空间,只有 839MB,下面我们使用命令将刚才增加的 5GB 空数据整合进这个分区

resizepart 2 100%

6、执行 quit 退出,这时候就已经把分区 2 扩容了 5GB,接下来直接安装部署这个镜像,启动进入后查看软件包会发现空间已经有 5.25G 了,完成扩容。

7、在升级的时候,记得也要对升级包进行一次扩容,再打包成 gz 压缩包,再做升级。打包命令如下:

gzip Vlede1.5.4-home-resized.img

方案二

这个方案主要是针对已经在运行的系统进行扩容,原理是在分区 2 后新增一个新的空间并分配为分区 3,然后将分区 2 中的现有数据割接到新的分区 3 中,并将 overlay 指向分区 3,实现 overlay 扩容的目的。

这个方案在升级操作后可能会影响到分区,主要原因是升级前的分区 3 的 id 在升级后的系统中无法识别,需要对分区 3 进行重新初始化,因此不建议使用这个方案扩容后的人直接升级系统。

当然,可以先备份后再做初始化,恢复备份也是 ok 的。

1、先查看目前系统分区信息,运行 lsblk,如下图,sda 就是总的存储空间,其中 sda2 可以理解为应用存储空间,目前只有 500m

2、输入 cfdisk,进入分区操作:

上下方向键选择 Free space,我这里是 10G 总空间(如果这里没看到 Free space,那很可能是你的总空间不足,先给 openwrt 分配够硬盘空间再说),左右选择 new,回车

这时候会显示分区大小,比如我这里剩余 9.5G,删除内容,敲入要新建的分区大小,比如 5G

回车后选择主分区 primary,有的系统可能没有这个选择,直接继续下一步操作即可

回车后就会发现 sda3 的分区,大小是 5G,这时候还没格式化

先左右选择 write,做一个保存的动作,回车,然后输入 yes 确认,记得敲全 yes

回车后选择 quit,会提示 syncing disks,就说明成功了

3、接下来准备格式化 sda3 分区敲入 mkfs.ext4 /dev/sda3,回车等待 done

4、接下来挂载目录 mount /dev/sda3 /mnt/sda3 挂载后,输入 ls /mnt/sda3,如果显示 lost+found,说明挂载成功

5、拷贝文件,cd /overlay,可以看到目录下有 upper 和 work 两个目录直接 cp -r /overlay/* /mnt/sda3,将 overlay 下的所有目录和文件都拷贝到 sda3 这时候再运行 ls /mnt/sda3,可以看到 upper 和 work 目录被拷贝过来了

6、接下来就是进到系统后台,进行挂载点配置选择系统 - 挂载点,拉到下面的挂载点区块,点击添加

先勾选启用此挂载点,UUID 选择 5G 的分区,挂载点选择作为外部 overlay 使用,一定记得点击右下角保存 & 应用

重启路由器,查看软件包空闲空间 4.8G,搞定 ~