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

📄 lfscktest.sh

📁 lustre 1.6.5 source code
💻 SH
字号:
#!/bin/bash#set -vxset -eTESTNAME="lfscktest"TMP=${TMP:-/tmp}MDSDB=${MDSDB:-$TMP/mdsdb}OSTDB=${OSTDB:-$TMP/ostdb}LOG=${LOG:-"$TMP/lfscktest.log"}L2FSCK_PATH=${L2FSCK_PATH:-""}NUMFILES=${NUMFILES:-10}NUMDIRS=${NUMDIRS:-4}GETSTRIPE=${GETSTRIPE:-"lfs getstripe"}GETFATTR=${GETFATTR:-getfattr}SETFATTR=${SETFATTR:-setfattr}MAX_ERR=1export PATH=$LFSCK_PATH:`dirname $0`:`dirname $0`/../utils:$PATH[ -z "`which $GETFATTR`" ] && echo "$0: $GETFATTR not found" && exit 5[ -z "`which $SETFATTR`" ] && echo "$0: $SETFATTR not found" && exit 6LUSTRE=${LUSTRE:-`dirname $0`/..}. $LUSTRE/tests/test-framework.shinit_test_env $@. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}# if nothing mounted, don't nuke MOUNT variable needed in llmount.shWAS_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 2else        MOUNT=${WAS_MOUNTED}fiDIR=$DIR/$TESTNAME[ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 3if [ "$WAS_MOUNTED" ]; then	LFSCK_SETUP=no	MAX_ERR=4		# max expected error from e2fsckfiget_mnt_devs() {	DEVS=`cat /proc/fs/lustre/$1/*/mntdev`	for DEV in $DEVS; do		case $DEV in		*loop*) losetup $DEV | sed -e "s/.*(//" -e "s/).*//" ;;		*) echo $DEV ;;		esac	done}if [ "$LFSCK_SETUP" != "no" ]; then	#Create test directory 	# -- can't remove the mountpoint...	[ -z "$DIR" ] && rm -rf $DIR/*	mkdir -p $DIR	OSTCOUNT=`$GETSTRIPE $MOUNT | grep -c "^[0-9]*: " || true`	# Create some files on the filesystem	for d in `seq -f d%g $NUMDIRS`; do		echo "creating files in $DIR/$d"		for e in `seq -f d%g $NUMDIRS`; do			mkdir -p  $DIR/$d/$e			for f in `seq -f test%g $NUMDIRS`; do				cp /etc/fstab $DIR/$d/$e/$f ||exit 5			done		done	done	# Create Files to be modified	for f in `seq -f $DIR/testfile.%g $((NUMFILES * 3))`; do		echo "creating $f"		cp /etc/termcap $f || exit 10	done	#Create some more files	for d in `seq -f d%g $((NUMDIRS * 2 + 1)) $((NUMDIRS * 2 + 3))`; do		echo "creating files in $DIR/$d"		for e in `seq -f d%g $NUMDIRS`; do			mkdir -p  $DIR/$d/$e			for f in `seq -f test%g $NUMDIRS`; do				cp /etc/hosts $DIR/$d/$e/$f ||exit 15			done		done	done	# these should NOT be taken as duplicates	for f in `seq -f $DIR/$d/linkfile.%g $NUMFILES`; do		echo "linking files in $DIR/$d"		cp /etc/hosts $f		ln $f $f.link	done	# Get objids for a file on the OST	OST_FILES=`seq -f $DIR/testfile.%g $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"		$GETSTRIPE -v $TEST_FILE >> $LOG || exit 20		MDS_DUPE="$MDS_DUPE $TEST_FILE"	done	MDS_DUPE=`echo $MDS_DUPE | sed "s#$MOUNT/##g"`	export MDS_REMOVE=""	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:"		$GETSTRIPE -v $TEST_FILE >> $LOG || exit 30		MDS_REMOVE="$MDS_REMOVE $TEST_FILE"	done	MDS_REMOVE=`echo $MDS_REMOVE | sed "s#$MOUNT/##g"`	MDTDEVS=`get_mnt_devs mds`	OSTDEVS=`get_mnt_devs obdfilter`	OSTCOUNT=`echo $OSTDEVS | wc -w`	sh llmountcleanup.sh || exit 40	# Remove objects associated with files	echo "removing objects: `echo $OST_REMOVE`"	DEBUGTMP=`mktemp $TMP/debugfs.XXXXXXXXXX`	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`	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		cd $SAVE_PWD		umount -f $MOUNT	}	trap do_umount EXIT	#Remove files from mds	for f in $MDS_REMOVE; do		rm $MOUNT/ROOT/$f || exit 70	done	#Create EAs on files so objects are referenced from different files	ATTRTMP=`mktemp $TMP/setfattr.XXXXXXXXXX`	cd $MOUNT/ROOT || exit 78	for f in $MDS_DUPE; do		touch $f.bad || exit 74		getfattr -n trusted.lov $f | sed "s#$f#&.bad#" > $ATTRTMP		setfattr --restore $ATTRTMP || exit 80	done	cd $SAVE_PWD	rm $ATTRTMP	do_umountelse	MDTDEVS=`get_mnt_devs mds`	OSTDEVS=`get_mnt_devs obdfilter`	OSTCOUNT=`echo $OSTDEVS | wc -w`fi # LFSCK_SETUP# Run e2fsck to get mds and ost info# a return status of 1 indicates e2fsck successfuly fixed problems foundset +eecho "e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV"df > /dev/null	# update statfs data on diske2fsck -d -v -fn --mdsdb $MDSDB $MDSDEVRET=$?[ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 90 || trueexport OSTDB_LIST=""i=0for 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	OSTDB_LIST="$OSTDB_LIST $OSTDB-$i"	i=$((i + 1))done#Remount filesystem[ "`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 fixedecho "LFSCK TEST 1"echo "lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT"echo y | lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNTRET=$?[ $RET -eq 0 ] && echo "clean after first check" && exit 0echo "LFSCK TEST 1 - finished with rc=$RET"[ $RET -gt $MAX_ERR ] && exit 110 || true# make sure everything gets to the backing storesync; sleep 2; syncecho "LFSCK TEST 2"echo "e2fsck -d -v -fn --mdsdb $MDSDB $MDSDEV"df > /dev/null	# update statfs data on diske2fsck -d -v -fn --mdsdb $MDSDB $MDSDEVRET=$?[ $RET -gt $MAX_ERR ] && echo "e2fsck returned $RET" && exit 123 || truei=0export 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	OSTDB_LIST="$OSTDB_LIST $OSTDB-$i"	i=$((i + 1))doneecho "LFSCK TEST 2"echo "lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNT"lfsck -c -l --mdsdb $MDSDB --ostdb $OSTDB_LIST $MOUNTRET=$?echo "LFSCK TEST 2 - finished with rc=$RET"[ $RET -ne 0 ] && exit 125 || trueif [ -z "$WAS_MOUNTED" ]; then	sh llmountcleanup.sh || exit 120fi#Cleanup rm -f $MDSDB $OSTDB-* || trueecho "$0: completed"

⌨️ 快捷键说明

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