OpenWrt SquashFS 扩容
鉴于网上大多数的 OpenWrt SD 卡扩容教程都是针对 Ext4 文件系统的,这里记录一下针对 SquashFS 文件系统的 SD 卡扩容方法。
我使用的设备和系统如下:
- 硬件:FriendlyElec NanoPi R4S
- 系统:OpenWrt 24.10.1
安装必需的工具:
1
2opkg update
opkg install cfdisk losetup f2fs-tools开始扩展分区,这里需要用方向键和回车键交互
1
cfdisk /dev/mmcblk1
选中最后一个分区;选择
Resize
,保持默认值即可选择
Write
,输入yes
确认;选择Quit
;分区扩展完毕接下来开始扩展文件系统:
1
2
3
4
5
6
7
8
9
10
11LOOP_OLD="$(losetup -n -O NAME | sort | sed -n -e "1p")"
ROOT="$(losetup -n -O BACK-FILE ${LOOP_OLD} | sed -e "s|^|/dev|")"
OFFS="$(losetup -n -O OFFSET ${LOOP_OLD})"
LOOP_NEW="$(losetup -f)"
losetup -o ${OFFS} ${LOOP_NEW} ${ROOT}
fsck.f2fs -f ${LOOP_NEW}
mount ${LOOP_NEW} /mnt
umount ${LOOP_NEW}
resize.f2fs ${LOOP_NEW}重启使改动生效:
1
reboot
最后说一说我的大致理解:OpenWrt 中闪存一般划为两个分区,一个是 Linux 内核,另一个则是 RootFS。在使用 SquashFS 时,第二个分区同时包含了只读的 SquashFS 和可写入的 F2FS。由于 F2FS 在分区中有一定的位移,OpenWrt 会建立一个 loop 设备来挂载它(loop 设备一般用来把文件当作虚拟块设备挂载,这里却是挂载了一个物理块设备,可以推测是为了解决位移的问题)。我们从系统中读取位移之后,就能自行再次挂载 F2FS。这时,只需要运行一些命令让文件系统扩展到分区的大小即可。
参考资料:
OpenWrt SquashFS 扩容
https://tomzhu.site/2025/05/27/OpenWrt-SquashFS-扩容/