No usable overlay filesystem found, using tmpfs overlay

Today I upgraded from OpenWRT 24.10.5 to 25.12.4. The first attempt to upgrade failed, so I went through TFTP and flashed the factory image.

Now my data is no longer persistent. After some fiddeling around I found this log entry:

root@OpenWrt:~# logread | grep -i overlay
Wed May 13 22:42:48 2026 user.warn kernel: [   14.223899] mount_root: no usable overlay filesystem found, using tmpfs overlay
Wed May 13 22:43:38 2026 daemon.err mount_root: failed - mount -t jffs2 /dev/mtdblock5 /rom/overlay: Invalid argument

Which explains it. Now the question is how to fix it?

What I tried so far and did not help:

  • Reflash via TFTP
  • Flash via sysupgrade
  • factoryreset: /dev/mtdblock5 is not mounted; /dev/mtdblock5 will be erased on next mount
  • mount -t jffs2 /dev/mtdblock5 /mnt: mount: mounting /dev/mtdblock5 on /mnt failed: Invalid argument
  • mtd erase rootfs_data: Unlocking rootfs_data ...; Erasing rootfs_data ...

The router is an TPLink Archer C6 v2 EU and I used the firmware selector to build an image with kmod-ath10k instead of kmod-ath10k-ct, ath10k-firmware-qca9888 instead of ath10k-firmware-qca9888-ct and wpad-mesh-mbedtls instead of wpad-basic-mbedtls.

My current workaround is to use uci-defaults to configure the router on every boot.

ubus call system board
{
	"kernel": "6.12.87",
	"hostname": "OpenWrt",
	"system": "Qualcomm Atheros QCA956X ver 1 rev 0",
	"model": "TP-Link Archer C6 v2 (EU/RU/JP)",
	"board_name": "tplink,archer-c6-v2",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "25.12.4",
		"firmware_url": "https://downloads.openwrt.org/",
		"revision": "r32933-4ccb782af7",
		"target": "ath79/generic",
		"description": "OpenWrt 25.12.4 r32933-4ccb782af7",
		"builddate": "1778712129"
	}
}
cat /proc/cpuinfo
system type		: Qualcomm Atheros QCA956X ver 1 rev 0
machine			: TP-Link Archer C6 v2 (EU/RU/JP)
processor		: 0
cpu model		: MIPS 74Kc V5.0
BogoMIPS		: 385.84
wait instruction	: yes
microsecond timers	: yes
tlb_entries		: 32
extra interrupt vector	: yes
hardware watchpoint	: yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa			: mips1 mips2 mips32r1 mips32r2
ASEs implemented	: mips16 dsp dsp2
Options implemented	: tlb 4kex 4k_cache prefetch mcheck ejtag llsc dc_aliases perf_cntr_intr_bit cdmm contextconfig perf mm_full
shadow register sets	: 1
kscratch registers	: 0
package			: 0
core			: 0
VCED exceptions		: not available
VCEI exceptions		: not available
cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00020000 00010000 "u-boot"
mtd1: 00010000 00010000 "info"
mtd2: 007a0000 00010000 "firmware"
mtd3: 0029cb1f 00010000 "kernel"
mtd4: 005034e1 00010000 "rootfs"
mtd5: 00030000 00010000 "rootfs_data"
mtd6: 00020000 00010000 "tplink"
mtd7: 00010000 00010000 "art"
mount
/dev/root on /rom type squashfs (ro,relatime,errors=continue)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
tmpfs on /tmp/root type tmpfs (rw,noatime,mode=755)
overlayfs:/tmp/root on / type overlay (rw,noatime,lowerdir=/,upperdir=/tmp/root/upper,workdir=/tmp/root/work,uuid=on)
tmpfs on /dev type tmpfs (rw,nosuid,noexec,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,mode=600,ptmxmode=000)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,noatime)
bpffs on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,noatime,mode=700)

The EU V2 is a 8Mb flash device, I can imagine you're running out of flash space.

Use the standard image, try running firstboot -y && reboot.