Whamcloud - gitweb
b=19702 fix COUNT to work properly
[fs/lustre-release.git] / lustre / tests / lfscktest.sh
index c4e2613..660783a 100755 (executable)
@@ -10,7 +10,7 @@ LOG=${LOG:-"$TMP/lfscktest.log"}
 L2FSCK_PATH=${L2FSCK_PATH:-""}
 NUMFILES=${NUMFILES:-10}
 NUMDIRS=${NUMDIRS:-4}
-LFIND=${LFIND:-"lfs find"}
+GETSTRIPE=${GETSTRIPE:-"lfs getstripe"}
 GETFATTR=${GETFATTR:-getfattr}
 SETFATTR=${SETFATTR:-setfattr}
 MAX_ERR=1
@@ -25,10 +25,21 @@ 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
 
-DIR=${DIR:-$MOUNT/$TESTNAME}
+# 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/$TESTNAME
 [ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 3
 
 if [ "$WAS_MOUNTED" ]; then
@@ -37,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/).*//" ;;
@@ -48,9 +59,10 @@ 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]*: "`
+       OSTCOUNT=`$LFS osts | grep -c "^[0-9]*: " || true`
 
        # Create some files on the filesystem
        for d in `seq -f d%g $NUMDIRS`; do
@@ -89,13 +101,13 @@ if [ "$LFSCK_SETUP" != "no" ]; then
 
        # Get objids for a file on the OST
        OST_FILES=`seq -f $DIR/testfile.%g $NUMFILES`
-       OST_REMOVE=`$LFIND $OST_FILES | awk '$1 == 0 { print $2 }' | head -n $NUMFILES`
+       OST_REMOVE=`$GETSTRIPE $OST_FILES | awk '$1 == 0 { print $2 }' | head -n $NUMFILES`
 
        export MDS_DUPE=""
        for f in `seq -f testfile.%g $((NUMFILES + 1)) $((NUMFILES * 2))`; do
                TEST_FILE=$DIR/$f
                echo "DUPLICATING MDS file $TEST_FILE"
-               $LFIND -v $TEST_FILE >> $LOG || exit 20
+               $GETSTRIPE -v $TEST_FILE >> $LOG || exit 20
                MDS_DUPE="$MDS_DUPE $TEST_FILE"
        done
        MDS_DUPE=`echo $MDS_DUPE | sed "s#$MOUNT/##g"`
@@ -104,7 +116,7 @@ if [ "$LFSCK_SETUP" != "no" ]; then
        for f in `seq -f testfile.%g $((NUMFILES * 2 + 1)) $((NUMFILES * 3))`; do
                TEST_FILE=$DIR/$f
                echo "REMOVING MDS file $TEST_FILE which has info:"
-               $LFIND -v $TEST_FILE >> $LOG || exit 30
+               $GETSTRIPE -v $TEST_FILE >> $LOG || exit 30
                MDS_REMOVE="$MDS_REMOVE $TEST_FILE"
        done
        MDS_REMOVE=`echo $MDS_REMOVE | sed "s#$MOUNT/##g"`
@@ -120,12 +132,13 @@ 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
 
        SAVE_PWD=$PWD
+        [ "$FSTYPE" = "ldiskfs" ] && load_module ../ldiskfs/ldiskfs/ldiskfs
        mount -t $FSTYPE -o loop $MDSDEV $MOUNT || exit 60
        do_umount() {
                trap 0
@@ -161,31 +174,31 @@ fi # LFSCK_SETUP
 # 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 $MDSDB $MDSDEV"
 df > /dev/null # update statfs data on disk
-e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV
+$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
        df > /dev/null  # update statfs data on disk
-       e2fsck -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV
+       $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
 
 #Remount filesystem
-[ "`mount | grep $MOUNT`" ] || $SETUP
+[ "`mount | grep $MOUNT`" ] || setupall
 
 # 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"
-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,19 +208,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"
+echo "$E2FSCK -d -v -fn --mdsdb $MDSDB $MDSDEV"
 df > /dev/null # update statfs data on disk
-e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV
+$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
        df > /dev/null  # update statfs data on disk
-       e2fsck -d -v -fn --mdsdb $MDSDB --ostdb $OSTDB-$i $OSTDEV
+       $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