1#!/bin/sh 2### BEGIN INIT INFO 3# Provides: checkroot 4# Required-Start: udev 5# Required-Stop: 6# Default-Start: S 7# Default-Stop: 8# Short-Description: Check to root file system. 9### END INIT INFO 10 11. /etc/default/rcS 12 13# 14# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned 15# from this script *before anything else* with a timeout, like SCO does. 16# 17test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE 18 19# 20# Read /etc/fstab. 21# 22exec 9< /etc/fstab 23rootmode=rw 24rootopts=rw 25rootcheck=$ENABLE_ROOTFS_FSCK 26swap_on_md=no 27devfs= 28while read fs mnt type opts dump pass junk <&9 29do 30 case "$fs" in 31 ""|\#*) 32 continue; 33 ;; 34 /dev/md*) 35 # Swap on md device. 36 test "$type" = swap && swap_on_md=yes 37 ;; 38 /dev/*) 39 ;; 40 *) 41 # Might be a swapfile. 42 test "$type" = swap && swap_on_md=yes 43 ;; 44 esac 45 test "$type" = devfs && devfs="$fs" 46 test "$mnt" != / && continue 47 rootopts="$opts" 48 test "$pass" = 0 -o "$pass" = "" && rootcheck=no 49 case "$opts" in 50 ro|ro,*|*,ro|*,ro,*) 51 rootmode=ro 52 ;; 53 esac 54done 55exec 0>&9 9>&- 56 57# Check for conflicting configurations 58if [ "$rootmode" = "ro" -a "$ROOTFS_READ_ONLY" = "no" ] || \ 59 [ "$rootmode" = "rw" -a "$ROOTFS_READ_ONLY" = "yes" ]; then 60 echo "" 61 echo "WARN: conflicting configurations in /etc/fstab and /etc/default/rcS" 62 echo " regarding the writability of rootfs. Please fix one of them." 63 echo "" 64fi 65 66 67# 68# Activate the swap device(s) in /etc/fstab. This needs to be done 69# before fsck, since fsck can be quite memory-hungry. 70# 71test "$VERBOSE" != no && echo "Activating swap" 72[ -x /sbin/swapon ] && swapon -a 73 74# 75# Check the root filesystem. 76# 77if test -f /fastboot || test $rootcheck = no 78then 79 test $rootcheck = yes && echo "Fast boot, no filesystem check" 80else 81 # 82 # Ensure that root is quiescent and read-only before fsck'ing. 83 # 84 mount -n -o remount,ro / 85 if test $? = 0 86 then 87 if test -f /forcefsck 88 then 89 force="-f" 90 else 91 force="" 92 fi 93 if test "$FSCKFIX" = yes 94 then 95 fix="-y" 96 else 97 fix="-a" 98 fi 99 spinner="-C" 100 case "$TERM" in 101 dumb|network|unknown|"") spinner="" ;; 102 esac 103 test `uname -m` = s390 && spinner="" # This should go away 104 test "$VERBOSE" != no && echo "Checking root filesystem..." 105 fsck $spinner $force $fix / 106 # 107 # If there was a failure, drop into single-user mode. 108 # 109 # NOTE: "failure" is defined as exiting with a return code of 110 # 2 or larger. A return code of 1 indicates that filesystem 111 # errors were corrected but that the boot may proceed. 112 # 113 if test "$?" -gt 1 114 then 115 # Surprise! Re-directing from a HERE document (as in 116 # "cat << EOF") won't work, because the root is read-only. 117 echo 118 echo "fsck failed. Please repair manually and reboot. Please note" 119 echo "that the root filesystem is currently mounted read-only. To" 120 echo "remount it read-write:" 121 echo 122 echo " # mount -n -o remount,rw /" 123 echo 124 echo "CONTROL-D will exit from this shell and REBOOT the system." 125 echo 126 # Start a single user shell on the console 127 /sbin/sulogin $CONSOLE 128 reboot -f 129 fi 130 else 131 echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!" 132 echo 133 fi 134fi 135 136# 137# If the root filesystem was not marked as read-only in /etc/fstab, 138# remount the rootfs rw but do not try to change mtab because it 139# is on a ro fs until the remount succeeded. Then clean up old mtabs 140# and finally write the new mtab. 141# 142mount -n -o remount,$rootmode / 143if test "$rootmode" = rw 144then 145 ln -sf /proc/mounts /dev/mtab 146fi 147 148: exit 0 149