From cc877f503d372de20d9e85efaa22132d427bc99a Mon Sep 17 00:00:00 2001 From: Vladimir Saveliev Date: Tue, 11 May 2010 10:40:46 +0400 Subject: [PATCH] b=13698 allow e2fsck part of lfsck.sh to be run without lfsck this combines initial patch from Andreas (https://bugzilla.lustre.org/attachment.cgi?id=29696) and several necessary fixes (https://bugzilla.lustre.org/attachment.cgi?id=29747) i=adilger --- lustre/tests/acceptance-small.sh | 1 - lustre/tests/lfsck.sh | 71 ++++++++++++++++++++++------------------ lustre/tests/test-framework.sh | 1 + 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/lustre/tests/acceptance-small.sh b/lustre/tests/acceptance-small.sh index b31dded..2a52d82 100755 --- a/lustre/tests/acceptance-small.sh +++ b/lustre/tests/acceptance-small.sh @@ -42,7 +42,6 @@ if [ "$ACC_SM_ONLY" ]; then export ${O}="yes" done fi -LFSCK="no" # bug 13698 STARTTIME=`date +%s` diff --git a/lustre/tests/lfsck.sh b/lustre/tests/lfsck.sh index 2e48bad..784d253 100644 --- a/lustre/tests/lfsck.sh +++ b/lustre/tests/lfsck.sh @@ -29,17 +29,24 @@ init_logging require_dsh_mds || exit 0 require_dsh_ost || exit 0 -if [ ! -x /usr/sbin/lfsck ]; then - log "$($E2FSCK -V)" - log "SKIP: $E2FSCK does not support lfsck" - exit 0 +SKIP_LFSCK=${SKIP_LFSCK:-"yes"} # bug 13698, change to "no" when fixed + +if [ "$SKIP_LFSCK" == "no" ]; then + if [ ! -x /usr/sbin/lfsck ]; then + log "$($E2FSCK -V)" + log "SKIP: $E2FSCK does not support lfsck" + exit 0 + fi + + MDSDB_OPT="--mdsdb $MDSDB" + OSTDB_OPT="--ostdb $OSTDB-\$ostidx" fi # if nothing mounted, don't nuke MOUNT variable needed in llmount.sh WAS_MOUNTED=$(mounted_lustre_filesystems | head -1) if [ -z "$WAS_MOUNTED" ]; then # This code doesn't handle multiple mounts well, so nuke MOUNT2 variable - MOUNT2="" sh llmount.sh + MOUNT2="" MOUNT_2="" check_and_setup_lustre MOUNT=$(mounted_lustre_filesystems) [ -z "$MOUNT" ] && echo "NAME=$NAME not mounted" && exit 2 else @@ -64,7 +71,9 @@ get_mnt_devs() { done } -if [ "$LFSCK_SETUP" != "no" ]; then +MDSDEV=$(mdsdevname 1) + +if [ "$LFSCK_SETUP" != "no" -a "$SKIP_LFSCK" == "no" ]; then #Create test directory # -- can't remove the mountpoint... [ -z "$DIR" ] && rm -rf $DIR/* @@ -178,36 +187,34 @@ else OSTCOUNT=`echo $OSTDEVS | wc -w` fi # LFSCK_SETUP -# Run e2fsck to get mds and ost info -# a return status of 1 indicates e2fsck successfuly fixed problems found -set +e - -echo "$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV" +echo "$E2FSCK -d -v -fn $MDSDB_OPT $MDSDEV" df > /dev/null # update statfs data on disk -$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV -RET=$? +RET=0 +$E2FSCK -d -v -fn $MDSDB_OPT $MDSDEV || RET=$? [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 90 || true export OSTDB_LIST="" -i=0 +ostidx=0 for OSTDEV in $OSTDEVS; do df > /dev/null # update statfs data on disk - $E2FSCK -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV - RET=$? + RET=0 + eval $E2FSCK -d -v -fn $MDSDB_OPT $OSTDB_OPT $OSTDEV || RET=$? [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 100 - OSTDB_LIST="$OSTDB_LIST $OSTDB-$i" - i=$((i + 1)) + OSTDB_LIST="$OSTDB_LIST $OSTDB-$ostidx" + ostidx=$((ostidx + 1)) done +[ "$SKIP_LFSCK" != "no" ] && exit 0 + #Remount filesystem [ "`mount | grep $MOUNT`" ] || $SETUP # need to turn off shell error detection to get proper error return # lfsck will return 1 if the filesystem had errors fixed echo "LFSCK TEST 1" -echo "lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT" -echo y | lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT -RET=$? +echo "lfsck -c -l $MDSDB_OPT --ostdb $OSTDB_LIST $MOUNT" +RET=0 +echo y | lfsck -c -l $MDSDB_OPT --ostdb $OSTDB_LIST $MOUNT || RET=$? [ $RET -eq 0 ] && echo "clean after first check" && exit 0 echo "LFSCK TEST 1 - finished with rc=$RET" [ $RET -gt $MAX_ERR ] && exit 110 || true @@ -216,27 +223,27 @@ echo "LFSCK TEST 1 - finished with rc=$RET" sync; sleep 2; sync echo "LFSCK TEST 2" -echo "$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV" +echo "$E2FSCK -d -v -fn $MDSDB_OPT $MDSDEV" df > /dev/null # update statfs data on disk -$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV -RET=$? +RET=0 +$E2FSCK -d -v -fn $MDSDB_OPT $MDSDEV || RET=$? [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 123 || true -i=0 +ostidx=0 export OSTDB_LIST="" for OSTDEV in $OSTDEVS; do df > /dev/null # update statfs data on disk - $E2FSCK -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV - RET=$? + RET=0 + eval $E2FSCK -d -v -fn $MDSDB_OPT $OSTDB_OPT $OSTDEV || RET=$? [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 124 - OSTDB_LIST="$OSTDB_LIST $OSTDB-$i" - i=$((i + 1)) + OSTDB_LIST="$OSTDB_LIST $OSTDB-$ostidx" + ostidx=$((ostidx + 1)) done echo "LFSCK TEST 2" -echo "lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT" -lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT -RET=$? +echo "lfsck -c -l $MDSDB_OPT --ostdb $OSTDB_LIST $MOUNT" +RET=0 +lfsck -c -l $MDSDB_OPT --ostdb $OSTDB_LIST $MOUNT || RET=$? echo "LFSCK TEST 2 - finished with rc=$RET" [ $RET -ne 0 ] && exit 125 || true if [ -z "$WAS_MOUNTED" ]; then diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 82d9c90..f41aa76 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -2035,6 +2035,7 @@ check_timeout () { is_mounted () { local mntpt=$1 + [ -z $mntpt ] && return 1 local mounted=$(mounted_lustre_filesystems) echo $mounted' ' | grep -w -q $mntpt' ' -- 1.8.3.1