Re: [yocto] overlayfs-etc on top of dm-verity?
Francesco Valla <[email protected]> Thu, 26 Mar 2026 23:19:38 +0100
| Newsgroups | org.yoctoproject.lists.yocto |
|---|---|
| Message-ID | <acWttty52EgZmIn5@bywater> |
Hi Michael, On Thu, Mar 26, 2026 at 09:56:21AM +0000, Michael Opdenacker via lists.yoctoproject.org wrote: > Greetings, > > On 3/25/26 10:20 PM, Michael Opdenacker wrote: > > Hi Slava and community, > > > > Do you know if overlayfs and in particular our overlayfs-etc class works > > when /etc is on a dm-verity root filesystem? > > > > Without dm-verity (regular ext4 or erofs root filesystem), everything > > looks all right: > > # mount | grep overlay > > /data/overlay-etc/upper on /etc type overlay (rw,relatime,lowerdir=/etc,upperdir=/data/overlay-etc/upper,workdir=/data/overlay-etc/work,uuid=on) > > > > When /etc is on /dev/mapper/rootfs (dm-verity), everything seems messed > > up: > > # mount | grep overlay > > overlay on /var/cache type overlay (rw,relatime,lowerdir=/var/cache,upperdir=/var/volatile/cache,workdir=/var/volatile/.cache-work,uuid=on) > > overlay on /var/lib type overlay (rw,relatime,lowerdir=/var/lib,upperdir=/var/volatile/lib,workdir=/var/volatile/.lib-work,uuid=on) > > overlay on /var/spool type overlay (rw,relatime,lowerdir=/var/spool,upperdir=/var/volatile/spool,workdir=/var/volatile/.spool-work,uuid=on) > > overlay on /srv type overlay (rw,relatime,lowerdir=/srv,upperdir=/var/volatile/srv,workdir=/var/volatile/.srv-work,uuid=on) > > > > Systemd may be messing up, as only in this case, it does: > > � � � � �Starting Bind mount volatile /var/cache... > > � � � � �Starting Bind mount volatile /var/lib... > > � � � � �Starting Bind mount volatile /var/spool... > > � � � � �Starting Bind mount volatile /srv... > > > > But these bind mounts show up as overlay mounts! > > > > Has anyone already encountered such an issue? > > I eventually managed to get /etc mounted as an overlay. It seems that > /sbin/init was started instead of /sbin/preinit as specified in the kernel > command line. > I hardcoded the call to /sbin/preinit by customizing > openembedded-core/meta/recipes-core/initrdscripts/initramfs-framework/finish > (in a bbappend file, of course). > > The code looks right though, I need to understand why this happens. > > Another weirdness that remains is these volatile mounts for /var/cache/, > /var/lib, /var/spool and /srv, which I didn't have with a regular read-only > root filesystem. AFAIK, this should be the regular behavior on a read-only root filesystem. The overlayfs mounts are created by services generated by: meta/recipes-core/volatile-binds/volatile-binds.bb depending on the content of the VOLATILE_BINDS variable. For each couple of upperdir-lowerdir specified there, a service is generated that starts only if upperdir's parent is writable and lowerdir is not. E.g.: lowerdir=/srv upperdir=/var/volatile/srv In a vanilla openembedded-core system, a tmpfs is mounted on /var/volatile by the fstab (that is, by the fstab systemd generator), so the upperdir's parent directory (which is the same /var/volatile) is writable. You can force a copy+bind behavior setting AVOID_OVERLAYFS=1. > I'll keep you posted. > Cheers > Michael. > > -- > Root Commit > Embedded Linux Training and Consulting > https://rootcommit.com > Best regards, Francesco