前言

想要把OpenWrt进行功能扩展,比如打造成一台小型NAS服务器,或者网页服务器等等,还有一道坎需要迈过。

因为路由器的CPU和内存与电脑甚至是手机相比,都要弱了不少。CPU计算慢一些还可以将就,毕竟咱也没有那么高的需求,但存储空间不够,就装不了插件了,再强大的扩展能力也只能望洋兴叹。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(1)

空间已经快满了,再满的话文件系统就会崩溃,全盘变成read-only状态,那时就只能重刷固件了

需求

在折腾其它扩展之前,我要在OpenWrt上外接一块500G的USB硬盘,实现以下需求:

  1. 硬盘分出一个512M的分区挂载为swap交换分区,可以看作是Windows平台上的虚拟内存,达到扩容内存的作用。
  2. 再分出一个5G的分区挂载为系统目录,扩容系统闪存。
  3. 剩余空间留作备用,有需求的时候再建立新分区,挂载到系统目录的子目录就可以使用。

安装需要的工具

要用到

cfdisk:傻瓜式分区工具

e2fsprogs:格式化工具

kmod-fs-ext4:ext4文件系统支持

SSH连接到OpenWrt命令行,输入命令更新软件包源:

opkg update

然后安装工具,输入命令:

opkg install cfdisk e2fsprogs kmod-fs-ext4

如果有提示“...installed in root is up to date”,说明系统中已经安装了这个工具。

对硬盘进行分区

将USB硬盘连接到路由器。首先要对硬盘进行分区,命令行中输入:

cfdisk

进入cfdisk程序界面,简单介绍下cfdisk的界面:

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(2)

双指放大查看

swap分区我之前已经做好了,接下来在未分区的位置上创建一个5G的新分区。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(3)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(4)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(5)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(6)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(7)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(8)

双指放大查看

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(9)

双指放大查看

分区建立好以后,还需要进行格式化,因为我之前已经格式化过了,这里不再演示。格式化命令如下:

mkswap /dev/sda1           #把/dev/sda1建立为swap交换分区
mkfs.ext4 /dev/sda2         #把/dev/sda2格式化为ext4文件系统

分别执行上面两条命令,注意/dev/sda1是你的设备名称,就是前面让你记下来的。

挂载swap交换分区

进入OpenWrt后台,系统→挂载点→swap→点击添加。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(10)

双指放大查看

设备菜单处要选择之前mkswap的那个分区。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(11)

双指放大查看

显示已挂载,但还要拉到页面最底部再点一次“保存并应用”。我之前设置不成功就是因为没点这里

验证swap是否建立成功,只需进入状态→概况,出现“虚拟内存”,表示已经成功了。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(12)

双指放大查看

挂载系统根目录

这里本来要分两步,首先是挂载overlayfs,再挂载根目录。

overlayfs的主要作用有两个。一是压缩存储文件,在磁盘空间紧张的情况下尽量少占用空间;二是加了一层对系统底层的保护机制,在折腾不当的情况下可以“还原出厂设置”,避免变砖。

但我们挂载硬盘后,空间是够用的,路由器上还刷过不死Breed,overlay对我来说没啥用了,反而还增加了一个压缩过程,降低文件效率。

所以我决定直接挂载根目录,放弃overlayfs。

让我们再回到“挂载点”的设置页面。

在页面下方,swap上方,有个挂载点设置,点击添加。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(13)

双指放大查看

注意,选择用UUID挂载识别设备会更准确,UUID下拉菜单,每个选项后面都列出了设备名称,可以帮你辨识设备。做完这几步后先不要点保存并应用。

回到SSH,执行以下命令:

mkdir -p /tmp/introot                                                          #在/tmp目录下创建introot文件夹 
mkdir -p /tmp/extroot                                                         #在/tmp目录下创建extroot文件夹 
mount --bind / /tmp/introot                                               #将/根目录挂载到inroot 
mount /dev/sda1 /tmp/extroot                                          #将硬盘挂载到extroot 
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -        #把introot中的系统镜像打包并在硬盘中解包 
umount /tmp/introot                                                          #取消挂载 
umount /tmp/extroot                                                         #取消挂载

命令中涉及到设备名称的(/dev/sda1)这些地方,要换成自己的设备名。

这一步是把根目录复制镜像到准备挂载的设备中,挂载完成以后,OpenWrt就会从USB硬盘启动系统,并在闪存中保留备份,硬盘挂了的话,还可以从自身闪存启动系统。

执行完命令,再回到后台页面,点击保存并应用。

重启路由器。

OpenWrt空间不够用怎么办(openwrt空间不足解决方法)(14)

双指放大查看

可以看到已经扩容成功了。

结语

目前系统分区添加插件也不用担心空间不够了,添加了swap以后,虽然效率不高,但还是显著提高了路由器的稳定性。下一步计划挂载硬盘的剩余空间,作为内网共享使用并安装离线下载,初步实现NAS功能。