# # checkroot.sh Check to root filesystem. # # Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels@cistron.nl # ROOTDEV=/dev/mmcblk0p2 if [ ! -b $ROOTDEV ]; then echo "$ROOTDEV not found or not a device file" exit 0 fi ROOTTYPE_AUTO=ext3 # Shortcut to do nothing (workaround for NOV-10897) # (but only if the rootfs is already rw, as per kernel cmdline) # (qemu still needs checkroot.sh to remount root as rw) if grep -qs rw /proc/cmdline ; then # rootfs already rw as per kernel cmdline; skip checkroot exit 0 fi # rw NOT detected in kernel cmdline # Run checkroot to remount rootfs rw... . /etc/default/rcS # # Read /etc/fstab. # exec 9>&0 &9 9>&- # # Check the root filesystem. # if test -f /fastboot || test $rootcheck = no then test $rootcheck = yes && echo "Fast boot, no filesystem check" else # # Ensure that root is quiescent and read-only before fsck'ing. # mount -n -o remount,ro / if test $? = 0 then if test -f /forcefsck then force="-f" else force="" fi if test "$FSCKFIX" = yes then fix="-y" else fix="-a" # mapped to -p for ext2 fi spinner="-C" case "$TERM" in dumb|network|unknown|"") spinner="" ;; esac test `uname -m` = s390 && spinner="" # This should go away test "$VERBOSE" != no && echo "Checking root filesystem..." fsck $spinner $force $fix $ROOTDEV RTC=$? # # If there was a failure, drop into single-user mode. # # NOTE: "failure" is defined as exiting with a return code of # 2 or larger. A return code of 1 indicates that filesystem # errors were corrected but that the boot may proceed. # echo "RETURNCODE: [$RTC]" if test "$RTC" -gt 3 then # Since this script is run very early in the boot-process, it should be safe to assume that the # output is printed to VT1. However, some distributions use a bootsplash to hide the "ugly" boot # messages and having the bootsplash "hang" due to a waiting fsck prompt is less than ideal chvt 1 # Surprise! Re-directing from a HERE document (as in # "cat << EOF") won't work, because the root is read-only. echo echo "fsck failed. Please repair manually and reboot. " echo "Please note that the root filesystem is currently " echo "mounted read-only. To remount it read-write:" echo echo " # mount -n -o remount,rw /" echo echo "CONTROL-D will exit from this shell" echo "and REBOOT the system." echo # Start a single user shell on the console test -x /sbin/sulogin && /sbin/sulogin $CONSOLE reboot -f fi else echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!" echo fi fi # # If the root filesystem was not marked as read-only in /etc/fstab, # remount the rootfs rw but do not try to change mtab because it # is on a ro fs until the remount succeeded. Then clean up old mtabs # and finally write the new mtab. # This part is only needed if the rootfs was mounted ro. # ROOTFSDEV="/dev/root" if ! grep -q "^$ROOTFSDEV " /proc/mounts; then ROOTFSDEV="rootfs" fi if [ $(grep "^$ROOTFSDEV .*static" /proc/mounts | awk '{print $4}' | sed 's/,.*$//') = rw ]; then echo "Root filesystem already read-write, not remounting" exit 0 fi echo "Remounting root file system..." mount -n -o remount,$rootmode / if test "$rootmode" = rw then if test ! -L /etc/mtab then rm -f /etc/mtab~ /etc/nologin : > /etc/mtab fi mount -f -o remount / mount -f /proc test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs" fi : exit 0