[...] ROOT_RO=/mnt/root-ro ROOT_RW=/mnt/root-rw ROOT_RW_UPPER=${ROOT_RW}/upper ROOT_RW_WORK=${ROOT_RW}/work rootmnt=/root [...] mount -t tmpfs tmpfs-root ${ROOT_RW} [...] # root is mounted on ${rootmnt}, move it to ${ROOT_RO}. mount -o move ${rootmnt} ${ROOT_RO} [...] # mount virtual fs ${rootmnt} with rw-fs ${ROOT_RW} on top or ro-fs ${ROOT_RO}. mount -t overlay -o \ lowerdir=${ROOT_RO},upperdir=${ROOT_RW_UPPER},workdir=${ROOT_RW_WORK} \ overlay ${rootmnt} [...] # move mount from ${ROOT_RO} to ${rootmnt}${ROOT_RO} mount -o move ${ROOT_RO} ${rootmnt}${ROOT_RO} # move mount from ${ROOT_RW} to ${rootmnt}${ROOT_RW} mount -o move ${ROOT_RW} ${rootmnt}${ROOT_RW}