Whamcloud - gitweb
LU-1903 test: disable lfsck for ZFS tests
[fs/lustre-release.git] / lustre / tests / lfsck.sh
index 53a2ca0..1c805a1 100644 (file)
@@ -1,4 +1,6 @@
 #!/bin/bash
+# -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
+# vim:shiftwidth=4:softtabstop=4:tabstop=4:
 #
 # test e2fsck and lfsck to detect and fix filesystem corruption
 #
@@ -18,9 +20,18 @@ OBJGRP=${OBJGRP:-0} # the OST object group
 [ -d "$SHARED_DIRECTORY" ] || \
     { skip "SHARED_DIRECTORY should be specified with a shared directory \
 which can be accessable on all of the nodes" && exit 0; }
+[[ $(facet_fstype $SINGLEMDS) != ldiskfs ]] &&
+       skip "Only applicable to ldiskfs-based MDTs" && exit 0
+[[ $(facet_fstype OST) != ldiskfs ]] &&
+       skip "Only applicable to ldiskfs-based OST" && exit 0
 
-which getfattr > /dev/null 2>&1 || { skip "could not find getfattr" && exit 0; }
-which setfattr > /dev/null 2>&1 || { skip "could not find setfattr" && exit 0; }
+which getfattr &>/dev/null || { skip_env "could not find getfattr" && exit 0; }
+which setfattr &>/dev/null || { skip_env "could not find setfattr" && exit 0; }
+
+if [ ! -x `which $LFSCK_BIN` ]; then
+    log "$($E2FSCK -V)"
+    error "e2fsprogs does not support lfsck"
+fi
 
 MOUNT_2=""
 check_and_setup_lustre
@@ -101,7 +112,7 @@ get_ost_node() {
     local ost_node
     local node
 
-    ost_uuid=$($LFS osts | grep "^$obdidx: " | cut -d' ' -f2 | head -n1)
+    ost_uuid=$(ostuuid_from_index $obdidx)
 
     for node in $(osts_nodes); do
         do_node $node "lctl get_param -n obdfilter.*.uuid" | grep -q $ost_uuid
@@ -114,25 +125,24 @@ get_ost_node() {
 
 # Get the OST target device (given the OST facet name and OST index).
 get_ost_dev() {
-    local node=$1
-    local obdidx=$2
-    local ost_name
-    local ost_dev
-
-    ost_name=$($LFS osts | grep "^$obdidx: " | cut -d' ' -f2 | \
-                head -n1 | sed -e 's/_UUID$//')
-
-    ost_dev=$(do_node $node "lctl get_param -n obdfilter.$ost_name.mntdev")
-    [ ${PIPESTATUS[0]} -ne 0 ] && \
-        echo "failed to find the OST device with index $obdidx on $facet" && \
-        return 1
+       local node=$1
+       local obdidx=$2
+       local ost_name
+       local ost_dev
+
+       ost_name=$(ostname_from_index $obdidx)
+       ost_dev=$(get_obdfilter_param $node $ost_name mntdev)
+       if [ $? -ne 0 ]; then
+               printf "unable to find OST%04x on $facet\n" $obdidx
+               return 1
+       fi
 
-    if [[ $ost_dev = *loop* ]]; then
-        ost_dev=$(do_node $node "losetup $ost_dev" | \
-                sed -e "s/.*(//" -e "s/).*//")
-    fi
+       if [[ $ost_dev = *loop* ]]; then
+               ost_dev=$(do_node $node "losetup $ost_dev" | \
+                         sed -e "s/.*(//" -e "s/).*//")
+       fi
 
-    echo $ost_dev
+       echo $ost_dev
 }
 
 # Get the file names to be duplicated or removed on the MDS.
@@ -208,7 +218,7 @@ init_logging
 # get the server target devices
 get_svr_devs
 
-if [ "$SKIP_LFSCK" = "no" ] && is_empty_fs $MOUNT; then
+if is_empty_fs $MOUNT; then
     # create test directory
     TESTDIR=$DIR/d0.$TESTSUITE
     mkdir -p $TESTDIR || error "mkdir $TESTDIR failed"
@@ -244,7 +254,7 @@ if [ "$SKIP_LFSCK" = "no" ] && is_empty_fs $MOUNT; then
     duplicate_files $SINGLEMDS $MDTDEV $MDS_DUPE || \
         error "duplicating files failed"
     FSCK_MAX_ERR=1   # file system errors corrected
-else    # I_MOUNTED=no
+else # is_empty_fs $MOUNT
     FSCK_MAX_ERR=4   # file system errors left uncorrected
 fi
 
@@ -252,38 +262,30 @@ fi
 # lfsck will return 1 if the filesystem had errors fixed
 # run e2fsck to generate databases used for lfsck
 generate_db
-if [ "$SKIP_LFSCK" != "no" ]; then
-    echo "skip lfsck"
+
+# remount filesystem
+REFORMAT=""
+check_and_setup_lustre
+
+# run lfsck
+rc=0
+run_lfsck || rc=$?
+if [ $rc -eq 0 ]; then
+    echo "clean after the first check"
 else
-    # remount filesystem
-    REFORMAT=""
-    check_and_setup_lustre
+    # run e2fsck again to generate databases used for lfsck
+    generate_db
 
-    # run lfsck
+    # run lfsck again
     rc=0
     run_lfsck || rc=$?
     if [ $rc -eq 0 ]; then
-       echo "clean after the first check"
+        echo "clean after the second check"
     else
-        # run e2fsck again to generate databases used for lfsck
-       generate_db
-
-        # run lfsck again
-       rc=0
-       run_lfsck || rc=$?
-       if [ $rc -eq 0 ]; then
-           echo "clean after the second check"
-       else
-           error "lfsck test 2 - finished with rc=$rc"
-       fi
+        error "lfsck test 2 - finished with rc=$rc"
     fi
 fi
 
-equals_msg $(basename $0): test complete, cleaning up
-
-LFSCK_ALWAYS=no
+complete $(basename $0) $SECONDS
 check_and_cleanup_lustre
-[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && \
-    grep -q FAIL $TESTSUITELOG && exit 1 || true
-
-echo "$0: completed"
+exit_status