#!/sbin/runscript # Copyright 2007-2008 Roy Marples # All rights reserved. Released under the 2-clause BSD license. description="Check filesystems according to /etc/fstab for errors and \ optionally repair them." # Hard return to parse fstabinfo output _IFS=" " depend() { need checkroot after modules keywords notimeout } do_checkfs() { local retval=0 opts= [ "${RC_UNAME}" = "Linux" ] && opts="-C0 -T" ebegin "Checking all filesystems" # Load our partitions into $@ local IFS="$_IFS" set -- $(fstabinfo --passno ">1") unset IFS if [ $# = 0 ]; then eend 0 return 0 fi fsck -p ${opts} "$@" retval=$? if [ ${retval} -eq 0 ]; then eend 0 elif [ ${retval} -eq 1 ]; then ewend 1 "Filesystem errors corrected." retval=0 elif [ ${retval} -eq 2 ]; then ewend 1 "System should be rebooted" elif [ ${retval} -eq 8 ]; then ewend 1 "Operational error, continuing" retval=0 else if yesno ${rc_force_auto:-${RC_FORCE_AUTO}}; then eend 2 "Fsck could not correct all errors, rerunning" fsck -y ${opts} "$@" retval=$? eend ${retval} fi if [ ${retval} -gt 3 ]; then eend 2 "Fsck could not correct all errors, manual repair needed" exec rc-abort || exit 1 fi fi return ${retval} } start() { do_checkfs } stop() { # fsck on shutdown if we need to if yesno "${fsck_shutdown:-${FSCK_SHUTDOWN}}"; then do_checkfs fi return 0 }