obmc-initfs: run fsck on read/write file system
Good practice is to run fsck to repair minor damage and make a
filesystem consistent before mounting it. We don't have space
in the initramfs to add fsck, but we can mount the read-only
reference partition first and run fsck from there.
Signed-off-by: Milton Miller <miltonm@us.ibm.com>
diff --git a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
index 4c2a98a9..6750de3 100644
--- a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
+++ b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
@@ -77,6 +77,8 @@
rwopts=rw
init=/sbin/init
+fsck=/sbin/fsck.$rwfst
+fsckopts=-a
echo rofs = $rofs $rofst rwfs = $rwfs $rwfst
@@ -85,6 +87,28 @@
debug_takeover "Debug initial shell requested by command line."
fi
+mount $rodev $rodir -t $rofst -o $roopts
+
+if test -x $rodir$fsck
+then
+ for fs in $fslist
+ do
+ mount --bind $fs $rodir/$fs
+ done
+ chroot $rodir $fsck $fsckopts $rwdev
+ rc=$?
+ for fs in $fslist
+ do
+ umount $rodir/$fs
+ done
+ if test $rc -gt 1
+ then
+ debug_takeover "fsck of read-write fs on $rwdev failed (rc=$rc)"
+ fi
+else
+ echo "No '$fsck' in read only fs, skipping fsck."
+fi
+
if ! mount $rwdev $rwdir -t $rwfst -o $rwopts
then
msg="$(cat)" << HERE
@@ -96,11 +120,8 @@
debug_takeover "$msg"
fi
-mount $rodev $rodir -t $rofst -o $roopts
-
rm -rf $work
-mkdir -p $upper
-mkdir -p $work
+mkdir -p $upper $work
mount -t overlay -o lowerdir=$rodir,upperdir=$upper,workdir=$work cow /root