mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
cbc6fab65c
Just like zconfig.sh the zpios-sanity.sh tests should run in a sanatized environment. This ensures they never conflict with an installed /etc/zfs/zpool.cache file. This commit additionally improves the -c cleanup option. It now removes the modules stack if loaded and destroys relevant md devices. This behavior is now identical to zconfig.sh.
169 lines
2.8 KiB
Bash
Executable File
169 lines
2.8 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
|
|
|
|
# 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
|