home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- ### BEGIN INIT INFO
- # Provides: checkfs
- # Required-Start: modutils checkroot
- # Required-Stop:
- # Should-Start: lvm cryptdisks
- # Should-Stop:
- # Default-Start: S
- # Default-Stop:
- # Short-Description: Check all filesystems.
- ### END INIT INFO
-
- PATH=/sbin:/bin
- FSCK_LOGFILE=/var/log/fsck/checkfs
- [ "$FSCKFIX" ] || FSCKFIX=no
- . /lib/init/vars.sh
-
- . /lib/lsb/init-functions
-
- # Always output fsck progress
- stdin=`readlink /proc/self/fd/0`
- if [ "${stdin#/dev/null}" != "$stdin" ]; then
- exec </dev/console >/dev/console 2>&1
- fi
-
- do_start () {
- # See if we're on AC Power
- # If not, we're not gonna run our check
- if which on_ac_power >/dev/null 2>&1
- then
- on_ac_power >/dev/null 2>&1
- if [ $? -eq 1 ]
- then
- [ "$VERBOSE" = no ] || log_success_msg "Running on battery power, so skipping file system check."
- BAT=yes
- fi
- fi
-
- #
- # Check the rest of the file systems.
- #
- if [ ! -f /fastboot ] && [ ! "$BAT" ] && [ "$FSCKTYPES" != "none" ]
- then
- if [ -f /forcefsck ]
- then
- force="-f"
- else
- force=""
- fi
- if [ "$FSCKFIX" = yes ]
- then
- fix="-y"
- else
- fix="-a"
- fi
- spinner="-C"
- case "$TERM" in
- dumb|network|unknown|"")
- spinner=""
- ;;
- esac
- [ "$(uname -m)" = s390 ] && spinner="" # This should go away
- FSCKTYPES_OPT=""
- [ "$FSCKTYPES" ] && FSCKTYPES_OPT="-t $FSCKTYPES"
- handle_failed_fsck() {
- log_failure_msg "File system check failed.
- A log is being saved in ${FSCK_LOGFILE} if that location is writable.
- Please repair the file system manually."
- log_warning_msg "A maintenance shell will now be started.
- CONTROL-D will terminate this shell and resume system boot."
- # Start a single user shell on the console
- if ! sulogin $CONSOLE
- then
- log_failure_msg "Attempt to start maintenance shell failed.
- Continuing with system boot in 5 seconds."
- sleep 5
- fi
- }
- if [ "$VERBOSE" = no ]
- then
- log_action_begin_msg "Checking file systems"
- logsave -s $FSCK_LOGFILE fsck $spinner -R -A $fix $force $FSCKTYPES_OPT
- FSCKCODE=$?
- if [ "$FSCKCODE" -gt 1 ]
- then
- log_action_end_msg 1 "code $FSCKCODE"
- handle_failed_fsck
- else
- log_action_end_msg 0
- fi
- else
- if [ "$FSCKTYPES" ]
- then
- log_action_msg "Will now check all file systems of types $FSCKTYPES"
- else
- log_action_msg "Will now check all file systems"
- fi
- logsave -s $FSCK_LOGFILE fsck $spinner -V -R -A $fix $force $FSCKTYPES_OPT
- FSCKCODE=$?
- if [ "$FSCKCODE" -gt 1 ]
- then
- handle_failed_fsck
- else
- log_success_msg "Done checking file systems.
- A log is being saved in ${FSCK_LOGFILE} if that location is writable."
- fi
- fi
- fi
- rm -f /fastboot /forcefsck
- }
-
- case "$1" in
- start|"")
- do_start
- ;;
- restart|reload|force-reload)
- echo "Error: argument '$1' not supported" >&2
- exit 3
- ;;
- stop)
- # No-op
- ;;
- *)
- echo "Usage: checkfs.sh [start|stop]" >&2
- exit 3
- ;;
- esac
-
- :
-