OpenWRT 扩展容量
场景一:自身存储小,通过 U 盘扩展(U 盘挂载到根目录)
仅适用于有 USB 插口的路由器。
注:如果提示软件无法安装,一般是因为没有执行 opkg update
支持 U 盘
安装
1 2 3 4 5 6 7 8
opkg install kmod-usb-core \ kmod-usb-uhci \ kmod-usb-storage \ kmod-usb2 \ kmod-usb-ohci \ block-mount \ mount-utils \ fdisk
``
如果 U 盘或移动硬盘是 FAT32 的,就再装个
kmod-fs-vfat
;如果是 NTFS 的,就装ntfs-3g
。挂载
- 执行
mkdir /mnt/usb
创建挂载目录 - 插入 U 盘
- 执行
fdisk -l | grep "^/"
会看到与 U 盘容量差不多的分区。这里假设为/dev/sda4
- 执行
mount /dev/sda4 /mnt/usb
- 执行
这样进入 /mnt/usb
就能看到 U 盘的文件了
扩容
需要已经按照上面的【支持 U 盘】安装了相应软件。
路由器的存储非常小,装几个软件就没了。例如 小米路由器mini 只有 16MB 的 Flash。
那么其实我们只要把根目录挂载到 U 盘上,那么就能把软件装在 U 盘上了。能存多少东西就取决于 U 盘的容量。此外还可以添加 Swap,扩充内存。用来运行需要比较大内存的程序。
步骤大致有:
- fdisk 对 U 盘分区
- 复制当前根目录的所有文件到 U 盘的根目录分区
- 设置让系统把 U 盘的分区挂载到根目录,并重启(重启后生效)
- 让 /var 不再指向临时文件系统
1. fdisk 对 U 盘分区
我总共分了三个分区:
- 普通分区,插到 Windows 也能用的。分区类型为 FAT32。这个分区也可以不要。
- 根目录分区。分区类型为 ext4。除了 1 和 3,剩余容量放这个分区。以下假设为
/dev/sda1
。 - Swap 分区。分区类型为 Swap。以下假设为
/dev/sda2
。
具体容量看你想要多少内存。一两个 GB 就可以了。
我没有使用 fdisk 分区,而是在 Windows 上用 DiskGenius 分区的。所以用 fdisk 分区的方式见:
https://www.cnblogs.com/wangkangluo1/archive/2012/06/08/2541161.html
分区后 U 盘插入路由器,用 block info
查看结果。
如果已经有安装 blkid,也可以执行
blkid
查看结果。
以下假设 /dev/sda1 为 U 盘上要作为根目录的分区
|
|
命令的含义:
kmod-fs-ext4
是对 ext4 文件系统的支持。e2fsprogs
包含了 mkfs 命令,用于格式化分区。- 将 /dev/sda1 格式化为 ext4
2. 复制当前根目录的所有文件到 U 盘的根目录分区
以下假设 /dev/sda1 为 U 盘上要作为根目录的分区
|
|
命令的含义:
- 创建下面 U 盘分区要挂载的目录
- 将 U 盘中要作为根目录分区挂载到 /mnt/udisk
- 创建一个临时目录,用于拷贝根目录文件
- 将当前根目录以 bind 的方式挂载到临时目录,此时临时目录里可以看到和根目录一样的文件
- 将临时目录的内容打包并解压到 /mnt/disk,tar 用于保留文件的属性信息
- 将所有缓存写入 ROM
- 取消挂载
3. 设置让系统把 U 盘的分区挂载到根目录,并重启(重启后生效)
让系统自己检测分区情况
block detect > /etc/config/fstab
编辑
/etc/config/fstab
,编辑后的内容大致如下1 2 3 4 5 6 7 8 9 10 11 12
config global option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' option anon_swap '1' option anon_mount '1' config mount option target '/' option uuid '0000-0000' option enabled '1'
第一部分的 global 不需要修改。
第二个部分的 mount 中,target 改为 /,即挂载到根目录;uuid 为 U 盘分区的标识符。
如果不确定哪个 UUID 是对应刚才的分区,可以执行block info
查看。执行
reboot
重启
重启后执行
df -h
就能看到/
对应的容量扩大了
4. 让 /var 不再指向临时文件系统
执行:ls -l /
查看 /var 是否指向临时文件系统。如果看到:var -> tmp
,就表示重启路由后,你对 /var 里文件的修改会丢失。比如应用的日志。
执行以下命令:
|
|
依次是:
- 删除当前的软连接
- 创建文件夹
- 将 /tmp 里的文件复制到 /var 里面
- 重启
注:如果 /var 指向 tmp,可能会导致 supervisor 无法正确启动。因为涉及到
/var/run/
文件夹。
扩充内存
上面扩容的时候,有分了一个 Swap 分区。现在我们把它挂载到系统的 Swap。
假设设置为 Swap 的分区为 /dev/sda2,执行以下命令:
|
|
命令的含义:
- 将 /dev/sda2 设置为 Swap
- 启用这个 Swap
此时用 free
命令查看就可以看到 Swap 已经加载了。
接下来让路由器启动的时候自动加载这个 Swap。
编辑 /etc/config/fstab
。
在下面多添加:
|
|
注:swap 无法通过 UUID 挂载,它只有 PARTUUID。只能通过盘号挂载
执行 reboot
重启路由器。重启后执行 free
就能看到效果了。
参考链接
https://segmentfault.com/a/1190000000380233
场景二:自身容量大,但 OpenWRT 只用了一小部分
这里以 Raspberry Pi 4B 为例:
镜像下载地址:
https://openwrt.org/toh/hwdata/raspberry_pi_foundation/raspberry_pi_foundation_raspberry_pi_4_b
先把 OpenWRT 装好,网络配置为 DHCP
把存储卡剩余容量格式化为 ext4
给多少容量无所谓,这一步是为了存备份文件进入到路由,执行命令把系统文件备份到刚刚创建的 ext4 分区(假设为 /dev/sda3)
1 2 3 4 5
mkdir /mnt/udisk mount /dev/sda3 /mnt/udisk mkdir /tmp/root mount --bind / /tmp/root tar -C /tmp/root -cvf /mnt/udisk/backup.tar .
如果有 Ubuntu 系统桌面版,直接进去 Ubuntu 系统使用下面的操作。
没有的话,刷一个到 U 盘,然后用 U 盘启动。使用 Ubuntu 自带的 disk 软件,将原先装系统文件的那个分区格式化为 ext4
注意:一定要使用格式化,不能直接删除该分区。因为该分区前面的空白分区需要保留。如果直接删除,会被合并起来。将上一步格式化为 ext4 分区的容量调大到想要的大小,例如 4GB
把 backup.tar 解压到这个分区里面
在这前面还有一个分区,叫 boot 分区。进去里面编辑 cmdline.txt
把rootfstype=squashfs,ext4
改为rootfstype=ext4,squashfs
,并保存把卡插到 Raspberry 启动