⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sanity-quota.sh

📁 lustre 1.6.5 source code
💻 SH
📖 第 1 页 / 共 3 页
字号:
#!/bin/bash## Run select tests by setting ONLY, or as arguments to the script.# Skip specific tests by setting EXCEPT.## Run test by setting NOSETUP=true when ltest has setup env for usset -e#kernel 2.4.x doesn't support quotaK_VER=`uname --kernel-release | cut -b 1-3`if [ $K_VER = "2.4" ]; then    echo "Kernel 2.4 doesn't support quota"    exit 0fiSRCDIR=`dirname $0`export PATH=$PWD/$SRCDIR:$SRCDIR:$PWD/$SRCDIR/../utils:$PATH:/sbinONLY=${ONLY:-"$*"}ALWAYS_EXCEPT="$SANITY_QUOTA_EXCEPT"# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!case `uname -r` in2.6*) FSTYPE=${FSTYPE:-ldiskfs};;*) error "unsupported kernel" ;;esac[ "$ALWAYS_EXCEPT$EXCEPT" ] && \	echo "Skipping tests: `echo $ALWAYS_EXCEPT $EXCEPT`"TMP=${TMP:-/tmp}ORIG_PWD=${PWD}TSTID=${TSTID:-60000}TSTID2=${TSTID2:-60001}TSTUSR=${TSTUSR:-"quota_usr"}TSTUSR2=${TSTUSR2:-"quota_2usr"}BLK_SZ=1024BUNIT_SZ=${BUNIT_SZ:-1024}	# min block quota unit(kB)IUNIT_SZ=${IUNIT_SZ:-10}	# min inode quota unitMAX_DQ_TIME=604800MAX_IQ_TIME=604800TRACE=${TRACE:-""}LUSTRE=${LUSTRE:-`dirname $0`/..}. $LUSTRE/tests/test-framework.shinit_test_env $@. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}[ "$SLOW" = "no" ] && EXCEPT_SLOW="9 10 11"QUOTALOG=${TESTSUITELOG:-$TMP/$(basename $0 .sh).log}[ "$QUOTALOG" ] && rm -f $QUOTALOG || trueDIR=${DIR:-$MOUNT}DIR2=${DIR2:-$MOUNT2}cleanup_and_setup_lustreLOVNAME=`cat $LPROC/llite/*/lov/common_name | tail -n 1`OSTCOUNT=`cat $LPROC/lov/$LOVNAME/numobd`SHOW_QUOTA_USER="$LFS quota -u $TSTUSR $DIR"SHOW_QUOTA_GROUP="$LFS quota -g $TSTUSR $DIR"SHOW_QUOTA_INFO="$LFS quota -t $DIR"# control the time of testscycle=30[ "$SLOW" = "no" ] && cycle=10build_test_filtereval ONLY_0=trueeval ONLY_99=true# set_blk_tunables(btune_sz)set_blk_tunesz() {        local i	# set btune size on all obdfilters	do_facet ost1 "set -x; for i in /proc/fs/lustre/obdfilter/*/quota_btune_sz; do		echo $(($1 * BLK_SZ)) >> \\\$i;	done"	# set btune size on mds	do_facet mds "for i in /proc/fs/lustre/mds/${FSNAME}-MDT*/quota_btune_sz; do		echo $(($1 * BLK_SZ)) >> \\\$i;	done"}# set_blk_unitsz(bunit_sz)set_blk_unitsz() {        local i	do_facet ost1 "for i in /proc/fs/lustre/obdfilter/*/quota_bunit_sz; do		echo $(($1 * BLK_SZ)) >> \\\$i;	done"	do_facet mds "for i in /proc/fs/lustre/mds/${FSNAME}-MDT*/quota_bunit_sz; do		echo $(($1 * BLK_SZ)) >> \\\$i;	done"}# set_file_tunesz(itune_sz)set_file_tunesz() {        local i	# set iunit and itune size on all obdfilters	do_facet ost1 "for i in /proc/fs/lustre/obdfilter/*/quota_itune_sz; do		echo $1 >> \\\$i;	done"	# set iunit and itune size on mds	do_facet mds "for i in /proc/fs/lustre/mds/${FSNAME}-MDT*/quota_itune_sz; do		echo $1 >> \\\$i;	done"}# set_file_unitsz(iunit_sz)set_file_unitsz() {        local i	do_facet ost1 "for i in /proc/fs/lustre/obdfilter/*/quota_iunit_sz; do		echo $1 >> \\\$i;	done"	do_facet mds "for i in /proc/fs/lustre/mds/${FSNAME}-MDT*/quota_iunit_sz; do		echo $1 >> \\\$i;	done"}lustre_fail() {        local fail_node=$1	local fail_loc=$2	case $fail_node in	    "mds" )		do_facet mds "sysctl -w lustre.fail_loc=$fail_loc" ;;	    "ost" )		for num in `seq $OSTCOUNT`; do		    do_facet ost$num "sysctl -w lustre.fail_loc=$fail_loc"		done ;;	    "mds_ost" )		do_facet mds "sysctl -w lustre.fail_loc=$fail_loc" ;		for num in `seq $OSTCOUNT`; do		    do_facet ost$num "sysctl -w lustre.fail_loc=$fail_loc"		done ;;	    * ) echo "usage: lustre_fail fail_node fail_loc" ;		return 1 ;;	esac}RUNAS="runas -u $TSTID"RUNAS2="runas -u $TSTID2"FAIL_ON_ERROR=true check_runas_id $TSTID $RUNASFAIL_ON_ERROR=true check_runas_id $TSTID2 $RUNAS2FAIL_ON_ERROR=false# set quotatest_0() {	$LFS quotaoff -ug $DIR	$LFS quotacheck -ug $DIR	$LFS setquota -u $TSTUSR 0 0 0 0 $DIR	$LFS setquota -g $TSTUSR 0 0 0 0 $DIR	sysctl -w lnet.debug="+quota"}run_test 0 "Set quota ============================="# test for specific quota limitation, qunit, qtune $1=block_quota_limittest_1_sub() {        LIMIT=$1	chmod 0777 $DIR/$tdir        TESTFILE="$DIR/$tdir/$tfile-0"	wait_delete_completed        # test for user        log "  User quota (limit: $LIMIT kbytes)"        $LFS setquota -u $TSTUSR 0 $LIMIT 0 0 $DIR	sleep 3        $SHOW_QUOTA_USER        $LFS setstripe $TESTFILE -c 1        chown $TSTUSR.$TSTUSR $TESTFILE        log "    Write ..."        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$(($LIMIT/2)) || error "(usr) write failure, but expect success"        log "    Done"        log "    Write out of block quota ..."	# this time maybe cache write,  ignore it's failure        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$(($LIMIT/2)) seek=$(($LIMIT/2)) || true	# flush cache, ensure noquota flag is setted on client        cancel_lru_locks osc        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$BUNIT_SZ seek=$LIMIT && error "(usr) write success, but expect EDQUOT"        rm -f $TESTFILE	sync; sleep 1; sync;	OST0_UUID=`do_facet ost1 $LCTL dl | grep -m1 obdfilter | awk '{print $((NF-1))}'`	OST0_QUOTA_USED=`$LFS quota -o $OST0_UUID -u $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $1 }'`	echo $OST0_QUOTA_USED	[ $OST0_QUOTA_USED -ne 0 ] && \	    ($SHOW_QUOTA_USER; error "quota deleted isn't released")	$SHOW_QUOTA_USER        $LFS setquota -u $TSTUSR 0 0 0 0 $DIR		# clear user limit        # test for group	log "--------------------------------------"        log "  Group quota (limit: $LIMIT kbytes)"        $LFS setquota -g $TSTUSR 0 $LIMIT 0 0 $DIR	sleep 3        $SHOW_QUOTA_GROUP        TESTFILE="$DIR/$tdir/$tfile-1"        $LFS setstripe $TESTFILE -c 1        chown $TSTUSR.$TSTUSR $TESTFILE        log "    Write ..."        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$(($LIMIT/2)) || error "(grp) write failure, but expect success"        log "    Done"        log "    Write out of block quota ..."	# this time maybe cache write, ignore it's failure        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$(($LIMIT/2)) seek=$(($LIMIT/2)) || true        cancel_lru_locks osc        $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$BUNIT_SZ seek=$LIMIT && error "(grp) write success, but expect EDQUOT"	# cleanup        rm -f $TESTFILE	sync; sleep 1; sync;	OST0_UUID=`do_facet ost1 $LCTL dl | grep -m1 obdfilter | awk '{print $((NF-1))}'`	OST0_QUOTA_USED=`$LFS quota -o $OST0_UUID -g $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $1 }'`	echo $OST0_QUOTA_USED	[ $OST0_QUOTA_USED -ne 0 ] && \	    ($SHOW_QUOTA_USER; error "quota deleted isn't released")	$SHOW_QUOTA_GROUP        $LFS setquota -g $TSTUSR 0 0 0 0 $DIR		# clear group limit}# block hard limit (normal use and out of quota)test_1() {	for i in `seq 1 $cycle`; do	    # define blk_qunit is between 1M and 4M	    blk_qunit=$(( $RANDOM % 3072 + 1024 ))	    blk_qtune=$(( $RANDOM % $blk_qunit ))	    # other osts and mds will occupy at 1M blk quota	    b_limit=$(( ($RANDOM - 16384) / 8 +  $OSTCOUNT  * $blk_qunit * 4 ))	    set_blk_tunesz $blk_qtune	    set_blk_unitsz $blk_qunit	    echo "cycle: $i(total $cycle) bunit:$blk_qunit, btune:$blk_qtune, blimit:$b_limit"	    test_1_sub $b_limit	    echo "=================================================="	    set_blk_unitsz $((128 * 1024))	    set_blk_tunesz $((128 * 1024 / 2))        done}run_test 1 "Block hard limit (normal use and out of quota) ==="# test for specific quota limitation, qunit, qtune $1=block_quota_limittest_2_sub() {        LIMIT=$1	chmod 0777 $DIR/$tdir        TESTFILE="$DIR/$tdir/$tfile-0"	wait_delete_completed        # test for user        log "  User quota (limit: $LIMIT files)"        $LFS setquota -u $TSTUSR 0 0 0 $LIMIT $DIR	sleep 3        $SHOW_QUOTA_USER	log "    Create $LIMIT files ..."	$RUNAS createmany -m ${TESTFILE} $LIMIT || \		error "(usr) create failure, but except success"	log "    Done"	log "    Create out of file quota ..."	$RUNAS touch ${TESTFILE}_xxx && \		error "(usr) touch success, but expect EDQUOT"	unlinkmany ${TESTFILE} $LIMIT	rm -f ${TESTFILE}_xxx	sync; sleep 1; sync;	MDS_UUID=`do_facet mds $LCTL dl | grep -m1 mds | awk '{print $((NF-1))}'`	MDS_QUOTA_USED=`$LFS quota -o $MDS_UUID -u $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $4 }'`	echo $MDS_QUOTA_USED	[ $MDS_QUOTA_USED -ne 0 ] && \	    ($SHOW_QUOTA_USER; error "quota deleted isn't released")	$SHOW_QUOTA_USER        $LFS setquota -u $TSTUSR 0 0 0 0 $DIR		# clear user limit        # test for group	log "--------------------------------------"        log "  Group quota (limit: $LIMIT FILE)"        $LFS setquota -g $TSTUSR 0 0 0 $LIMIT $DIR	sleep 3        $SHOW_QUOTA_GROUP        TESTFILE=$DIR/$tdir/$tfile-1	log "    Create $LIMIT files ..."	$RUNAS createmany -m ${TESTFILE} $LIMIT || \		error "(usr) create failure, but except success"	log "    Done"	log "    Create out of file quota ..."	$RUNAS touch ${TESTFILE}_xxx && \		error "(usr) touch success, but expect EDQUOT"	unlinkmany ${TESTFILE} $LIMIT	rm -f ${TESTFILE}_xxx	sync; sleep 1; sync;	MDS_UUID=`do_facet mds $LCTL dl | grep -m1 mds | awk '{print $((NF-1))}'`	MDS_QUOTA_USED=`$LFS quota -o $MDS_UUID -g $TSTUSR $DIR | awk '/^.*[[:digit:]+][[:space:]+]/ { print $4 }'`	echo $MDS_QUOTA_USED	[ $MDS_QUOTA_USED -ne 0 ] && \	    ($SHOW_QUOTA_USER; error "quota deleted isn't released")	$SHOW_QUOTA_GROUP        $LFS setquota -g $TSTUSR 0 0 0 0 $DIR		# clear user limit}# file hard limit (normal use and out of quota)test_2() {	for i in `seq 1 $cycle`; do	    # define ino_qunit is between 10 and 100	    ino_qunit=$(( $RANDOM % 90 + 10 ))	    ino_qtune=$(( $RANDOM % $ino_qunit ))	    # RANDOM's maxium is 32767	    i_limit=$(( $RANDOM % 990 + 10 ))            set_file_tunesz $ino_qtune	    set_file_unitsz $ino_qunit	    echo "cycle: $i(total $cycle) iunit:$ino_qunit, itune:$ino_qtune, ilimit:$i_limit"	    test_2_sub $i_limit	    echo "=================================================="	    set_file_unitsz 5120	    set_file_tunesz 2560        done}run_test 2 "File hard limit (normal use and out of quota) ==="test_block_soft() {	TESTFILE=$1	TIMER=$(($2 * 3 / 2))	OFFSET=0	wait_delete_completed	echo "    Write to exceed soft limit"	RUNDD="$RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ"	$RUNDD count=$((BUNIT_SZ+1)) || \	        error "write failure, but expect success"	OFFSET=$((OFFSET + BUNIT_SZ + 1))        cancel_lru_locks osc	$SHOW_QUOTA_USER	$SHOW_QUOTA_GROUP	$SHOW_QUOTA_INFO	echo "    Write before timer goes off"	$RUNDD count=$BUNIT_SZ seek=$OFFSET || \	        error "write failure, but expect success"	OFFSET=$((OFFSET + BUNIT_SZ))        cancel_lru_locks osc	echo "    Done"        echo "    Sleep $TIMER seconds ..."        sleep $TIMER        $SHOW_QUOTA_USER        $SHOW_QUOTA_GROUP        $SHOW_QUOTA_INFO	echo "    Write after timer goes off"	# maybe cache write, ignore.	$RUNDD count=$BUNIT_SZ seek=$OFFSET || true	OFFSET=$((OFFSET + BUNIT_SZ))        cancel_lru_locks osc	$RUNDD count=$BUNIT_SZ seek=$OFFSET && \	        error "write success, but expect EDQUOT"        $SHOW_QUOTA_USER        $SHOW_QUOTA_GROUP        $SHOW_QUOTA_INFO	echo "    Unlink file to stop timer"	rm -f $TESTFILE	sync; sleep 1; sync	echo "    Done"        $SHOW_QUOTA_USER        $SHOW_QUOTA_GROUP        $SHOW_QUOTA_INFO	echo "    Write ..."	$RUNDD count=$BUNIT_SZ || error "write failure, but expect success"	echo "    Done"	# cleanup	rm -f $TESTFILE	sync; sleep 3; sync;}# block soft limit (start timer, timer goes off, stop timer)test_3() {	chmod 0777 $DIR/$tdir        # 1 bunit on mds and 1 bunit on every ost	LIMIT=$(( $BUNIT_SZ * ($OSTCOUNT + 1) ))	GRACE=10	echo "  User quota (soft limit: $LIMIT kbytes  grace: $GRACE seconds)"	TESTFILE=$DIR/$tdir/$tfile-0	$LFS setstripe $TESTFILE -c 1	chown $TSTUSR.$TSTUSR $TESTFILE	$LFS setquota -t -u $GRACE $MAX_IQ_TIME $DIR	$LFS setquota -u $TSTUSR $LIMIT 0 0 0 $DIR	test_block_soft $TESTFILE $GRACE	$LFS setquota -u $TSTUSR 0 0 0 0 $DIR	echo "  Group quota (soft limit: $LIMIT kbytes  grace: $GRACE seconds)"	TESTFILE=$DIR/$tdir/$tfile-1	$LFS setstripe $TESTFILE -c 1	chown $TSTUSR.$TSTUSR $TESTFILE	$LFS setquota -t -g $GRACE $MAX_IQ_TIME $DIR	$LFS setquota -g $TSTUSR $LIMIT 0 0 0 $DIR	test_block_soft $TESTFILE $GRACE	$LFS setquota -g $TSTUSR 0 0 0 0 $DIR}run_test 3 "Block soft limit (start timer, timer goes off, stop timer) ==="test_file_soft() {	TESTFILE=$1	LIMIT=$2	TIMER=$(($3 * 3 / 2))	wait_delete_completed	echo "    Create files to exceed soft limit"	$RUNAS createmany -m ${TESTFILE}_ $((LIMIT + 1)) || \		error "create failure, but expect success"	sync; sleep 1; sync	echo "    Done"	echo "    Create file before timer goes off"	$RUNAS touch ${TESTFILE}_before || \		error "failed create before timer expired, but expect success"	sync; sleep 1; sync	echo "    Done"	echo "    Sleep $TIMER seconds ..."	sleep $TIMER	$SHOW_QUOTA_USER	$SHOW_QUOTA_GROUP	$SHOW_QUOTA_INFO	echo "    Create file after timer goes off"	$RUNAS touch ${TESTFILE}_after ${TESTFILE}_after1 && \		error "create after timer expired, but expect EDQUOT"	sync; sleep 1; sync	$SHOW_QUOTA_USER	$SHOW_QUOTA_GROUP	$SHOW_QUOTA_INFO	echo "    Unlink files to stop timer"	find `dirname $TESTFILE` -name "`basename ${TESTFILE}`*" | xargs rm -f	echo "    Done"	echo "    Create file"	$RUNAS touch ${TESTFILE}_xxx || \		error "touch after timer stop failure, but expect success"	sync; sleep 1; sync	echo "    Done"	# cleanup	rm -f ${TESTFILE}_xxx	sync; sleep 3; sync;}# file soft limit (start timer, timer goes off, stop timer)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -