OverlayFS 在开机阶段就已经被initramfs(或 initrd)里的 /init 脚本挂载好,而不是等系统完全跑起来再由某个“服务”去做。
因此你“看不到指定当前只读层”的配置,是因为那一步被提前写进了启动脚本,在 root 切换前就完成了,后面用户空间看到的只是“已经叠好的统一视图”。
下面按时间线把整个流程拆开:
    1. 内核启动
      root= 指向的其实是initramfs 的 cpio 镜像,内核把它展开到 tmpfs 并执行 /init
    2. initramfs 里的 /init 脚本(BusyBox 或 systemd 都有)
      a. 把真正的“只读系统分区”——通常是 squashfs/ubifs 的 /dev/mtdblockXubi0_0 ——挂到 /mnt/rom(lowerdir)。
      b. 找一个可写的持久化分区(ubi 剩余卷、ext4 第三分区、USB 盘等)挂到 /mnt/overlay
      c. 建立 workdir、upperdir 目录,然后执行

 

~/initramfs$ cat init
#!/bin/sh

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

/bin/mount -t devtmpfs devtmpfs /dev
/bin/mount -t proc proc /proc
/bin/mount -t sysfs sysfs /sys

exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console

ROOT_DEV=$(cat /proc/sysinfo/system 2>/dev/null)
ROOT_DEV=${ROOT_DEV:-"/dev/mmcblk1p9"}
DATA_PARTITION=/dev/mmcblk1p11

while [ ! -e ${ROOT_DEV} ]
do
        /bin/usleep 50000
done

if [ ! -e ${DATA_PARTITION} ];then
        /usr/sbin/partition create data 0
        printf "create data OK\n"
fi

/usr/sbin/veritysetup --hash-offset=324648960 create vroot ${ROOT_DEV} ${ROOT_DEV} 74211d8c6af790dabc74cc7813f0c991b807f36bc5e3faeb968d4d82d126797c

if [ $? == 0 ];then

    printf "Verity OK\n"
        if [[ -e ${DATA_PARTITION} ]] && [[ -d /overlay ]];then
                /bin/mount -t ext4 -o rw,errors=continue ${DATA_PARTITION} /overlay
                if [ $? == 0 ];then

                        [ -d /overlay/upper ] || /bin/mkdir -p /overlay/upper
                        [ -d /overlay/work ] || /bin/mkdir -p /overlay/work

                        if [[ -e /dev/mapper/vroot ]] && [[ -d /root ]];then
                                #/bin/mount t ext4 -o ro,errors=continue /dev/mapper/vroot /root
                        /bin/mount -t squashfs -o ro /dev/mapper/vroot /root
                                if [ $? == 0 ];then
                                        /bin/mount -t overlay -o lowerdir=/root,upperdir=/overlay/upper,workdir=/overlay/work overlayfs-root /rootfs && exec /sbin/switch_root /rootfs /sbin/init
                                fi
                        fi
                fi
        else
                if [[ -e /dev/mapper/vroot ]] && [[ -d /root ]];then
                        #/bin/mount -t ext4 -o ro,errors=continue /dev/mapper/vroot /root && exec /sbin/switch_root /root /sbin/init
                        /bin/mount -t squashfs -o ro /dev/mapper/vroot /root && exec /sbin/switch_root /root /sbin/init
                fi
        fi
fi

#/bin/mount -t ext4 -o ro,errors=continue ${ROOT_DEV} /root && exec /sbin/switch_root /root /sbin/init

printf "system enter halt error($?)\n"
/sbin/reboot -f
#busybox /bin/sh