参考: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,搞定~
发表回复