Whamcloud - gitweb
b=14471
[fs/lustre-release.git] / lustre / tests / lfscktest.sh
index 7aaf964..cc56df8 100755 (executable)
@@ -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,16 @@ LUSTRE=${LUSTRE:-`dirname $0`/..}
 init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
 
-WAS_MOUNTED=`mount | grep $MOUNT`
-[ "$WAS_MOUNTED" ] || $FORMAT && $SETUP
+# 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 +45,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 +56,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 +118,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
@@ -154,7 +162,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
@@ -164,6 +173,7 @@ fi # LFSCK_SETUP
 set +e
 
 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
@@ -171,6 +181,7 @@ RET=$?
 export OSTDB_LIST=""
 i=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 -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 100
@@ -185,7 +196,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"
@@ -196,6 +207,7 @@ sync; sleep 2; sync
 
 echo "LFSCK TEST 2"
 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
@@ -203,6 +215,7 @@ RET=$?
 i=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 -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 124