From 5ddd32c06c6bd43aaf701193822d678f742c5e5a Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Wed, 20 Feb 2008 00:33:38 +0000 Subject: Allow fsck to be multiplexed. --- conf.d/fsck | 13 ++++++++++++- init.d/fsck | 28 +++++++++++++++++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/conf.d/fsck b/conf.d/fsck index 540c6f7..77fd658 100644 --- a/conf.d/fsck +++ b/conf.d/fsck @@ -1,6 +1,17 @@ # Pass any arguments to fsck. # By default we preen. -fsck="-p" +# Linux systems also force -C0 and -T. +# If fsck_args is not specified then Linux systems also use -A +# (and -R if / is rw) +#fsck_args="-p" + +# We can also specify the passno in /etc/fstab to check +# If you multiplex fsck (ie ln -s fsck /etc/init.d/fsck.late) then you can +# do an fsck outside of the normal scope, say for /home. +# Here are some exampes:- +#fsck_passno="=1 =2" +#fsck_passno=">1" +#fsck_passno="<2" # fsck_shutdown causes fsck to trigger during shutdown as well as startup. # The end result of this is that if any periodic non-root filesystem checks are diff --git a/init.d/fsck b/init.d/fsck index e899acc..c2816b2 100644 --- a/init.d/fsck +++ b/init.d/fsck @@ -3,6 +3,8 @@ # All rights reserved. Released under the 2-clause BSD license. description="Check and repair filesystems according to /etc/fstab" +_ISF=" +" depend() { @@ -12,20 +14,32 @@ depend() start() { - local reboot_opts= fsck_opts= + local reboot_opts= fsck_opts= p= + + ebegin "Checking local filesystems" + for p in ${fsck_passno}; do + local IFS="${_IFS}" + case "${p}" in + [0-9]*) p="=${p}";; + esac + set -- "$@" "$(fstabinfo --passno "${p}")" + unset IFS + done if [ "${RC_UNAME}" = "Linux" ]; then - fsck_opts="-A -C0 -T" - if echo 2>/dev/null >/.test.$$; then - rm -f /.test.$$ - fsck_opts="${fsck_opts} -R" + fsck_opts="-C0 -T" + if [ -z "${fsck_passno}" ]; then + fsck_args=${fsck_args--A -p} + if echo 2>/dev/null >/.test.$$; then + rm -f /.test.$$ + fsck_opts="-R" + fi fi reboot_opts="-f" fi - ebegin "Checking local filesystems" trap : QUIT - fsck ${fsck_args--p} ${fsck_opts} + fsck ${fsck_args--p} ${fsck_opts} "$@" case $? in 0) eend 0; return 0;; 1) ewend 1 "Filesystems repaired"; return 0;; -- cgit v1.2.3