123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #!/bin/sh
- ### BEGIN INIT INFO
- # Provides: checkroot
- # Required-Start: udev
- # Required-Stop:
- # Default-Start: S
- # Default-Stop:
- # Short-Description: Check to root file system.
- ### END INIT INFO
- . /etc/default/rcS
- #
- # Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
- # from this script *before anything else* with a timeout, like SCO does.
- #
- test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
- #
- # Read /etc/fstab.
- #
- exec 9< /etc/fstab
- rootmode=rw
- rootopts=rw
- rootcheck=$ENABLE_ROOTFS_FSCK
- swap_on_md=no
- devfs=
- while read fs mnt type opts dump pass junk <&9
- do
- case "$fs" in
- ""|\#*)
- continue;
- ;;
- /dev/md*)
- # Swap on md device.
- test "$type" = swap && swap_on_md=yes
- ;;
- /dev/*)
- ;;
- *)
- # Might be a swapfile.
- test "$type" = swap && swap_on_md=yes
- ;;
- esac
- test "$type" = devfs && devfs="$fs"
- test "$mnt" != / && continue
- rootopts="$opts"
- test "$pass" = 0 -o "$pass" = "" && rootcheck=no
- case "$opts" in
- ro|ro,*|*,ro|*,ro,*)
- rootmode=ro
- ;;
- esac
- done
- exec 0>&9 9>&-
- # Check for conflicting configurations
- if [ "$rootmode" = "ro" -a "$ROOTFS_READ_ONLY" = "no" ] || \
- [ "$rootmode" = "rw" -a "$ROOTFS_READ_ONLY" = "yes" ]; then
- echo ""
- echo "WARN: conflicting configurations in /etc/fstab and /etc/default/rcS"
- echo " regarding the writability of rootfs. Please fix one of them."
- echo ""
- fi
- #
- # Activate the swap device(s) in /etc/fstab. This needs to be done
- # before fsck, since fsck can be quite memory-hungry.
- #
- test "$VERBOSE" != no && echo "Activating swap"
- [ -x /sbin/swapon ] && swapon -a
- #
- # 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"
- 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 /
- #
- # 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.
- #
- if test "$?" -gt 1
- then
- # 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. Please note"
- echo "that the root filesystem is currently mounted read-only. To"
- echo "remount it read-write:"
- echo
- echo " # mount -n -o remount,rw /"
- echo
- echo "CONTROL-D will exit from this shell and REBOOT the system."
- echo
- # Start a single user shell on the console
- /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.
- #
- mount -n -o remount,$rootmode /
- if test "$rootmode" = rw
- then
- ln -sf /proc/mounts /dev/mtab
- fi
- : exit 0
|