home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / etc / init.d / checkfs.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  2006-08-23  |  2.7 KB  |  124 lines

  1. #! /bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides:          checkfs
  4. # Required-Start:    modutils checkroot
  5. # Required-Stop:
  6. # Should-Start:      lvm cryptdisks
  7. # Should-Stop:
  8. # Default-Start:     S
  9. # Default-Stop:
  10. # Short-Description: Check all filesystems.
  11. ### END INIT INFO
  12.  
  13. PATH=/sbin:/bin
  14. FSCK_LOGFILE=/var/log/fsck/checkfs
  15. [ "$FSCKFIX" ] || FSCKFIX=no
  16. . /lib/init/vars.sh
  17.  
  18. . /lib/lsb/init-functions
  19.  
  20. do_start () {
  21.     # See if we're on AC Power
  22.     # If not, we're not gonna run our check
  23.     if which on_ac_power >/dev/null 2>&1
  24.     then
  25.         on_ac_power >/dev/null 2>&1
  26.         if [ $? -eq 1 ]
  27.         then
  28.             [ "$VERBOSE" = no ] || log_success_msg "Running on battery power, so skipping file system check."
  29.             BAT=yes
  30.         fi
  31.     fi
  32.  
  33.     #
  34.     # Check the rest of the file systems.
  35.     #
  36.     if [ ! -f /fastboot ] && [ ! "$BAT" ] && [ "$FSCKTYPES" != "none" ]
  37.     then
  38.         if [ -f /forcefsck ]
  39.         then
  40.             force="-f"
  41.         else
  42.             force=""
  43.         fi
  44.         if [ "$FSCKFIX" = yes ]
  45.         then
  46.             fix="-y"
  47.         else
  48.             fix="-a"
  49.         fi
  50.         spinner="-C"
  51.         case "$TERM" in
  52.           dumb|network|unknown|"")
  53.             spinner=""
  54.             ;;
  55.         esac
  56.         [ "$(uname -m)" = s390 ] && spinner=""  # This should go away
  57.         FSCKTYPES_OPT=""
  58.         [ "$FSCKTYPES" ] && FSCKTYPES_OPT="-t $FSCKTYPES"
  59.         handle_failed_fsck() {
  60.             log_failure_msg "File system check failed. 
  61. A log is being saved in ${FSCK_LOGFILE} if that location is writable. 
  62. Please repair the file system manually."
  63.             log_warning_msg "A maintenance shell will now be started. 
  64. CONTROL-D will terminate this shell and resume system boot."
  65.             # Start a single user shell on the console
  66.             if ! sulogin $CONSOLE
  67.             then
  68.                 log_failure_msg "Attempt to start maintenance shell failed. 
  69. Continuing with system boot in 5 seconds."
  70.                 sleep 5
  71.             fi
  72.         }
  73.         if [ "$VERBOSE" = no ]
  74.         then
  75.             log_action_begin_msg "Checking file systems"
  76.             logsave -s $FSCK_LOGFILE fsck $spinner -R -A $fix $force $FSCKTYPES_OPT
  77.             FSCKCODE=$?
  78.             if [ "$FSCKCODE" -gt 1 ]
  79.             then
  80.                 log_action_end_msg 1 "code $FSCKCODE"
  81.                 handle_failed_fsck
  82.             else
  83.                 log_action_end_msg 0
  84.             fi
  85.         else
  86.             if [ "$FSCKTYPES" ]
  87.             then
  88.                 log_action_msg "Will now check all file systems of types $FSCKTYPES"
  89.             else
  90.                 log_action_msg "Will now check all file systems"
  91.             fi
  92.             logsave -s $FSCK_LOGFILE fsck $spinner -V -R -A $fix $force $FSCKTYPES_OPT
  93.             FSCKCODE=$?
  94.             if [ "$FSCKCODE" -gt 1 ]
  95.             then
  96.                 handle_failed_fsck
  97.             else
  98.                 log_success_msg "Done checking file systems. 
  99. A log is being saved in ${FSCK_LOGFILE} if that location is writable."
  100.             fi
  101.         fi
  102.     fi
  103.     rm -f /fastboot /forcefsck
  104. }
  105.  
  106. case "$1" in
  107.   start|"")
  108.     do_start
  109.     ;;
  110.   restart|reload|force-reload)
  111.     echo "Error: argument '$1' not supported" >&2
  112.     exit 3
  113.     ;;
  114.   stop)
  115.     # No-op
  116.     ;;
  117.   *)
  118.     echo "Usage: checkfs.sh [start|stop]" >&2
  119.     exit 3
  120.     ;;
  121. esac
  122.  
  123. :
  124.