📄 sanity.sh
字号:
[ ! -d $DIR/d27 ] && mkdir -p $DIR/d27 $SETSTRIPE $FILE -s 67108864 || error "lstripe failed" BLKSIZE=`stat $FILE | awk '/IO Block:/ { print $7 }'` [ $BLKSIZE -le $LL_MAX_BLKSIZE ] || error "$BLKSIZE > $LL_MAX_BLKSIZE" dd if=/dev/zero of=$FILE bs=4k count=1 BLKSIZE=`stat $FILE | awk '/IO Block:/ { print $7 }'` [ $BLKSIZE -le $LL_MAX_BLKSIZE ] || error "$BLKSIZE > $LL_MAX_BLKSIZE"}run_test 27k "limit i_blksize for broken user apps ============="test_27l() { mkdir -p $DIR/d27 mcreate $DIR/f27l || error "creating file" $RUNAS $SETSTRIPE $DIR/f27l -c 1 && \ error "lstripe should have failed" || true}run_test 27l "check setstripe permissions (should return error)"test_27m() { [ "$OSTCOUNT" -lt "2" ] && skip "$OSTCOUNT < 2 OSTs -- skipping" && return if [ $ORIGFREE -gt $MAXFREE ]; then skip "$ORIGFREE > $MAXFREE skipping out-of-space test on OST0" return fi mkdir -p $DIR/d27 $SETSTRIPE $DIR/d27/f27m_1 -i 0 -c 1 dd if=/dev/zero of=$DIR/d27/f27m_1 bs=1024 count=$MAXFREE && \ error "dd should fill OST0" i=2 while $SETSTRIPE $DIR/d27/f27m_$i -i 0 -c 1 ; do i=`expr $i + 1` [ $i -gt 256 ] && break done i=`expr $i + 1` touch $DIR/d27/f27m_$i [ `$GETSTRIPE $DIR/d27/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] && \ error "OST0 was full but new created file still use it" i=`expr $i + 1` touch $DIR/d27/f27m_$i [ `$GETSTRIPE $DIR/d27/f27m_$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "0"` ] && \ error "OST0 was full but new created file still use it" rm -r $DIR/d27}run_test 27m "create file while OST0 was full =================="# osc's keep a NOSPC stick flag that gets unset with rmdirreset_enospc() { [ "$1" ] && FAIL_LOC=$1 || FAIL_LOC=0 mkdir -p $DIR/d27/nospc rmdir $DIR/d27/nospc sysctl -w lustre.fail_loc=$FAIL_LOC}exhaust_precreations() { OSTIDX=$1 OST=$(lctl get_param -n lov.${LOVNAME}.target_obd | grep ${OSTIDX}": " | \ awk '{print $2}' | sed -e 's/_UUID$//') # on the mdt's osc last_id=$(lctl get_param -n osc.${OST}-osc.prealloc_last_id) next_id=$(lctl get_param -n osc.${OST}-osc.prealloc_next_id) mkdir -p $DIR/d27/${OST} $SETSTRIPE $DIR/d27/${OST} -i $OSTIDX -c 1 #define OBD_FAIL_OST_ENOSPC 0x215 sysctl -w lustre.fail_loc=0x215 echo "Creating to objid $last_id on ost $OST..." createmany -o $DIR/d27/${OST}/f $next_id $((last_id - next_id + 2)) lctl get_param -n osc.${OST}-osc.prealloc* | grep '[0-9]' reset_enospc $2}exhaust_all_precreations() { local i for (( i=0; i < OSTCOUNT; i++ )) ; do exhaust_precreations $i 0x215 done reset_enospc $1}test_27n() { [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return reset_enospc rm -f $DIR/d27/f27n exhaust_precreations 0 0x80000215 touch $DIR/d27/f27n || error reset_enospc}run_test 27n "create file with some full OSTs =================="test_27o() { [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return reset_enospc rm -f $DIR/d27/f27o exhaust_all_precreations 0x215 sleep 5 touch $DIR/d27/f27o && error "able to create $DIR/d27/f27o" reset_enospc}run_test 27o "create file with all full OSTs (should error) ===="test_27p() { [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return reset_enospc rm -f $DIR/d27/f27p $MCREATE $DIR/d27/f27p || error $TRUNCATE $DIR/d27/f27p 80000000 || error $CHECKSTAT -s 80000000 $DIR/d27/f27p || error exhaust_precreations 0 0x80000215 echo foo >> $DIR/d27/f27p || error $CHECKSTAT -s 80000004 $DIR/d27/f27p || error reset_enospc}run_test 27p "append to a truncated file with some full OSTs ==="test_27q() { [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return reset_enospc rm -f $DIR/d27/f27q $MCREATE $DIR/d27/f27q || error "mcreate $DIR/d27/f27q failed" $TRUNCATE $DIR/d27/f27q 80000000 ||error "truncate $DIR/d27/f27q failed" $CHECKSTAT -s 80000000 $DIR/d27/f27q || error "checkstat failed" exhaust_all_precreations 0x215 echo foo >> $DIR/d27/f27q && error "append succeeded" $CHECKSTAT -s 80000000 $DIR/d27/f27q || error "checkstat 2 failed" reset_enospc}run_test 27q "append to truncated file with all OSTs full (should error) ==="test_27r() { [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return reset_enospc rm -f $DIR/d27/f27r exhaust_precreations 0 0x80000215 $SETSTRIPE $DIR/d27/f27r -i 0 -c 2 # && error reset_enospc}run_test 27r "stripe file with some full OSTs (shouldn't LBUG) ="test_27s() { # bug 10725 mkdir -p $DIR/$tdir $LSTRIPE $DIR/$tdir $((2048 * 1024 * 1024)) -1 2 && \ error "stripe width >= 2^32 succeeded" || true}run_test 27s "lsm_xfersize overflow (should error) (bug 10725)"test_27t() { # bug 10864 WDIR=`pwd` WLFS=`which lfs` cd $DIR touch $tfile $WLFS getstripe $tfile cd $WDIR}run_test 27t "check that utils parse path correctly"test_27u() { # bug 4900 [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return #define OBD_FAIL_MDS_OSC_PRECREATE 0x139 sysctl -w lustre.fail_loc=0x139 mkdir -p $DIR/d27u createmany -o $DIR/d27u/t- 1000 sysctl -w lustre.fail_loc=0 TLOG=$DIR/$tfile.getstripe $GETSTRIPE $DIR/d27u > $TLOG OBJS=`awk -vobj=0 '($1 == 0) { obj += 1 } END { print obj;}' $TLOG` unlinkmany $DIR/d27u/t- 1000 [ $OBJS -gt 0 ] && \ error "$OBJS objects created on OST-0. See $TLOG" || pass}run_test 27u "skip object creation on OSC w/o objects =========="test_27v() { # bug 4900 [ "$OSTCOUNT" -lt "2" ] && skip "too few OSTs" && return remote_mds && skip "remote MDS" && return exhaust_all_precreations mkdir -p $DIR/$tdir $SETSTRIPE $DIR/$tdir -c 1 # 1 stripe / file touch $DIR/$tdir/$tfile #define OBD_FAIL_TGT_DELAY_PRECREATE 0x705 sysctl -w lustre.fail_loc=0x705 START=`date +%s` for F in `seq 1 32`; do touch $DIR/$tdir/$tfile.$F done sysctl -w lustre.fail_loc=0 FINISH=`date +%s` TIMEOUT=`sysctl -n lustre.timeout` [ $((FINISH - START)) -ge $((TIMEOUT / 2)) ] && \ error "$FINISH - $START >= $TIMEOUT / 2" reset_enospc}run_test 27v "skip object creation on slow OST ================="test_27w() { # bug 10997 mkdir -p $DIR/d27w || error "mkdir failed" $LSTRIPE $DIR/d27w/f0 -s 65536 || error "lstripe failed" size=`$LSTRIPEINFO $DIR/d27w/f0 | awk {'print $1'}` [ $size -ne 65536 ] && error "stripe size $size != 65536" || true [ "$OSTCOUNT" -lt "2" ] && skip "skipping multiple stripe count/offset test" && return for i in `seq 1 $OSTCOUNT`; do offset=$(($i-1)) $LSTRIPE $DIR/d27w/f$i -c $i -i $offset || error "lstripe -c $i -i $offset failed" count=`$LSTRIPEINFO $DIR/d27w/f$i | awk {'print $2'}` index=`$LSTRIPEINFO $DIR/d27w/f$i | awk {'print $3'}` [ $count -ne $i ] && error "stripe count $count != $i" || true [ $index -ne $offset ] && error "stripe offset $index != $offset" || true done}run_test 27w "check lfs setstripe -c -s -i options ============="test_28() { mkdir $DIR/d28 $CREATETEST $DIR/d28/ct || error}run_test 28 "create/mknod/mkdir with bad file types ============"test_29() { cancel_lru_locks mdc mkdir $DIR/d29 touch $DIR/d29/foo log 'first d29' ls -l $DIR/d29 LOCKCOUNTORIG=`lctl get_param -n ldlm.namespaces.*mdc*.lock_count` LOCKUNUSEDCOUNTORIG=`lctl get_param -n ldlm.namespaces.*mdc*.lock_unused_count` [ -z $"LOCKCOUNTORIG" ] && echo "No mdc lock count" && return 1 log 'second d29' ls -l $DIR/d29 log 'done' LOCKCOUNTCURRENT=`lctl get_param -n ldlm.namespaces.*mdc*.lock_count` LOCKUNUSEDCOUNTCURRENT=`lctl get_param -n ldlm.namespaces.*mdc*.lock_unused_count` if [ "$LOCKCOUNTCURRENT" -gt "$LOCKCOUNTORIG" ]; then lctl set_param -n ldlm.dump_namespaces "" error "CURRENT: $LOCKCOUNTCURRENT > $LOCKCOUNTORIG" $LCTL dk | sort -k4 -t: > $TMP/test_29.dk log "dumped log to $TMP/test_29.dk (bug 5793)" return 2 fi if [ "$LOCKUNUSEDCOUNTCURRENT" -gt "$LOCKUNUSEDCOUNTORIG" ]; then error "UNUSED: $LOCKUNUSEDCOUNTCURRENT > $LOCKUNUSEDCOUNTORIG" $LCTL dk | sort -k4 -t: > $TMP/test_29.dk log "dumped log to $TMP/test_29.dk (bug 5793)" return 3 fi}run_test 29 "IT_GETATTR regression ============================"test_30() { cp `which ls` $DIR $DIR/ls / rm $DIR/ls}run_test 30 "run binary from Lustre (execve) ==================="test_31a() { $OPENUNLINK $DIR/f31 $DIR/f31 || error $CHECKSTAT -a $DIR/f31 || error}run_test 31a "open-unlink file =================================="test_31b() { touch $DIR/f31 || error ln $DIR/f31 $DIR/f31b || error multiop $DIR/f31b Ouc || error $CHECKSTAT -t file $DIR/f31 || error}run_test 31b "unlink file with multiple links while open ======="test_31c() { touch $DIR/f31 || error ln $DIR/f31 $DIR/f31c || error multiop_bg_pause $DIR/f31 O_uc || return 1 MULTIPID=$! multiop $DIR/f31c Ouc kill -USR1 $MULTIPID wait $MULTIPID}run_test 31c "open-unlink file with multiple links ============="test_31d() { opendirunlink $DIR/d31d $DIR/d31d || error $CHECKSTAT -a $DIR/d31d || error}run_test 31d "remove of open directory ========================="test_31e() { # bug 2904 check_kernel_version 34 || return 0 openfilleddirunlink $DIR/d31e || error}run_test 31e "remove of open non-empty directory ==============="test_31f() { # bug 4554 set -vx mkdir $DIR/d31f $SETSTRIPE $DIR/d31f -s 1048576 -c 1 cp /etc/hosts $DIR/d31f ls -l $DIR/d31f $GETSTRIPE $DIR/d31f/hosts multiop_bg_pause $DIR/d31f D_c || return 1 MULTIPID=$! rm -rv $DIR/d31f || error "first of $DIR/d31f" mkdir $DIR/d31f $SETSTRIPE $DIR/d31f -s 1048576 -c 1 cp /etc/hosts $DIR/d31f ls -l $DIR/d31f $DIR/d31f/hosts multiop_bg_pause $DIR/d31f D_c || return 1 MULTIPID2=$! kill -USR1 $MULTIPID || error "first opendir $MULTIPID not running" wait $MULTIPID || error "first opendir $MULTIPID failed" sleep 6 kill -USR1 $MULTIPID2 || error "second opendir $MULTIPID not running" wait $MULTIPID2 || error "second opendir $MULTIPID2 failed" set +vx}run_test 31f "remove of open directory with open-unlink file ==="test_32a() { echo "== more mountpoints and symlinks =================" [ -e $DIR/d32a ] && rm -fr $DIR/d32a mkdir -p $DIR/d32a/ext2-mountpoint mount -t ext2 -o loop $EXT2_DEV $DIR/d32a/ext2-mountpoint || error $CHECKSTAT -t dir $DIR/d32a/ext2-mountpoint/.. || error $UMOUNT $DIR/d32a/ext2-mountpoint || error}run_test 32a "stat d32a/ext2-mountpoint/.. ====================="test_32b() { [ -e $DIR/d32b ] && rm -fr $DIR/d32b mkdir -p $DIR/d32b/ext2-mountpoint mount -t ext2 -o loop $EXT2_DEV $DIR/d32b/ext2-mountpoint || error ls -al $DIR/d32b/ext2-mountpoint/.. || error $UMOUNT $DIR/d32b/ext2-mountpoint || error}run_test 32b "open d32b/ext2-mountpoint/.. =====================" test_32c() { [ -e $DIR/d32c ] && rm -fr $DIR/d32c mkdir -p $DIR/d32c/ext2-mountpoint mount -t ext2 -o loop $EXT2_DEV $DIR/d32c/ext2-mountpoint || error mkdir -p $DIR/d32c/d2/test_dir $CHECKSTAT -t dir $DIR/d32c/ext2-mountpoint/../d2/test_dir || error $UMOUNT $DIR/d32c/ext2-mountpoint || error}run_test 32c "stat d32c/ext2-mountpoint/../d2/test_dir ========="test_32d() { [ -e $DIR/d32d ] && rm -fr $DIR/d32d mkdir -p $DIR/d32d/ext2-mountpoint mount -t ext2 -o loop $EXT2_DEV $DIR/d32d/ext2-mountpoint || error mkdir -p $DIR/d32d/d2/test_dir ls -al $DIR/d32d/ext2-mountpoint/../d2/test_dir || error $UMOUNT $DIR/d32d/ext2-mountpoint || error}run_test 32d "open d32d/ext2-mountpoint/../d2/test_dir ========="test_32e() { [ -e $DIR/d32e ] && rm -fr $DIR/d32e mkdir -p $DIR/d32e/tmp TMP_DIR=$DIR/d32e/tmp ln -s $DIR/d32e $TMP_DIR/symlink11 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 $CHECKSTAT -t link $DIR/d32e/tmp/symlink11 || error $CHECKSTAT -t link $DIR/d32e/symlink01 || error}run_test 32e "stat d32e/symlink->tmp/symlink->lustre-subdir ===="test_32f() { [ -e $DIR/d32f ] && rm -fr $DIR/d32f mkdir -p $DIR/d32f/tmp TMP_DIR=$DIR/d32f/tmp ln -s $DIR/d32f $TMP_DIR/symlink11 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 ls $DIR/d32f/tmp/symlink11 || error ls $DIR/d32f/symlink01 || error}run_test 32f "open d32f/symlink->tmp/symlink->lustre-subdir ===="test_32g() { TMP_DIR=$DIR/$tdir/tmp mkdir -p $TMP_DIR $DIR/${tdir}2 ln -s $DIR/${tdir}2 $TMP_DIR/symlink12 ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02 $CHECKSTAT -t link $TMP_DIR/symlink12 || error $CHECKSTAT -t link $DIR/$tdir/symlink02 || error $CHECKSTAT -t dir -f $TMP_DIR/symlink12 || error $CHECKSTAT -t dir -f $DIR/$tdir/symlink02 || error
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -