home *** CD-ROM | disk | FTP | other *** search
/ tusportal.tus.k12.pa.us / tusportal.tus.k12.pa.us.tar / tusportal.tus.k12.pa.us / Wyse / latest-image.raw / 0.img / etc / init.d / boot.rootfsck < prev    next >
Text File  |  2010-05-05  |  6KB  |  202 lines

  1. #! /bin/sh
  2. #
  3. # Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany.
  4. # All rights reserved.
  5. #
  6. # /etc/init.d/boot.rootfsck
  7. #
  8. ### BEGIN INIT INFO
  9. # Provides:          boot.rootfsck
  10. # Required-Start:    boot.udev
  11. # Required-Stop:     $null
  12. # Default-Start:     B
  13. # Default-Stop:
  14. # Short-Description: check and mount root filesystem
  15. # Description:       check and mount root filesystem
  16. ### END INIT INFO
  17.  
  18. . /etc/rc.status
  19.  
  20. # to get max number of parallel fsck processes
  21. . /etc/sysconfig/boot
  22.  
  23. export FSCK_MAX_INST
  24.  
  25. rc_reset
  26.  
  27. case "$1" in
  28.   start)
  29.     #
  30.     # fsck may need a huge amount of memory, so make sure, it is there.
  31.     #
  32.     echo "Activating swap-devices in /etc/fstab..."
  33.     swapon -ae &> /dev/null
  34.     rc_status -v1 -r
  35.     
  36.     if rc_readonlyroot && test -z "$ROOTFS_FSCK" ; then
  37.         echo "Skipping fsck of read-only root filesystem."
  38.         # Pretend that the initrd already did a root filesystem check to skip the
  39.         # filesystem check we would do below.
  40.         ROOTFS_FSCK=0
  41.     fi
  42.  
  43.     #
  44.     # do fsck and start sulogin, if it fails.
  45.     #
  46.     FSCK_RETURN=0
  47.     MAY_FSCK=1
  48.  
  49.     # we may get ROOTFS_BLKDEV passed from initrd, skip extra actions
  50.     if [ -n "$ROOTFS_BLKDEV" ]  ; then
  51.         if [ -n "$ROOTFS_REALDEV" ]  ; then
  52.         ROOTFS_BLKDEV=$ROOTFS_REALDEV
  53.         fi
  54.     else
  55.         # if not booted via initrd, /dev is empty.
  56.         # use private devnode with proper permissions
  57.         ROOTFS_BLKDEV="/dev/shm/root"
  58.         rootcpio=`echo / | /bin/cpio --quiet -o -H newc`
  59.         rootmajor=0x${rootcpio:62:8}
  60.         rootminor=0x${rootcpio:70:8}
  61.         if [ $((rootmajor)) -ne 0 ] ; then
  62.             echo /bin/mknod -m600 $ROOTFS_BLKDEV b $((rootmajor)) $((rootminor))
  63.             /bin/mknod -m600 $ROOTFS_BLKDEV b $((rootmajor)) $((rootminor))
  64.         fi
  65.         fi
  66.     # common options for file system check
  67.     FSCK_OPTS="-a"
  68.     if test -f /forcefsck -o "$DO_FORCEFSCK" = "yes" ; then
  69.         # force file system check if forced is specified
  70.         FSCK_OPTS="$FSCK_OPTS -f"
  71.         ROOTFS_FSCK=""
  72.         fi
  73.     if test "$ROOTFS_FSCK" = "0" ; then
  74.         # already checked and ok, skip the rest
  75.             MAY_FSCK=0
  76.         else
  77.         ROOTFS_TYPE=`stat -f -c "%T" /`
  78.         case $ROOTFS_TYPE in
  79.         aufs|tmpfs|afs|cifs|nfs|novell|smb|UNKNOWN*) MAY_FSCK=0 ;;
  80.         *)
  81.             if test -x /usr/bin/on_ac_power ; then
  82.             # skip fsck if running on battery
  83.             /usr/bin/on_ac_power -q || MAY_FSCK=0
  84.             fi
  85.         ;;
  86.         esac
  87.         fi
  88.  
  89.     if test ! -f /fastboot -a "$DO_FASTBOOT" != "yes" -a $MAY_FSCK -eq 1 ; then
  90.         # If we use a serial console, don't use the fsck progress bar
  91.         if test "${REDIRECT##*/}" = "tty1" ; then
  92.                 FSCK_OPTS="$FSCK_OPTS -C"
  93.         else
  94.                 FSCK_OPTS="$FSCK_OPTS -V"
  95.         fi
  96.         # on an umsdos root fs this mount will fail,
  97.         # so direct error messages to /dev/null.
  98.         # this seems to be ugly, but should not really be a problem.
  99.         mount -n -o remount,ro / 2> /dev/null
  100.         if test $? = 0; then
  101.         if test -n "$ROOTFS_FSCK" ; then
  102.             # When the initrd checks the root filesystem, it stores the
  103.             # fsck exit status in ROOTFS_FSCK.
  104.             FSCK_RETURN=$ROOTFS_FSCK
  105.         else
  106.             echo "Checking root file system..."
  107.             fsck $FSCK_OPTS $ROOTFS_BLKDEV
  108.             # A return code of 1 indicates that file system errors
  109.             # were corrected, but that the boot may proceed.
  110.             # A return code of 2 or larger indicates failure.
  111.             FSCK_RETURN=$?
  112.         fi
  113.         test $FSCK_RETURN -lt 4
  114.         rc_status -v1 -r
  115.         if test $FSCK_RETURN -gt 1 -a $FSCK_RETURN -lt 4 ; then
  116.             # if appropriate, switch bootsplash to verbose 
  117.             # mode to make text messages visible.
  118.             test -f /proc/splash && echo "verbose" > /proc/splash
  119.             echo
  120.             echo "fsck succeed, but reboot is required."
  121.             echo
  122.             sleep 1
  123.             sync
  124.             reboot -f
  125.         elif test $FSCK_RETURN -gt 3; then
  126.             # if appropriate, switch bootsplash to verbose 
  127.             # mode to make text messages visible.
  128.             test -f /proc/splash && echo "verbose" > /proc/splash
  129.             # Stop blogd since we reboot after sulogin
  130.             test -x /sbin/blogd && killproc -QUIT /sbin/blogd
  131.             if test -x /etc/init.d/kbd ; then
  132.             /etc/init.d/kbd start
  133.             fi
  134.                 echo
  135.                 echo "fsck failed.  Please repair manually and reboot. The root"
  136.                 echo "file system is currently mounted read-only. To remount it"
  137.                 echo "read-write do:"
  138.                 echo
  139.                 echo "   bash# mount -n -o remount,rw /"
  140.                 echo
  141.                 echo "Attention: Only CONTROL-D will reboot the system in this"
  142.                 echo "maintanance mode. shutdown or reboot will not work."
  143.                 echo
  144.                 PS1="(repair filesystem) # "
  145.                 export PS1
  146.                 /sbin/sulogin /dev/console
  147.  
  148.                 # if the user has mounted something rw, this should be umounted
  149.                 echo "Unmounting file systems (ignore error messages)"
  150.                 umount -avn
  151.  
  152.                 # on umsdos fs this would lead to an error message.
  153.             # so direct errors to /dev/null
  154.                 mount -no remount,ro / 2> /dev/null
  155.  
  156.                 sync
  157.                 reboot -f
  158.             fi
  159.             sync
  160.             mount -n -o remount,rw /
  161.         test $FSCK_RETURN -gt 0 && > /fsck_corrected_errors
  162.         else
  163.         echo
  164.         echo '*** ERROR!  Cannot fsck because root is not read-only!'
  165.         echo
  166.         fi
  167.     else
  168.         if test "$ROOTFS_FSCK" != "0" ; then
  169.         echo "root file system (/) is NOT being checked."
  170.         fi
  171.     fi
  172.  
  173.     # If /etc is not writable, mount currently requires that /etc/mtab is a
  174.     # symlink.  (Else, it will try to create /etc/mtab.$PID and /etc/mtab~.)
  175.     if test ! -L /etc/mtab ; then
  176.         # start with a clean mtab and enter root fs entry
  177.         rm -f /etc/mtab*
  178.         > /etc/mtab
  179.         mount -f /
  180.     fi
  181.     ;;
  182.     stop)
  183.     ;;
  184.     restart)
  185.     rc_failed 3
  186.     rc_status -v
  187.     ;;
  188.     status)
  189.     echo -n "Checking if boot.rootfsck has run"
  190.     rc_reset
  191.     grep -q " / " /etc/mtab || rc_failed 3
  192.     rc_status -v
  193.     ;;
  194.     *)
  195.     echo "Usage: $0 {start|stop|status|restart}"
  196.     exit 1
  197.     ;;
  198. esac
  199.  
  200. rc_exit
  201.  
  202.