summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-02-20 00:33:38 +0000
committerRoy Marples <roy@marples.name>2008-02-20 00:33:38 +0000
commit5ddd32c06c6bd43aaf701193822d678f742c5e5a (patch)
treead2a234f7f6c946efc0abbea232143e1a4ab66ac
parent7dec6f40250dfa9196e9139173e8ecb8387b85d5 (diff)
downloadopenrc-5ddd32c06c6bd43aaf701193822d678f742c5e5a.tar.gz
openrc-5ddd32c06c6bd43aaf701193822d678f742c5e5a.tar.bz2
openrc-5ddd32c06c6bd43aaf701193822d678f742c5e5a.tar.xz
Allow fsck to be multiplexed.
-rw-r--r--conf.d/fsck13
-rw-r--r--init.d/fsck28
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;;