mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 05:22:48 +00:00 
			
		
		
		
	When running the zconfig.sh, zpios-sanity.sh, and zfault.sh from the installed packages the 90-zfs.rules can cause failures. These will occur because the test suite assumes it has full control over loading/unloading the module stack. If the stack gets asynchronously loaded by the udev rule the test suite will treat it as a failure. Resolve the issue by disabling the offending rule during the tests and enabling it on exit. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
		
			
				
	
	
		
			172 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
#
 | 
						|
# ZFS/ZPOOL configuration test script.
 | 
						|
 | 
						|
basedir="$(dirname $0)"
 | 
						|
 | 
						|
SCRIPT_COMMON=common.sh
 | 
						|
if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then
 | 
						|
. "${basedir}/${SCRIPT_COMMON}"
 | 
						|
else
 | 
						|
echo "Missing helper script ${SCRIPT_COMMON}" && exit 1
 | 
						|
fi
 | 
						|
 | 
						|
PROG=zpios-sanity.sh
 | 
						|
HEADER=
 | 
						|
FAILS=0
 | 
						|
 | 
						|
usage() {
 | 
						|
cat << EOF
 | 
						|
USAGE:
 | 
						|
$0 [hvxfc]
 | 
						|
 | 
						|
DESCRIPTION:
 | 
						|
        ZPIOS sanity tests
 | 
						|
 | 
						|
OPTIONS:
 | 
						|
        -h      Show this message
 | 
						|
        -v      Verbose
 | 
						|
        -x      Destructive hd/sd/md/dm/ram tests
 | 
						|
	-f      Don't prompt due to -x
 | 
						|
	-c      Cleanup lo+file devices at start
 | 
						|
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
while getopts 'hvxfc?' OPTION; do
 | 
						|
	case $OPTION in
 | 
						|
	h)
 | 
						|
		usage
 | 
						|
		exit 1
 | 
						|
		;;
 | 
						|
	v)
 | 
						|
		VERBOSE=1
 | 
						|
		;;
 | 
						|
	x)
 | 
						|
		DANGEROUS=1
 | 
						|
		;;
 | 
						|
	f)
 | 
						|
		FORCE=1
 | 
						|
		;;
 | 
						|
	c)
 | 
						|
		CLEANUP=1
 | 
						|
		;;
 | 
						|
	?)
 | 
						|
		usage
 | 
						|
		exit
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
if [ $(id -u) != 0 ]; then
 | 
						|
	die "Must run as root"
 | 
						|
fi
 | 
						|
 | 
						|
# Initialize the test suite
 | 
						|
init
 | 
						|
 | 
						|
# Perform pre-cleanup is requested
 | 
						|
if [ ${CLEANUP} ]; then
 | 
						|
	${ZFS_SH} -u
 | 
						|
	cleanup_md_devices
 | 
						|
	cleanup_loop_devices
 | 
						|
	rm -f /tmp/zpool.cache.*
 | 
						|
fi
 | 
						|
 | 
						|
zpios_test() {
 | 
						|
	CONFIG=$1
 | 
						|
	TEST=$2
 | 
						|
	LOG=`mktemp`
 | 
						|
 | 
						|
	${ZPIOS_SH} -f -c ${CONFIG} -t ${TEST} &>${LOG}
 | 
						|
	if [ $? -ne 0 ]; then
 | 
						|
		FAILS=1
 | 
						|
 | 
						|
		if [ ${VERBOSE} ]; then
 | 
						|
			printf "FAIL:     %-13s\n" ${CONFIG}
 | 
						|
			cat ${LOG}
 | 
						|
		else
 | 
						|
			if [ ! ${HEADER} ]; then
 | 
						|
				head -2 ${LOG}
 | 
						|
				HEADER=1
 | 
						|
			fi
 | 
						|
 | 
						|
			printf "FAIL:     %-13s" ${CONFIG}
 | 
						|
			tail -1 ${LOG}
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		if [ ${VERBOSE} ]; then
 | 
						|
			cat ${LOG}
 | 
						|
		else
 | 
						|
			if [ ! ${HEADER} ]; then
 | 
						|
				head -2 ${LOG}
 | 
						|
				HEADER=1
 | 
						|
			fi
 | 
						|
 | 
						|
			tail -1 ${LOG}
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
 | 
						|
	rm -f ${LOG}
 | 
						|
}
 | 
						|
 | 
						|
if [ ${DANGEROUS} ] && [ ! ${FORCE} ]; then
 | 
						|
	cat << EOF
 | 
						|
The -x option was passed which will result in UNRECOVERABLE DATA LOSS
 | 
						|
on on the following block devices:
 | 
						|
 | 
						|
  /dev/sd[abcd]
 | 
						|
  /dev/hda
 | 
						|
  /dev/ram0
 | 
						|
  /dev/md0
 | 
						|
  /dev/dm-0
 | 
						|
 | 
						|
To continue please confirm by entering YES:
 | 
						|
EOF
 | 
						|
	read CONFIRM
 | 
						|
	if [ ${CONFIRM} != "YES" ] && [ ${CONFIRM} != "yes" ]; then
 | 
						|
		exit 0;
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
#
 | 
						|
# These configurations are all safe and pose no risk to any data on
 | 
						|
# the system which runs them.  They will confine all their IO to a
 | 
						|
# file in /tmp or a loopback device configured to use a file in /tmp.
 | 
						|
#
 | 
						|
SAFE_CONFIGS=(						\
 | 
						|
	file-raid0 file-raid10 file-raidz file-raidz2	\
 | 
						|
	lo-raid0 lo-raid10 lo-raidz lo-raidz2		\
 | 
						|
)
 | 
						|
 | 
						|
#
 | 
						|
# These configurations are down right dangerous.  They will attempt
 | 
						|
# to use various real block devices on your system which may contain
 | 
						|
# data you car about.  You are STRONGLY advised not to run this unless
 | 
						|
# you are certain there is no data on the system you care about.
 | 
						|
#
 | 
						|
DANGEROUS_CONFIGS=(					\
 | 
						|
	hda-raid0					\
 | 
						|
	sda-raid0					\
 | 
						|
	ram0-raid0					\
 | 
						|
	md0-raid10 md0-raid5				\
 | 
						|
	dm0-raid0					\
 | 
						|
)
 | 
						|
 | 
						|
TMP_CACHE=`mktemp -p /tmp zpool.cache.XXXXXXXX`
 | 
						|
${ZFS_SH} zfs="spa_config_path=${TMP_CACHE}" || die "Unable to load modules"
 | 
						|
 | 
						|
for CONFIG in ${SAFE_CONFIGS[*]}; do
 | 
						|
	zpios_test $CONFIG tiny
 | 
						|
done
 | 
						|
 | 
						|
if [ ${DANGEROUS} ]; then
 | 
						|
	for CONFIG in ${DANGEROUS_CONFIGS[*]}; do
 | 
						|
		zpios_test $CONFIG tiny
 | 
						|
	done
 | 
						|
fi
 | 
						|
 | 
						|
${ZFS_SH} -u
 | 
						|
 | 
						|
exit $FAILS
 |