在 OpenWrt “squashfs + jffs2‐overlay” 模式下,根文件系统(/)是只读的 squashfs,所有可写都落在 jffs2 overlay 上。由于 flash 分区大小固定,overlay 很容易满,这时最简单、最常用的做法就是把 overlay 挪到更大空间——也就是 extroot(外部根)或者 overlay2。

下面给出一个典型的“U 盘/TF 卡 extroot”流程,供参考:

  1. 硬件/分区准备
    1.1 准备一个容量足够的 USBU 盘或 TF 卡(最好在系统以外做)。
    1.2 在 PC 上使用 fdisk/parted 给它分区:

    - 分区1 (建议格式 ext4),用于挂到 /overlay  
    - 分区2 (可选,swap)  

    1.3 在 PC 上格式化:

      mkfs.ext4 -L rootfs_data /dev/sdX1  
      mkswap    /dev/sdX2  
    
  2. 安装必要的 OpenWrt 软件包
    ssh 登录到路由器后:
    opkg update
    opkg install block-mount kmod-usb-storage kmod-scsi-core kmod-fs-ext4

    如果你的 U 盘是 FAT32,额外再装:
    opkg install kmod-fs-vfat dosfstools

  3. 编辑 /etc/config/fstab,添加类似:
    config global
    option anon_mount '1'
    option run_fsck '0'

    config mount
    option target '/overlay'
    option device '/dev/sda1' # 或者 LABEL=rootfs_data
    option fstype 'ext4'
    option enabled '1'

    (若需 swap)
    config mount
    option target 'swap'
    option device '/dev/sda2'
    option fstype 'swap'
    option enabled '1'

  4. 挂载并搬迁原有 overlay 数据
    mkdir /mnt
    mount /dev/sda1 /mnt

    将原 overlay 内容整盘复制到新盘

    tar -C /overlay -cf - . | tar -C /mnt -xf -
    umount /mnt

  5. 重启并验证
    reboot
    登陆后执行 df -h,确认 /overlay 已挂载到 U 盘(/dev/sda1)
    之后所有对 /etc、/usr、/tmp 等的写操作都会落到 U 盘上,空间即可按 U 盘容量扩展

——

如果你非要在原有 flash 上“长大” rootfs,就只有重编译固件、改 partition table 一条路:
• 在 OpenWrt SDK 或源码中,找到对应设备的 partitions 定义(通常在 target/linux/…/device/.dtsi 或 .mk 里),
• 调整 squashfs 分区大小(减小其他分区或删掉 swap),
• 重新编译、刷入。

但绝大多数应用场景直接用外部存储做 extroot 最快、最灵活。

最后修改:2025 年 07 月 02 日
如果觉得我的文章对你有用,请随意赞赏