From db8ea24da217f5adc42d84000b97375ba5f36ee0 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Mon, 13 Mar 2023 00:10:32 +0300 Subject: [PATCH] Do not mount overlay on a certain R/W rootfs --- general/overlay/init | 71 ++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/general/overlay/init b/general/overlay/init index 3eda4970..25a0136e 100755 --- a/general/overlay/init +++ b/general/overlay/init @@ -1,7 +1,6 @@ #!/bin/sh -on_exit() -{ +on_exit() { mountpoint -q /proc && umount /proc exec /sbin/init $* } @@ -11,36 +10,44 @@ trap on_exit 0 mount -t proc proc /proc || exit grep -q overlay /proc/filesystems || exit -if grep -q ubifs /proc/cmdline; then - mount -t ubifs ubi0:rootfs_data /overlay -else - mtdblkdev=`awk -F ':' '/rootfs_data/ {print $1}' /proc/mtd | sed 's/mtd/mtdblock/'` - mtdchrdev=`grep 'rootfs_data' /proc/mtd | cut -d: -f1` - mount -t jffs2 /dev/${mtdblkdev} /overlay - - if [ $? -ne 0 ] || { dmesg | grep "jffs2.*: Magic bitmask.*not found" > /dev/null 2>&1; } then - echo "jffs2 health check error, format required!" - flash_eraseall -j /dev/${mtdchrdev} - echo "Done! Remounting..." - mount -t jffs2 /dev/${mtdblkdev} /overlay || mount -t tmpfs tmpfs /overlay || exit - if ! cat /proc/mounts | grep ${mtdblkdev}; then - echo "--------------------------------" - echo "Crash - your flash in the trash!" - echo "--------------------------------" - fi +if ! grep -q 'root=.*nfs\|mmcblk\|ram' /proc/cmdline; then + if grep -q ubifs /proc/cmdline; then + mount -t ubifs ubi0:rootfs_data /overlay + else + mtdblkdev=$(awk -F ':' '/rootfs_data/ {print $1}' /proc/mtd | sed 's/mtd/mtdblock/') + mtdchrdev=$(grep 'rootfs_data' /proc/mtd | cut -d: -f1) + mount -t jffs2 /dev/${mtdblkdev} /overlay + + if [ $? -ne 0 ] || { dmesg | grep "jffs2.*: Magic bitmask.*not found" >/dev/null 2>&1; }; then + echo "jffs2 health check error, format required!" + flash_eraseall -j /dev/${mtdchrdev} + echo "Done! Remounting..." + mount -t jffs2 /dev/${mtdblkdev} /overlay || mount -t tmpfs tmpfs /overlay || exit + if ! cat /proc/mounts | grep ${mtdblkdev}; then + echo "--------------------------------" + echo "Crash - your flash in the trash!" + echo "--------------------------------" + fi + fi fi -fi -if grep -q overlayfs /proc/filesystems; then - mount -t overlayfs overlayfs -o lowerdir=/,upperdir=/overlay,ro /mnt || { umount /overlay; exit; } -else - overlay_rootdir=/overlay/root - overlay_workdir=/overlay/work - mkdir -p ${overlay_rootdir} ${overlay_workdir} - mount -t overlay overlay -o lowerdir=/,upperdir=${overlay_rootdir},workdir=${overlay_workdir} /mnt || { umount /overlay; exit; } -fi + if grep -q overlayfs /proc/filesystems; then + mount -t overlayfs overlayfs -o lowerdir=/,upperdir=/overlay,ro /mnt || { + umount /overlay + exit + } + else + overlay_rootdir=/overlay/root + overlay_workdir=/overlay/work + mkdir -p ${overlay_rootdir} ${overlay_workdir} + mount -t overlay overlay -o lowerdir=/,upperdir=${overlay_rootdir},workdir=${overlay_workdir} /mnt || { + umount /overlay + exit + } + fi -pivot_root /mnt /mnt/rom -mount -o noatime,move /rom/proc /proc -mount -o noatime,move /rom/dev /dev -mount -o noatime,move /rom/overlay /overlay + pivot_root /mnt /mnt/rom + mount -o noatime,move /rom/proc /proc + mount -o noatime,move /rom/dev /dev + mount -o noatime,move /rom/overlay /overlay +fi