D.9. /etc/rc.d/init.d/checkfs

#!/bin/sh
########################################################################
# Begin checkfs
#
# Description : File System Check
#
# Authors     : Gerard Beekmans - gerard@linuxfromscratch.org
#               A. Luebke - luebke@users.sourceforge.net
# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS 7.0
#
# Based on checkfs script from LFS-3.1 and earlier.
#
# From man fsck
# 0    - No errors
# 1    - File system errors corrected
# 2    - System should be rebooted
# 4    - File system errors left uncorrected
# 8    - Operational error
# 16   - Usage or syntax error
# 32   - Fsck canceled by user request
# 128  - Shared library error
#
#########################################################################

### BEGIN INIT INFO
# Provides:            checkfs
# Required-Start:      udev swap $time
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:       S
# Default-Stop:
# Short-Description:   Checks local filesystems before mounting.
# Description:         Checks local filesystmes before mounting.
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/boot/functions

case "${1}" in
   start)
      if [ -f /fastboot ]; then
         boot_mesg -n "/fastboot found, will not perform" ${INFO}
         boot_mesg " file system checks as requested."
         echo_ok
         exit 0
      fi

      boot_mesg "Mounting root file system in read-only mode..."
      mount -n -o remount,ro / >/dev/null
      evaluate_retval

      if [ ${?} != 0 ]; then
         echo_failure
         boot_mesg -n "FAILURE:\n\nCannot check root" ${FAILURE}
         boot_mesg -n " filesystem because it could not be mounted"
         boot_mesg -n " in read-only mode.\n\nAfter you"
         boot_mesg -n " press Enter, this system will be"
         boot_mesg -n " halted and powered off."
         boot_mesg -n "\n\nPress enter to continue..." ${INFO}
         boot_mesg "" ${NORMAL}
         wait_for_user
         /etc/rc.d/init.d/halt stop
      fi

      if [ -f /forcefsck ]; then
         boot_mesg -n "/forcefsck found, forcing file" ${INFO}
         boot_mesg " system checks as requested."
         echo_ok
         options="-f"
      else
         options=""
      fi

      boot_mesg "Checking file systems..."
      # Note: -a option used to be -p; but this fails e.g.
      # on fsck.minix
      fsck ${options} -a -A -C -T
      error_value=${?}

      if [ "${error_value}" = 0 ]; then
         echo_ok
      fi

      if [ "${error_value}" = 1 ]; then
         echo_warning
         boot_mesg -n "WARNING:\n\nFile system errors" ${WARNING}
         boot_mesg -n " were found and have been corrected. "
         boot_mesg -n " You may want to double-check that"
         boot_mesg -n " everything was fixed properly."
         boot_mesg "" ${NORMAL}
      fi

      if [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then
         echo_warning
         boot_mesg -n "WARNING:\n\nFile system errors" ${WARNING}
         boot_mesg -n " were found and have been been"
         boot_mesg -n " corrected, but the nature of the"
         boot_mesg -n " errors require this system to be"
         boot_mesg -n " rebooted.\n\nAfter you press enter,"
         boot_mesg -n " this system will be rebooted"
         boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
         boot_mesg "" ${NORMAL}
         wait_for_user
         reboot -f
      fi

      if [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
         echo_failure
         boot_mesg -n "FAILURE:\n\nFile system errors" ${FAILURE}
         boot_mesg -n " were encountered that could not be"
         boot_mesg -n " fixed automatically.  This system"
         boot_mesg -n " cannot continue to boot and will"
         boot_mesg -n " therefore be halted until those"
         boot_mesg -n " errors are fixed manually by a"
         boot_mesg -n " System Administrator.\n\nAfter you"
         boot_mesg -n " press Enter, this system will be"
         boot_mesg -n " halted and powered off."
         boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
         boot_mesg "" ${NORMAL}
         wait_for_user
        /etc/rc.d/init.d/halt stop
      fi

      if [ "${error_value}" -ge 16 ]; then
         echo_failure
         boot_mesg -n "FAILURE:\n\nUnexpected Failure" ${FAILURE}
         boot_mesg -n " running fsck.  Exited with error"
         boot_mesg -n " code: ${error_value}."
         boot_mesg "" ${NORMAL}
         exit ${error_value}
      fi
      ;;
   *)
      echo "Usage: ${0} {start}"
      exit 1
      ;;
esac

# End checkfs