想要把OpenWrt进行功能扩展,比如打造成一台小型NAS服务器,或者网页服务器等等,还有一道坎需要迈过。因为路由器的CPU和内存与电脑甚至是手机相比,都要弱了不少。CPU计算慢一些还可以将就,毕竟咱也没有那么高的需求,但存储空间不够,就装不了插件了,再强大的扩展能力也只能望洋兴叹。
空间已经快满了,再满的话文件系统就会崩溃,全盘变成read-only状态,那时就只能重刷固件了
需求
在折腾其它扩展之前,我要在OpenWrt上外接一块500G的USB硬盘,实现以下需求:
硬盘分出一个512M的分区挂载为swap交换分区,可以看作是Windows平台上的虚拟内存,达到扩容内存的作用。
再分出一个5G的分区挂载为系统目录,扩容系统闪存。
剩余空间留作备用,有需求的时候再建立新分区,挂载到系统目录的子目录就可以使用。
安装需要的工具
要用到
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
的界面:
swap分区我之前已经做好了,接下来在未分区的位置上创建一个5G的新分区。
分区建立好以后,还需要进行格式化,因为我之前已经格式化过了,这里不再演示。格式化命令如下:
mkswap /dev/sda1 #把/dev/sda1建立为swap交换分区mkfs.ext4 /dev/sda2 #把/dev/sda2格式化为ext4文件系统
分别执行上面两条命令,注意/dev/sda1
是你的设备名称,就是前面让你记下来的。
挂载swap交换分区
进入OpenWrt后台,系统→挂载点→swap→点击添加。
设备菜单处要选择之前mkswap
的那个分区。
显示已挂载,但还要拉到页面最底部再点一次“保存并应用”。我之前设置不成功就是因为没点这里。
验证swap是否建立成功,只需进入状态→概况,出现“虚拟内存”,表示已经成功了。
挂载系统根目录
这里本来要分两步,首先是挂载overlayfs
,再挂载根目录。
overlayfs
的主要作用有两个。一是压缩存储文件,在磁盘空间紧张的情况下尽量少占用空间;二是加了一层对系统底层的保护机制,在折腾不当的情况下可以“还原出厂设置”,避免变砖。
但我们挂载硬盘后,空间是够用的,路由器上还刷过不死Breed,overlay对我来说没啥用了,反而还增加了一个压缩过程,降低文件效率。
所以我决定直接挂载根目录,放弃overlayfs
。
让我们再回到“挂载点”的设置页面。
在页面下方,swap上方,有个挂载点设置,点击添加。
注意,选择用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硬盘启动系统,并在闪存中保留备份,硬盘挂了的话,还可以从自身闪存启动系统。
执行完命令,再回到后台页面,点击保存并应用。
重启路由器。
可以看到已经扩容成功了。
结语
目前系统分区添加插件也不用担心空间不够了,添加了swap以后,虽然效率不高,但还是显著提高了路由器的稳定性。下一步计划挂载硬盘的剩余空间,作为内网共享使用并安装离线下载,初步实现NAS功能。
评论区