在 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 最快、最灵活。 Loading... 在 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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 3 如果觉得我的文章对你有用,请随意赞赏