X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Flfscktest.sh;h=af7d794ba10e094166e69c453988443d07817c7f;hb=498ee35323fcacf829f4e77c91e7700cb3660111;hp=7aaf9643131290b9e50595fc1074c1d6026e1668;hpb=d2d56f38da01001c92a09afc6b52b5acbd9bc13c;p=fs%2Flustre-release.git diff --git a/lustre/tests/lfscktest.sh b/lustre/tests/lfscktest.sh index 7aaf964..af7d794 100755 --- a/lustre/tests/lfscktest.sh +++ b/lustre/tests/lfscktest.sh @@ -15,8 +15,6 @@ GETFATTR=${GETFATTR:-getfattr} SETFATTR=${SETFATTR:-setfattr} MAX_ERR=1 -FSTYPE=${FSTYPE:-ldiskfs} - export PATH=$LFSCK_PATH:`dirname $0`:`dirname $0`/../utils:$PATH [ -z "`which $GETFATTR`" ] && echo "$0: $GETFATTR not found" && exit 5 @@ -27,8 +25,19 @@ LUSTRE=${LUSTRE:-`dirname $0`/..} init_test_env $@ . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} -WAS_MOUNTED=`mount | grep $MOUNT` -[ "$WAS_MOUNTED" ] || $FORMAT && $SETUP +remote_mds && skip "remote MDS" && exit 0 +remote_ost && skip "remote OST" && exit 0 + +# 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 + MOUNT=$(mounted_lustre_filesystems) + [ -z "$MOUNT" ] && echo "NAME=$NAME not mounted" && exit 2 +else + MOUNT=${WAS_MOUNTED} +fi DIR=${DIR:-$MOUNT/$TESTNAME} [ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 3 @@ -39,7 +48,7 @@ if [ "$WAS_MOUNTED" ]; then fi get_mnt_devs() { - DEVS=`cat /proc/fs/lustre/$1/*/mntdev` + DEVS=`lctl get_param -n $1.*.mntdev` for DEV in $DEVS; do case $DEV in *loop*) losetup $DEV | sed -e "s/.*(//" -e "s/).*//" ;; @@ -50,7 +59,8 @@ get_mnt_devs() { if [ "$LFSCK_SETUP" != "no" ]; then #Create test directory - rm -rf $DIR + # -- can't remove the mountpoint... + [ -z "$DIR" ] && rm -rf $DIR/* mkdir -p $DIR OSTCOUNT=`$LFIND $MOUNT | grep -c "^[0-9]*: "` @@ -111,7 +121,8 @@ if [ "$LFSCK_SETUP" != "no" ]; then done MDS_REMOVE=`echo $MDS_REMOVE | sed "s#$MOUNT/##g"` - MDTDEVS=`get_mnt_devs mds` + # when the OST is also using an OSD this needs to be fixed + MDTDEVS=`get_mnt_devs osd` OSTDEVS=`get_mnt_devs obdfilter` OSTCOUNT=`echo $OSTDEVS | wc -w` sh llmountcleanup.sh || exit 40 @@ -122,7 +133,7 @@ if [ "$LFSCK_SETUP" != "no" ]; then for i in $OST_REMOVE; do echo "rm O/0/d$((i % 32))/$i" >> $DEBUGTMP done - debugfs -w -f $DEBUGTMP `echo $OSTDEVS | cut -d' ' -f 1` + $DEBUGFS -w -f $DEBUGTMP `echo $OSTDEVS | cut -d' ' -f 1` RET=$? rm $DEBUGTMP [ $RET -ne 0 ] && exit 50 @@ -154,7 +165,8 @@ if [ "$LFSCK_SETUP" != "no" ]; then do_umount else - MDTDEVS=`get_mnt_devs mds` + # when the OST is also using an OSD this needs to be fixed + MDTDEVS=`get_mnt_devs osd` OSTDEVS=`get_mnt_devs obdfilter` OSTCOUNT=`echo $OSTDEVS | wc -w` fi # LFSCK_SETUP @@ -163,17 +175,19 @@ fi # LFSCK_SETUP # a return status of 1 indicates e2fsck successfuly fixed problems found set +e -echo "e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV" -e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV +echo "$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV" +df > /dev/null # update statfs data on disk +$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV RET=$? -[ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 90 || true +[ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 90 || true export OSTDB_LIST="" i=0 for OSTDEV in $OSTDEVS; do - e2fsck -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV + df > /dev/null # update statfs data on disk + $E2FSCK -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV RET=$? - [ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 100 + [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 100 OSTDB_LIST="$OSTDB_LIST $OSTDB-$i" i=$((i + 1)) done @@ -185,7 +199,7 @@ done # lfsck will return 1 if the filesystem had errors fixed echo "LFSCK TEST 1" echo "lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT" -lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT +echo y | lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT RET=$? [ $RET -eq 0 ] && echo "clean after first check" && exit 0 echo "LFSCK TEST 1 - finished with rc=$RET" @@ -195,17 +209,19 @@ echo "LFSCK TEST 1 - finished with rc=$RET" sync; sleep 2; sync echo "LFSCK TEST 2" -echo "e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV" -e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV +echo "$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV" +df > /dev/null # update statfs data on disk +$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV RET=$? -[ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 123 || true +[ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 123 || true i=0 export OSTDB_LIST="" for OSTDEV in $OSTDEVS; do - e2fsck -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV + df > /dev/null # update statfs data on disk + $E2FSCK -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV RET=$? - [ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 124 + [ $RET -gt $MAX_ERR ] && echo "$E2FSCK returned $RET" && exit 124 OSTDB_LIST="$OSTDB_LIST $OSTDB-$i" i=$((i + 1)) done