在 OpenWrt “squashfs + jffs2‐overlay” 模式下,根文件系统(/)是只读的 squashfs,所有可写都落在 jffs2 overlay 上。由于 flash 分区大小固定,overlay 很容易满,这时最简单、最常用的做法就是把 overlay 挪到更大空间——也就是 extroot(外部根)或者 overlay2。
下面给出一个典型的“U 盘/TF 卡 extroot”流程,供参考:
硬件/分区准备
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
安装必要的 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编辑 /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'挂载并搬迁原有 overlay 数据
mkdir /mnt
mount /dev/sda1 /mnt将原 overlay 内容整盘复制到新盘
tar -C /overlay -cf - . | tar -C /mnt -xf -
umount /mnt- 重启并验证
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 最快、最灵活。