openafs/src/vfsck/bcheckrc
2000-11-04 10:01:08 +00:00

151 lines
4.0 KiB
Bash

#!/sbin/sh
# Copyright 2000, International Business Machines Corporation and others.
# All Rights Reserved.
#
# This software has been released under the terms of the IBM Public
# License. For details, see the LICENSE file in the top-level source
# directory or online at http://www.openafs.org/dl/license10.html
# @(#) $Revision$
#
##################################################################
#
# Name :
# bcheckrc (afs) - /sbin/fs/afs/bcheckrc
#
# Description
# This file contains scripts/commands necessary to checks
# the afs file systems before mounting.
#
# It should be invoked by the generic bcheckrc script only.
#
# Input Parameters:
# None
#
# Expected results:
# see description.
#
# Side effects of this test:
# none
#
# Supporting files and Relationship:
# i) various "/sbin/fs/afs" commands are used by this script.
# ii) generic bcheckrc scrtipt located in the /sbin
# directory invokes this script.
#
#
##################################################################
#
#
# Description - This function will check (fsck) all the afs file systems
# in the static file system table, /etc/fstab.
#
# Result values - status = 0 for success
# status = non-0 for failure
#
# Used (exclusively) by - /sbin/bcheckrc's fsck_afs portion
#
#
# ROOTSHELL - is the command that gives the user a shell in which
# to run fsck interactively. Someday fsck -y should
# be fixed to give the right answers to the questions,
# rather than always "yes", so this error-prone
# interactive fixing business can go away entirely.
#
ROOTSHELL='/sbin/sh'
# set stty (for manual mode)
/sbin/stty clocal icanon echo opost onlcr ixon icrnl ignpar erase "^h"
#
# In the remaining part of the function is devoted to the actual
# cleaning of the afs file systems.
#
# 1) run fsck -m and determine if any afs file systems
# need cleaning.
#
# 2) check exit status of fsck -m -
#
# 0 - indicates (and lists) that this afs file
# system was verified clean. Continues to
# boot.
#
# * - indicates and lists the file systems that
# were not properly shutdown. File systems
# that are corrupt should be fixed before
# continuing with the boot.
#
#
# 3) exit the function with the appropriate return status.
#
#
# When the file systems are corrupt the following steps are
# taken ...
#
# 1) fsck_afs(1M) command is invoked using the
# following command line - "/sbin/fsck -F afs -P -f"
# (refer to the fsck_afs(1M) man page)
#
# 2) The following actions are taken according to
# the appropriate return values ...
# 0 - the corrupt file system was fixed.
# Continue with boot'ing.
# * - could not automatically fix the
# corrupt file system, going into
# manual mode (shell).
afs_partitions_clean()
{
serverPartition=0 # number of AFS server partitions
for name in `/sbin/awk ' $0 ~ /^[ \t]*#/ { next }
$3 == "afs" { print $1 }' /etc/fstab`
do
/sbin/fs/hfs/fsck -m -P $name # check sanity
if [ $? -ne 0 ]
then
echo Cleaning AFS server partition $name
/sbin/fs/afs/fsck -P -f $name
case $? in
0)
echo AFS server partition $name is fixed
;;
*)
echo "\007\n\n"
echo "UNEXPECTED ERROR DURING fsck -P, RUN fsck INTERACT
IVELY!"
echo "LOGGING IN AS root FOR MANUAL fsck, ENTER ^D WHEN
FILE SYSTEM FIXED"
PS1="(in bcheckrc)# "
export PS1
$ROOTSHELL
echo "CONTINUING bcheckrc"
;;
esac
fi
serverPartition=1
done
if [ serverPartition -ne 1 ]
then
echo "NO AFS server partitions found"
fi
exit 0
}
afs_partitions_clean
#*********************************************************************
# End of bcheckrc (afs)
#*********************************************************************