OpenWrt SquashFS 扩容

鉴于网上大多数的 OpenWrt SD 卡扩容教程都是针对 Ext4 文件系统的,这里记录一下针对 SquashFS 文件系统的 SD 卡扩容方法。

我使用的设备和系统如下:

  • 硬件:FriendlyElec NanoPi R4S
  • 系统:OpenWrt 24.10.1
  1. 安装必需的工具:

    1
    2
    opkg update
    opkg install cfdisk losetup f2fs-tools
  2. 开始扩展分区,这里需要用方向键和回车键交互

    1
    cfdisk /dev/mmcblk1
  3. 选中最后一个分区;选择 Resize,保持默认值即可

  4. 选择 Write,输入 yes 确认;选择 Quit;分区扩展完毕

  5. 接下来开始扩展文件系统:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    LOOP_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}
  6. 重启使改动生效:

    1
    reboot

最后说一说我的大致理解:OpenWrt 中闪存一般划为两个分区,一个是 Linux 内核,另一个则是 RootFS。在使用 SquashFS 时,第二个分区同时包含了只读的 SquashFS 和可写入的 F2FS。由于 F2FS 在分区中有一定的位移,OpenWrt 会建立一个 loop 设备来挂载它(loop 设备一般用来把文件当作虚拟块设备挂载,这里却是挂载了一个物理块设备,可以推测是为了解决位移的问题)。我们从系统中读取位移之后,就能自行再次挂载 F2FS。这时,只需要运行一些命令让文件系统扩展到分区的大小即可。

参考资料:


OpenWrt SquashFS 扩容
https://tomzhu.site/2025/05/27/OpenWrt-SquashFS-扩容/
作者
Tom Zhu
发布于
2025年5月27日
许可协议