home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / etc / init.d / checkroot.sh < prev    next >
Text File  |  1999-01-12  |  3KB  |  122 lines

  1. #
  2. # checkroot.sh    Check to root file system.
  3. #
  4. # Version:    @(#)checkroot.sh  2.76  12-Jan-1999  miquels@cistron.nl
  5. #
  6.  
  7. . /etc/default/rcS
  8.  
  9. #
  10. # Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
  11. # from this script *before anything else* with a timeout, like SCO does.
  12. #
  13. [ "$SULOGIN" = yes ] && sulogin -t 30 $CONSOLE
  14.  
  15. #
  16. # Activate the swap device(s) in /etc/fstab. This needs to be done
  17. # before fsck, since fsck can be quite memory-hungry.
  18. #
  19. if [ -x /sbin/swapon ]
  20. then
  21.   [ "$VERBOSE" != no ] && echo "Activating swap..."
  22.   swapon -a 2>/dev/null
  23. fi
  24.  
  25. #
  26. # Ensure that bdflush (update) is running before any major I/O is
  27. # performed (the following fsck is a good example of such activity :).
  28. #
  29. [ -x /sbin/update ] && update
  30.  
  31. #
  32. # Check the root file system.
  33. #
  34. if [ -f /fastboot ]
  35. then
  36.   echo "Fast boot, no file system check"
  37. else
  38.   #
  39.   # Ensure that root is quiescent and read-only before fsck'ing.
  40.   #
  41.   mount -n -o remount,ro /
  42.   if [ $? = 0 ]
  43.   then
  44.     if [ -f /forcefsck ]
  45.     then
  46.     force="-f"
  47.     else
  48.     force=""
  49.     fi
  50.     if [ "$FSCKFIX" = yes ]
  51.     then
  52.     fix="-y"
  53.     else
  54.     fix="-a"
  55.     fi
  56.     echo "Checking root file system..."
  57.     fsck $force $fix /
  58.     #
  59.     # If there was a failure, drop into single-user mode.
  60.     #
  61.     # NOTE: "failure" is defined as exiting with a return code of
  62.     # 2 or larger.  A return code of 1 indicates that file system
  63.     # errors were corrected but that the boot may proceed.
  64.     #
  65.     if [ $? -gt 1 ]
  66.     then
  67.       # Surprise! Re-directing from a HERE document (as in
  68.       # "cat << EOF") won't work, because the root is read-only.
  69.       echo
  70.       echo "fsck failed.  Please repair manually and reboot.  Please note"
  71.       echo "that the root file system is currently mounted read-only.  To"
  72.       echo "remount it read-write:"
  73.       echo
  74.       echo "   # mount -n -o remount,rw /"
  75.       echo
  76.       echo "CONTROL-D will exit from this shell and REBOOT the system."
  77.       echo
  78.       # Start a single user shell on the console
  79.       /sbin/sulogin $CONSOLE
  80.       reboot -f
  81.     fi
  82.   else
  83.     echo "*** ERROR!  Cannot fsck root fs because it is not mounted read-only!"
  84.     echo
  85.   fi
  86. fi
  87.  
  88. #
  89. #    If the root filesystem was not marked as read-only in /etc/fstab,
  90. #    remount the rootfs rw but do not try to change mtab because it
  91. #    is on a ro fs until the remount succeeded. Then clean up old mtabs
  92. #    and finally write the new mtab.
  93. #
  94. (
  95.   mode=rw
  96.   while read fs mnt type opts rest
  97.   do
  98.     [ "$mnt" != / ] && continue
  99.     case "$fs" in
  100.         ""|\#*)
  101.             continue;
  102.             ;;
  103.     esac
  104.     case "$opts" in
  105.         ro|ro,*|*,ro|*,ro,*)
  106.             mode=ro
  107.             ;;
  108.     esac
  109.   done
  110.   mount -n -o remount,$mode /
  111.   if [ "$mode" = rw ]
  112.   then
  113.     rm -f /etc/mtab~ /etc/nologin
  114.     : > /etc/mtab
  115.     mount -o remount,rw /
  116.     mount /proc
  117.   else
  118.     mount -n /proc
  119.   fi
  120. ) < /etc/fstab
  121.  
  122.