diff options
Diffstat (limited to 'scripts')
61 files changed, 589 insertions, 4863 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 74b8b31a5..7b2374a82 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,17 +1,67 @@ -SUBDIRS = zpool-config zpios-test zpios-profile - -EXTRA_DIST = dkms.mkconf dkms.postbuild kmodtool zfs2zol-patch.sed cstyle.pl - pkgdatadir = $(datadir)/@PACKAGE@ + dist_pkgdata_SCRIPTS = \ - $(top_builddir)/scripts/common.sh \ $(top_srcdir)/scripts/zimport.sh \ $(top_srcdir)/scripts/zfs.sh \ $(top_srcdir)/scripts/zfs-tests.sh \ $(top_srcdir)/scripts/zloop.sh \ - $(top_srcdir)/scripts/zpool-create.sh \ - $(top_srcdir)/scripts/zpios.sh \ - $(top_srcdir)/scripts/zpios-sanity.sh \ - $(top_srcdir)/scripts/zpios-survey.sh \ - $(top_srcdir)/scripts/smb.sh \ $(top_srcdir)/scripts/zfs-helpers.sh + +EXTRA_DIST = \ + common.sh.in \ + commitcheck.sh \ + dkms.mkconf \ + dkms.postbuild \ + kmodtool \ + paxcheck.sh \ + zfs2zol-patch.sed \ + cstyle.pl + +define EXTRA_ENVIRONMENT + +# Only required for in-tree use +export INTREE="yes" +export GDB="/usr/bin/libtool --mode=execute gdb" +export LDMOD=/sbin/insmod + +export CMD_DIR=@abs_top_builddir@/cmd +export UDEV_RULE_DIR=@abs_top_builddir@/udev/rules.d +export ZEDLET_ETC_DIR=$$CMD_DIR/zed/zed.d +export ZEDLET_LIBEXEC_DIR=$$CMD_DIR/zed/zed.d +export ZPOOL_SCRIPT_DIR=$$CMD_DIR/zpool/zpool.d +export ZPOOL_SCRIPTS_PATH=$$CMD_DIR/zpool/zpool.d + +export INSTALL_UDEV_DIR=@udevdir@ +export INSTALL_UDEV_RULE_DIR=@udevruledir@ +export INSTALL_MOUNT_HELPER_DIR=@mounthelperdir@ +export INSTALL_SYSCONF_DIR=@sysconfdir@ + +export KMOD_SPL=@SPL_OBJ@/module/spl/spl.ko +export KMOD_SPLAT=@SPL_OBJ@/module/splat/splat.ko +export KMOD_ZAVL=@abs_top_builddir@/module/avl/zavl.ko +export KMOD_ZNVPAIR=@abs_top_builddir@/module/nvpair/znvpair.ko +export KMOD_ZUNICODE=@abs_top_builddir@/module/unicode/zunicode.ko +export KMOD_ZCOMMON=@abs_top_builddir@/module/zcommon/zcommon.ko +export KMOD_ICP=@abs_top_builddir@/module/icp/icp.ko +export KMOD_ZFS=@abs_top_builddir@/module/zfs/zfs.ko +endef + +export EXTRA_ENVIRONMENT + +all-local: + -$(SED) -e '\|^export BIN_DIR=|s|$$|@abs_top_builddir@/bin|' \ + -e '\|^export SBIN_DIR=|s|$$|@abs_top_builddir@/bin|' \ + -e '\|^export ZTS_DIR=|s|$$|@abs_top_srcdir@/tests|' \ + -e '\|^export SCRIPT_DIR=|s|$$|@abs_top_srcdir@/scripts|' \ + common.sh.in >common.sh + -echo "$$EXTRA_ENVIRONMENT" >>common.sh + +clean-local: + -$(RM) common.sh + +install-data-hook: + -$(SED) -e '\|^export BIN_DIR=|s|$$|@bindir@|' \ + -e '\|^export SBIN_DIR=|s|$$|@sbindir@|' \ + -e '\|^export ZTS_DIR=|s|$$|@datadir@/@PACKAGE@|' \ + -e '\|^export SCRIPT_DIR=|s|$$|@datadir@/@PACKAGE@|' \ + common.sh.in >$(DESTDIR)$(datadir)/@PACKAGE@/common.sh diff --git a/scripts/common.sh.in b/scripts/common.sh.in index e1a9b82d2..134c9cbfd 100644 --- a/scripts/common.sh.in +++ b/scripts/common.sh.in @@ -1,768 +1,20 @@ -#!/bin/bash -# -# Common support functions for testing scripts. If a script-config -# files is available it will be sourced so in-tree kernel modules and -# utilities will be used. If no script-config can be found then the -# installed kernel modules and utilities will be used. - -basedir="$(dirname $0)" - -SCRIPT_CONFIG=zfs-script-config.sh -if [ -f "${basedir}/../${SCRIPT_CONFIG}" ]; then -. "${basedir}/../${SCRIPT_CONFIG}" -else -KERNEL_MODULES=(zlib_deflate zlib_inflate) -MODULES=(spl splat zavl znvpair zunicode zcommon icp zfs) -fi - -PROG="<define PROG>" -CLEANUP= -VERBOSE= -VERBOSE_FLAG= -FORCE= -FORCE_FLAG= -ERROR= -RAID0S=() -RAID10S=() -RAIDZS=() -RAIDZ2S=() -TESTS_RUN=${TESTS_RUN:-'*'} -TESTS_SKIP=${TESTS_SKIP:-} - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -pkgdatadir=@datarootdir@/@PACKAGE@ -bindir=@bindir@ -sbindir=@sbindir@ -udevdir=@udevdir@ -udevruledir=@udevruledir@ -mounthelperdir=@mounthelperdir@ -sysconfdir=@sysconfdir@ -localstatedir=@localstatedir@ - -ETCDIR=${ETCDIR:-/etc} -DEVDIR=${DEVDIR:-/dev/disk/by-vdev} -ZPOOLDIR=${ZPOOLDIR:-${pkgdatadir}/zpool-config} -ZPIOSDIR=${ZPIOSDIR:-${pkgdatadir}/zpios-test} -ZPIOSPROFILEDIR=${ZPIOSPROFILEDIR:-${pkgdatadir}/zpios-profile} -TESTSDIR=${TESTSDIR:-${pkgdatadir}/zfs-tests} -RUNFILEDIR=${RUNFILEDIR:-${pkgdatadir}/runfiles} - -ZDB=${ZDB:-${sbindir}/zdb} -ZFS=${ZFS:-${sbindir}/zfs} -ZINJECT=${ZINJECT:-${sbindir}/zinject} -ZHACK=${ZHACK:-${sbindir}/zhack} -ZPOOL=${ZPOOL:-${sbindir}/zpool} -ZTEST=${ZTEST:-${sbindir}/ztest} -ZPIOS=${ZPIOS:-${sbindir}/zpios} - -COMMON_SH=${COMMON_SH:-${pkgdatadir}/common.sh} -ZFS_SH=${ZFS_SH:-${pkgdatadir}/zfs.sh} -ZPOOL_CREATE_SH=${ZPOOL_CREATE_SH:-${pkgdatadir}/zpool-create.sh} -ZPIOS_SH=${ZPIOS_SH:-${pkgdatadir}/zpios.sh} -ZPIOS_SURVEY_SH=${ZPIOS_SURVEY_SH:-${pkgdatadir}/zpios-survey.sh} -TEST_RUNNER=${TEST_RUNNER:-${pkgdatadir}/test-runner/bin/test-runner.py} -STF_TOOLS=${STF_TOOLS:-${pkgdatadir}/test-runner} -STF_SUITE=${STF_SUITE:-${pkgdatadir}/zfs-tests} - -LDMOD=${LDMOD:-/sbin/modprobe} -LSMOD=${LSMOD:-/sbin/lsmod} -RMMOD=${RMMOD:-/sbin/rmmod} -INFOMOD=${INFOMOD:-/sbin/modinfo} -LOSETUP=${LOSETUP:-/sbin/losetup} -MDADM=${MDADM:-/sbin/mdadm} -DMSETUP=${DMSETUP:-/sbin/dmsetup} -PARTED=${PARTED:-/sbin/parted} -BLOCKDEV=${BLOCKDEV:-/sbin/blockdev} -LSSCSI=${LSSCSI:-/usr/bin/lsscsi} -SCSIRESCAN=${SCSIRESCAN:-/usr/bin/scsi-rescan} -SYSCTL=${SYSCTL:-/sbin/sysctl} -UDEVADM=${UDEVADM:-/sbin/udevadm} -AWK=${AWK:-/usr/bin/awk} -GDB=${GDB:-/usr/bin/gdb} - -ZED_PIDFILE=${ZED_PIDFILE:-${localstatedir}/run/zed.pid} - -COLOR_BLACK="\033[0;30m" -COLOR_DK_GRAY="\033[1;30m" -COLOR_BLUE="\033[0;34m" -COLOR_LT_BLUE="\033[1;34m" -COLOR_GREEN="\033[0;32m" -COLOR_LT_GREEN="\033[1;32m" -COLOR_CYAN="\033[0;36m" -COLOR_LT_CYAN="\033[1;36m" -COLOR_RED="\033[0;31m" -COLOR_LT_RED="\033[1;31m" -COLOR_PURPLE="\033[0;35m" -COLOR_LT_PURPLE="\033[1;35m" -COLOR_BROWN="\033[0;33m" -COLOR_YELLOW="\033[1;33m" -COLOR_LT_GRAY="\033[0;37m" -COLOR_WHITE="\033[1;37m" -COLOR_RESET="\033[0m" - -die() { - echo -e "${PROG}: $1" >&2 - exit 1 -} - -msg() { - if [ ${VERBOSE} ]; then - echo "$@" - fi -} - -pass() { - echo -e "${COLOR_GREEN}Pass${COLOR_RESET}" -} - -fail() { - echo -e "${COLOR_RED}Fail${COLOR_RESET} ($1)" - exit $1 -} - -skip() { - echo -e "${COLOR_BROWN}Skip${COLOR_RESET}" -} - -populate() { - local ROOT=$1 - local MAX_DIR_SIZE=$2 - local MAX_FILE_SIZE=$3 - - mkdir -p $ROOT/{a,b,c,d,e,f,g}/{h,i} - DIRS=`find $ROOT` - - for DIR in $DIRS; do - COUNT=$(($RANDOM % $MAX_DIR_SIZE)) - - for i in `seq $COUNT`; do - FILE=`mktemp -p ${DIR}` - SIZE=$(($RANDOM % $MAX_FILE_SIZE)) - dd if=/dev/urandom of=$FILE bs=1k count=$SIZE &>/dev/null - done - done - - return 0 -} - -init() { - # Create a random directory tree of files and sub-directories to - # to act as a copy source for the various regression tests. - SRC_DIR=`mktemp -d -p /var/tmp/ zfs.src.XXXXXXXX` - trap "rm -Rf $SRC_DIR" INT TERM EXIT - populate $SRC_DIR 10 100 -} - -check_modules() { - local LOADED_MODULES=() - local MISSING_MODULES=() - - for MOD in ${MODULES[*]}; do - local NAME=`basename $MOD .ko` - - if ${LSMOD} | egrep -q "^${NAME}"; then - LOADED_MODULES=(${NAME} ${LOADED_MODULES[*]}) - fi - - if [ ${INFOMOD} ${MOD} 2>/dev/null ]; then - MISSING_MODULES=("\t${MOD}\n" ${MISSING_MODULES[*]}) - fi - done - - if [ ${#LOADED_MODULES[*]} -gt 0 ]; then - ERROR="Unload these modules with '${PROG} -u':\n" - ERROR="${ERROR}${LOADED_MODULES[*]}" - return 1 - fi - - if [ ${#MISSING_MODULES[*]} -gt 0 ]; then - ERROR="The following modules can not be found," - ERROR="${ERROR} ensure your source trees are built:\n" - ERROR="${ERROR}${MISSING_MODULES[*]}" - return 1 - fi - - return 0 -} - -load_module() { - local NAME=`basename $1 .ko` - - if [ ${VERBOSE} ]; then - echo "Loading ${NAME} ($@)" - fi - - ${LDMOD} $* &>/dev/null - if [ $? -ne 0 ]; then - echo "Failed to load ${NAME} ($@)" - return 1 - fi - - return 0 -} - -load_modules() { - mkdir -p /etc/zfs - - for MOD in ${KERNEL_MODULES[*]}; do - load_module ${MOD} >/dev/null - done - - for MOD in ${MODULES[*]}; do - local NAME=`basename ${MOD} .ko` - local VALUE= - - for OPT in "$@"; do - OPT_NAME=`echo ${OPT} | cut -f1 -d'='` - - if [ ${NAME} = "${OPT_NAME}" ]; then - VALUE=`echo ${OPT} | cut -f2- -d'='` - fi - done - - load_module ${MOD} ${VALUE} || return 1 - done - - if [ ${VERBOSE} ]; then - echo "Successfully loaded ZFS module stack" - fi - - return 0 -} - -unload_module() { - local NAME=`basename $1 .ko` - - if [ ${VERBOSE} ]; then - echo "Unloading ${NAME} ($@)" - fi - - ${RMMOD} ${NAME} || ERROR="Failed to unload ${NAME}" return 1 - - return 0 -} - -unload_modules() { - local MODULES_REVERSE=( $(echo ${MODULES[@]} | - ${AWK} '{for (i=NF;i>=1;i--) printf $i" "} END{print ""}') ) - - for MOD in ${MODULES_REVERSE[*]}; do - local NAME=`basename ${MOD} .ko` - local USE_COUNT=`${LSMOD} | - egrep "^${NAME} "| ${AWK} '{print $3}'` - - if [ "${USE_COUNT}" = 0 ] ; then - unload_module ${MOD} || return 1 - fi - done - - if [ ${VERBOSE} ]; then - echo "Successfully unloaded ZFS module stack" - fi - - return 0 -} - -# -# Check that the mdadm utilities are installed. -# -check_loop_utils() { - test -f ${LOSETUP} || die "${LOSETUP} utility must be installed" -} - - -# -# Find and return an unused loop device. A new /dev/loopN node will be -# created if required. The kernel loop driver will automatically register -# the minor as long as it's less than /sys/module/loop/parameters/max_loop. -# -unused_loop_device() { - local DEVICE=$(${LOSETUP} -f) - local MAX_LOOP_PATH="/sys/module/loop/parameters/max_loop" - local MAX_LOOP; - - # An existing /dev/loopN device was available. - if [ -n "${DEVICE}" ]; then - echo "${DEVICE}" - return 0 - fi - - # Create a new /dev/loopN provided we are not at MAX_LOOP. - if [ -f "${MAX_LOOP_PATH}" ]; then - MAX_LOOP=`cat /sys/module/loop/parameters/max_loop` - if [ ${MAX_LOOP} -eq 0 ]; then - MAX_LOOP=255 - fi - - for (( i=0; i<=${MAX_LOOP}; i++ )); do - DEVICE="/dev/loop$i" - - if [ -b "${DEVICE}" ]; then - continue - else - mknod -m660 "${DEVICE}" b 7 $i - chown root.disk "${DEVICE}" - chmod 666 "${DEVICE}" - - echo "${DEVICE}" - return 0 - fi - done - fi - - die "Error: Unable to create new loopback device" -} - -# -# This can be slightly dangerous because the loop devices we are -# cleaning up may not be ours. However, if the devices are currently -# in use we will not be able to remove them, and we only remove -# devices which include 'zpool' or 'deleted' in the name. So any -# damage we might do should be limited to other zfs related testing. -# -cleanup_loop_devices() { - local TMP_FILE=`mktemp` - - ${LOSETUP} -a | tr -d '()' >${TMP_FILE} - ${AWK} -F":" -v losetup="$LOSETUP" \ - '/zpool/ || /deleted/ { system("losetup -d "$1) }' ${TMP_FILE} - ${AWK} -F" " '/zpool/ || /deleted/ { system("rm -f "$3) }' ${TMP_FILE} - - rm -f ${TMP_FILE} -} - -# -# Destroy the passed loopback devices, this is used when you know -# the names of the loopback devices. -# -destroy_loop_devices() { - local LODEVICES="$1" - - msg "Destroying ${LODEVICES}" - ${LOSETUP} -d ${LODEVICES} || \ - die "Error $? destroying ${FILE} -> ${DEVICE} loopback" - - rm -f ${FILES} - return 0 -} - -# -# Create a device label taking care to briefly wait if udev needs to settle. -# -label() { - local DEVICE=$1 - local LABEL=$2 - - wait_udev ${DEVICE} 30 || return 1 - ${PARTED} ${DEVICE} --script -- mklabel ${LABEL} || return 2 - - return 0 -} - -# -# Create a primary partition on a block device. -# -partition() { - local DEVICE=$1 - local TYPE=$2 - local START=$3 - local END=$4 - - ${PARTED} --align optimal ${DEVICE} --script -- \ - mkpart ${TYPE} ${START} ${END} || return 1 - udev_trigger - - return 0 -} - -# -# Create a filesystem on the block device -# -format() { - local DEVICE=$1 - local FSTYPE=$2 - - # Force 4K blocksize, else mkfs.ext2 tries to use 8K, which - # won't mount - /sbin/mkfs.${FSTYPE} -b 4096 -F -q ${DEVICE} >/dev/null || return 1 - - return 0 -} - -# -# Check that the mdadm utilities are installed. -# -check_md_utils() { - test -f ${MDADM} || die "${MDADM} utility must be installed" - test -f ${PARTED} || die "${PARTED} utility must be installed" -} - -check_md_partitionable() { - local LOFILE=`mktemp -p /tmp zpool-lo.XXXXXXXX` - local LODEVICE=`unused_loop_device` - local MDDEVICE=`unused_md_device` - local RESULT=1 - - check_md_utils - - rm -f ${LOFILE} - dd if=/dev/zero of=${LOFILE} bs=1M count=0 seek=16 \ - &>/dev/null || return ${RESULT} - - msg "Creating ${LODEVICE} using ${LOFILE}" - ${LOSETUP} ${LODEVICE} ${LOFILE} - if [ $? -ne 0 ]; then - rm -f ${LOFILE} - return ${RESULT} - fi - - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null - if [ $? -ne 0 ]; then - destroy_loop_devices ${LODEVICE} - rm -f ${LOFILE} - return ${RESULT} - fi - wait_udev ${MDDEVICE} 30 - - ${BLOCKDEV} --rereadpt ${MDDEVICE} 2>/dev/null - RESULT=$? - - destroy_md_devices ${MDDEVICE} - destroy_loop_devices ${LODEVICE} - rm -f ${LOFILE} - - return ${RESULT} -} - -# -# Find and return an unused md device. -# -unused_md_device() { - for (( i=0; i<32; i++ )); do - MDDEVICE=md${i} - - # Skip active devicesudo in /proc/mdstat. - grep -q "${MDDEVICE} " /proc/mdstat && continue - - # Device doesn't exist, use it. - if [ ! -e $/dev/{MDDEVICE} ]; then - echo /dev/${MDDEVICE} - return - fi - - # Device exists but may not be in use. - if [ -b /dev/${MDDEVICE} ]; then - ${MDADM} --detail /dev/${MDDEVICE} &>/dev/null - if [ $? -eq 1 ]; then - echo /dev/${MDDEVICE} - return - fi - fi - done - - die "Error: Unable to find unused md device" -} - -# -# This can be slightly dangerous because it is possible the md devices -# we are cleaning up may not be ours. However, if the devices are -# currently in use we will not be able to remove them, and even if -# we remove devices which were not out we do not zero the super block -# so you should be able to reconstruct them. -# -cleanup_md_devices() { - destroy_md_devices "`ls /dev/md* 2>/dev/null | grep -v p`" - udev_trigger -} - -# -# Destroy the passed md devices, this is used when you know -# the names of the md devices. -# -destroy_md_devices() { - local MDDEVICES="$1" - - msg "Destroying ${MDDEVICES}" - for MDDEVICE in ${MDDEVICES}; do - ${MDADM} --stop ${MDDEVICE} &>/dev/null - ${MDADM} --remove ${MDDEVICE} &>/dev/null - ${MDADM} --detail ${MDDEVICE} &>/dev/null - done - - return 0 -} - -# -# Check that the scsi utilities are installed. -# -check_sd_utils() { - ${INFOMOD} scsi_debug &>/dev/null || die "scsi_debug module required" - test -f ${LSSCSI} || die "${LSSCSI} utility must be installed" -} - -# -# Rescan the scsi bus for scsi_debug devices. It is preferable to use the -# scsi-rescan tool if it is installed, but if it's not we can fall back to -# removing and readding the device manually. This rescan will only effect -# the first scsi_debug device if scsi-rescan is missing. -# -scsi_rescan() { - local AWK_SCRIPT="/scsi_debug/ { print \$1; exit }" - - if [ -f ${SCSIRESCAN} ]; then - ${SCSIRESCAN} --forcerescan --remove &>/dev/null - else - local SCSIID=`${LSSCSI} | ${AWK} "${AWK_SCRIPT}" | tr -d '[]'` - local SCSIHOST=`echo ${SCSIID} | cut -f1 -d':'` - echo 1 >"/sys/class/scsi_device/${SCSIID}/device/delete" - udev_trigger - echo "- - -" >/sys/class/scsi_host/host${SCSIHOST}/scan - udev_trigger - fi -} - -# -# Trigger udev and wait for it to settle. -# -udev_trigger() { - if [ -f ${UDEVADM} ]; then - ${UDEVADM} trigger --action=change --subsystem-match=block - ${UDEVADM} settle - else - /sbin/udevtrigger - /sbin/udevsettle - fi -} - -# -# The following udev helper functions assume that the provided -# udev rules file will create a /dev/disk/by-vdev/<CHANNEL><RANK> -# disk mapping. In this mapping each CHANNEL is represented by -# the letters a-z, and the RANK is represented by the numbers -# 1-n. A CHANNEL should identify a group of RANKS which are all -# attached to a single controller, each RANK represents a disk. -# This provides a simply mechanism to locate a specific drive -# given a known hardware configuration. -# -udev_setup() { - local SRC_PATH=$1 - - # When running in tree manually construct symlinks in tree to - # the proper devices. Symlinks are installed for all entries - # in the config file regardless of if that device actually - # exists. When installed as a package udev can be relied on for - # this and it will only create links for devices which exist. - if [ ${INTREE} ]; then - PWD=`pwd` - mkdir -p ${DEVDIR}/ - cd ${DEVDIR}/ - ${AWK} '!/^#/ && /./ { system( \ - "ln -f -s /dev/disk/by-path/"$2" "$1";" \ - "ln -f -s /dev/disk/by-path/"$2"-part1 "$1"p1;" \ - "ln -f -s /dev/disk/by-path/"$2"-part9 "$1"p9;" \ - ) }' $SRC_PATH - cd ${PWD} - else - DST_FILE=`basename ${SRC_PATH} | cut -f1-2 -d'.'` - DST_PATH=/etc/zfs/${DST_FILE} - - if [ -e ${DST_PATH} ]; then - die "Error: Config ${DST_PATH} already exists" - fi - - cp ${SRC_PATH} ${DST_PATH} - udev_trigger - fi - - return 0 -} - -udev_cleanup() { - local SRC_PATH=$1 - - if [ ${INTREE} ]; then - PWD=`pwd` - cd ${DEVDIR}/ - ${AWK} '!/^#/ && /./ { system( \ - "rm -f "$1" "$1"p1 "$1"p9") }' $SRC_PATH - cd ${PWD} - fi - - return 0 -} - -udev_cr2d() { - local CHANNEL=`echo "obase=16; $1+96" | bc` - local RANK=$2 - - printf "\x${CHANNEL}${RANK}" -} - -udev_raid0_setup() { - local RANKS=$1 - local CHANNELS=$2 - local IDX=0 - - RAID0S=() - for RANK in `seq 1 ${RANKS}`; do - for CHANNEL in `seq 1 ${CHANNELS}`; do - DISK=`udev_cr2d ${CHANNEL} ${RANK}` - RAID0S[${IDX}]="${DEVDIR}/${DISK}" - let IDX=IDX+1 - done - done - - return 0 -} - -udev_raid10_setup() { - local RANKS=$1 - local CHANNELS=$2 - local IDX=0 - - RAID10S=() - for RANK in `seq 1 ${RANKS}`; do - for CHANNEL1 in `seq 1 2 ${CHANNELS}`; do - let CHANNEL2=CHANNEL1+1 - DISK1=`udev_cr2d ${CHANNEL1} ${RANK}` - DISK2=`udev_cr2d ${CHANNEL2} ${RANK}` - GROUP="${DEVDIR}/${DISK1} ${DEVDIR}/${DISK2}" - RAID10S[${IDX}]="mirror ${GROUP}" - let IDX=IDX+1 - done - done - - return 0 -} - -udev_raidz_setup() { - local RANKS=$1 - local CHANNELS=$2 - - RAIDZS=() - for RANK in `seq 1 ${RANKS}`; do - RAIDZ=("raidz") - - for CHANNEL in `seq 1 ${CHANNELS}`; do - DISK=`udev_cr2d ${CHANNEL} ${RANK}` - RAIDZ[${CHANNEL}]="${DEVDIR}/${DISK}" - done - - RAIDZS[${RANK}]="${RAIDZ[*]}" - done - - return 0 -} - -udev_raidz2_setup() { - local RANKS=$1 - local CHANNELS=$2 - - RAIDZ2S=() - for RANK in `seq 1 ${RANKS}`; do - RAIDZ2=("raidz2") - - for CHANNEL in `seq 1 ${CHANNELS}`; do - DISK=`udev_cr2d ${CHANNEL} ${RANK}` - RAIDZ2[${CHANNEL}]="${DEVDIR}/${DISK}" - done - - RAIDZ2S[${RANK}]="${RAIDZ2[*]}" - done - - return 0 -} - -run_one_test() { - local TEST_NUM=$1 - local TEST_NAME=$2 - - printf "%-4d %-34s " ${TEST_NUM} "${TEST_NAME}" - test_${TEST_NUM} -} - -skip_one_test() { - local TEST_NUM=$1 - local TEST_NAME=$2 - - printf "%-4d %-34s " ${TEST_NUM} "${TEST_NAME}" - skip -} - -run_test() { - local TEST_NUM=$1 - local TEST_NAME=$2 - - for i in ${TESTS_SKIP[@]}; do - if [[ $i == ${TEST_NUM} ]] ; then - skip_one_test ${TEST_NUM} "${TEST_NAME}" - return 0 - fi - done - - if [ "${TESTS_RUN[0]}" = "*" ]; then - run_one_test ${TEST_NUM} "${TEST_NAME}" - else - for i in ${TESTS_RUN[@]}; do - if [[ $i == ${TEST_NUM} ]] ; then - run_one_test ${TEST_NUM} "${TEST_NAME}" - return 0 - fi - done - - skip_one_test ${TEST_NUM} "${TEST_NAME}" - fi -} - -wait_udev() { - local DEVICE=$1 - local DELAY=$2 - local COUNT=0 - - udev_trigger - while [ ! -e ${DEVICE} ]; do - if [ ${COUNT} -gt ${DELAY} ]; then - return 1 - fi - - let COUNT=${COUNT}+1 - sleep 1 - done - - return 0 -} - -stack_clear() { - local STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size - local STACK_TRACER_ENABLED=/proc/sys/kernel/stack_tracer_enabled - - if [ -e $STACK_MAX_SIZE ]; then - echo 1 >$STACK_TRACER_ENABLED - echo 0 >$STACK_MAX_SIZE - fi -} - -stack_check() { - local STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size - local STACK_TRACE=/sys/kernel/debug/tracing/stack_trace - local STACK_LIMIT=7000 - - if [ -e $STACK_MAX_SIZE ]; then - STACK_SIZE=`cat $STACK_MAX_SIZE` - - if [ $STACK_SIZE -ge $STACK_LIMIT ]; then - echo - echo "Warning: max stack size $STACK_SIZE bytes" - cat $STACK_TRACE - fi - fi -} - -kill_zed() { - if [ -f $ZED_PIDFILE ]; then - kill $(cat $ZED_PIDFILE) - fi -} +#!/bin/sh + +# Directories +export BIN_DIR= +export SBIN_DIR= +export ZTS_DIR= +export SCRIPT_DIR= + +# General commands +export ZDB=${ZDB:-$SBIN_DIR/zdb} +export ZFS=${ZFS:-$SBIN_DIR/zfs} +export ZPOOL=${ZPOOL:-$SBIN_DIR/zpool} +export ZTEST=${ZTEST:-$SBIN_DIR/ztest} +export ZFS_SH=${ZFS_SH:-$SCRIPT_DIR/zfs.sh} + +# Test Suite +export RUNFILE_DIR=${RUNFILE_DIR:-$ZTS_DIR/runfiles} +export TEST_RUNNER=${TEST_RUNNER:-$ZTS_DIR/test-runner/bin/test-runner.py} +export STF_TOOLS=${STF_TOOLS:-$ZTS_DIR/test-runner} +export STF_SUITE=${STF_SUITE:-$ZTS_DIR/zfs-tests} diff --git a/scripts/dkms.mkconf b/scripts/dkms.mkconf index ad97f9bca..c3c74910b 100755 --- a/scripts/dkms.mkconf +++ b/scripts/dkms.mkconf @@ -40,10 +40,6 @@ PRE_BUILD="configure then echo --enable-debug fi - if [[ \${ZFS_DKMS_ENABLE_DMU_TX,,} == @(y|yes) ]] - then - echo --enable-debug-dmu-tx - fi } ) " @@ -86,10 +82,7 @@ DEST_MODULE_LOCATION[3]="/extra/zcommon/zcommon" BUILT_MODULE_NAME[4]="zfs" BUILT_MODULE_LOCATION[4]="module/zfs/" DEST_MODULE_LOCATION[4]="/extra/zfs/zfs" -BUILT_MODULE_NAME[5]="zpios" -BUILT_MODULE_LOCATION[5]="module/zpios/" -DEST_MODULE_LOCATION[5]="/extra/zpios/zpios" -BUILT_MODULE_NAME[6]="icp" -BUILT_MODULE_LOCATION[6]="module/icp/" -DEST_MODULE_LOCATION[6]="/extra/icp/icp" +BUILT_MODULE_NAME[5]="icp" +BUILT_MODULE_LOCATION[5]="module/icp/" +DEST_MODULE_LOCATION[5]="/extra/icp/icp" EOF diff --git a/scripts/dkms.postbuild b/scripts/dkms.postbuild index 3cbc7c7ce..299c02d6e 100755 --- a/scripts/dkms.postbuild +++ b/scripts/dkms.postbuild @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh PROG=$0 @@ -19,6 +19,6 @@ if [ -z "${arch}" -o -z "${kver}" -o -z "${pkgname}" -o \ exit 1 fi -cp ${tree}/${pkgname}/${pkgver}/build/zfs_config.h \ - ${tree}/${pkgname}/${pkgver}/build/module/Module.symvers \ - ${tree}/${pkgname}/${pkgver}/${kver}/${arch}/ +cp "${tree}/${pkgname}/${pkgver}/build/zfs_config.h" \ + "${tree}/${pkgname}/${pkgver}/build/module/Module.symvers" \ + "${tree}/${pkgname}/${pkgver}/${kver}/${arch}/" diff --git a/scripts/smb.sh b/scripts/smb.sh deleted file mode 100755 index 7cf6c4bc1..000000000 --- a/scripts/smb.sh +++ /dev/null @@ -1,214 +0,0 @@ -#!/bin/bash - -BASETANK="share" -DATE=`date "+%Y%m%d"` - -TEST_SMBFS=0 -TEST_DESTROY=0 - -if [ -z "$1" ]; then - echo "Usage: `basename $0` [unpack]<[smbfs][snapshot][all]>" - exit 1 -fi - -set_onoff() { - type="$1" - dataset="$2" - toggle="$3" - - current=`zfs get -H $type -o value $dataset` - if [ "$current" != "$toggle" ]; then - run "zfs set $type=$toggle $dataset" - fi -} - -check_exists() { - dataset="$1" - - extra="" - [ -n "$2" ] && extra="$2" - - zfs get all "$dataset" > /dev/null 2>&1 - if [ $? != 0 ]; then - run "zfs create $extra $dataset" - fi -} - -check_shares() { - if [ "$TEST_SMBFS" == "1" ]; then - echo "Shares:" - echo "=> usershare list:" - net usershare list - echo - echo "=> /etc/dfs/sharetab:" - cat /etc/dfs/sharetab - echo - fi - - sleep 2 -} - -test_header() { - echo "TEST: $*" - echo "======================================" -} - -run() { - cmd="$*" - - echo "CMD: $cmd" - $cmd -} - -# --------- -# Needs more work... -if echo "$*" | grep -qi "unpack"; then - zfs unmount -a - zfs unshare -a - run "zfs destroy -r $BASETANK/tests" - - sh /etc/init.d/zfs stop - -# for tid in `grep ^tid /proc/net/iet/volume | sed "s@.*:\([0-9].*\) name.*@\1@"` -# do -# ietadm --op delete --tid $tid -# done - - set -e - rmmod `lsmod | grep ^z | grep -v zlib_deflate | sed 's@ .*@@'` spl zlib_deflate - - pushd / > /dev/null - [ -f "tmp/zfs.tgz" ] && tar xzf tmp/zfs.tgz && rm tmp/zfs.tgz - [ -f "tmp/spl.tgz" ] && tar xzf tmp/spl.tgz && rm tmp/spl.tgz - popd > /dev/null - - depmod -a - - sh /etc/init.d/zfs start - set +e -fi - -# --------- -if echo "$*" | egrep -qi "smbfs|all"; then - check_exists $BASETANK/tests - - TEST_SMBFS=1 - - test_header "Exists || Create" - str= - for volnr in 1 2 3; do - check_exists $BASETANK/tests/smbfs$volnr - - str="$str $BASETANK/tests/smbfs$volnr" - done - run "zfs get sharesmb $str" - - # Set sharesmb=on - test_header "Enable SMB share" - for volnr in 1 2 3; do - set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on - check_shares - done - - # Share all - test_header "Share all (individually)" - for volnr in 1 2 3; do - run "zfs share $BASETANK/tests/smbfs$volnr" - check_shares - done - - # Unshare all - test_header "Unshare all (individually)" - for volnr in 1 2 3; do - run "zfs unshare $BASETANK/tests/smbfs$volnr" - check_shares - done - - # Change mountpoint - first unshare and then share individual - test_header "Change mount point (unshare ; share)" - mkdir -p /tests - set_onoff sharesmb "$str" off - for volnr in 3 1 2; do - run "zfs set mountpoint=/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr" - echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" - mount | grep ^$BASETANK/tests/smbfs$volnr - echo - - run "zfs mount $BASETANK/tests/smbfs$volnr" - echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" - mount | grep ^$BASETANK/tests/smbfs$volnr - echo - - set_onoff sharesmb "$BASETANK/tests/smbfs$volnr" on - check_shares - - run "zfs share $BASETANK/tests/smbfs$volnr" - check_shares - - echo "-------------------" - done - - # Change mountpoint - remounting - test_header "Change mount point (remounting)" - for volnr in 3 1 2; do - run "zfs set mountpoint=/$BASETANK/tests/smbfs$volnr $BASETANK/tests/smbfs$volnr" - echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" - mount | grep ^$BASETANK/tests/smbfs$volnr - echo - # => Doesn't seem to remount (!?) - - run "zfs mount $BASETANK/tests/smbfs$volnr" - echo "CMD: mount | grep ^$BASETANK/tests/smbfs$volnr" - mount | grep ^$BASETANK/tests/smbfs$volnr - echo - # => Doesn't seem to reshare (!?) - - check_shares - - run "zfs share $BASETANK/tests/smbfs$volnr" - check_shares - - echo "-------------------" - done -fi - -# --------- -if echo "$*" | egrep -qi "smbfs|all"; then - test_header "Unshare + Share all" - - run "zfs share -a" ; check_shares - run "zfs unshare -a" ; check_shares -fi - -# --------- -if echo "$*" | grep -qi "snapshot|all"; then - test_header "Snapshots" - - echo ; echo "-------------------" - check_exists $BASETANK/tests/destroy - check_exists $BASETANK/tests/destroy/destroy1 - run "zfs destroy -r $BASETANK/tests/destroy" - - echo ; echo "-------------------" - check_exists $BASETANK/tests/destroy - run "zfs snapshot $BASETANK/tests/destroy@$DATE" - run "zfs destroy -r $BASETANK/tests/destroy" - - echo ; echo "-------------------" - check_exists $BASETANK/tests/destroy - run "zfs snapshot $BASETANK/tests/destroy@$DATE" - run "zfs destroy -r $BASETANK/tests/destroy@$DATE" - run "zfs destroy -r $BASETANK/tests/destroy" -fi - -if echo "$*" | egrep -qi "smbfs|snapshot|all"; then - test_header "Cleanup (Share all + Destroy all)" - - run "zfs share -a" - check_shares - - run "zfs destroy -r $BASETANK/tests" - check_shares - - run "zfs list" -fi diff --git a/scripts/zfs-helpers.sh b/scripts/zfs-helpers.sh index d2da575f4..3fbe64a52 100755 --- a/scripts/zfs-helpers.sh +++ b/scripts/zfs-helpers.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # This script is designed to facilitate in-tree development and testing # by installing symlinks on your system which refer to in-tree helper @@ -17,20 +17,30 @@ # --sysconfdir=DIR install zfs configuration files [PREFIX/etc] # -basedir="$(dirname $0)" - +BASE_DIR=$(dirname "$0") SCRIPT_COMMON=common.sh -if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then -. "${basedir}/${SCRIPT_COMMON}" +if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then + . "${BASE_DIR}/${SCRIPT_COMMON}" else -echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 + echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi PROG=zfs-helpers.sh -DRYRUN= -INSTALL= -REMOVE= -VERBOSE= +DRYRUN="no" +INSTALL="no" +REMOVE="no" +VERBOSE="no" + +fail() { + echo "${PROG}: $1" >&2 + exit 1 +} + +msg() { + if [ "$VERBOSE" = "yes" ]; then + echo "$@" + fi +} usage() { cat << EOF @@ -60,16 +70,16 @@ while getopts 'hdirv' OPTION; do exit 1 ;; d) - DRYRUN=1 + DRYRUN="yes" ;; i) - INSTALL=1 + INSTALL="yes" ;; r) - REMOVE=1 + REMOVE="yes" ;; v) - VERBOSE=1 + VERBOSE="yes" ;; ?) usage @@ -78,27 +88,29 @@ while getopts 'hdirv' OPTION; do esac done -if [ "${INSTALL}" -a "${REMOVE}" ]; then - usage - die "Specify -i or -r but not both" +if [ "$INSTALL" = "yes" -a "$REMOVE" = "yes" ]; then + fail "Specify -i or -r but not both" +fi + +if [ "$INSTALL" = "no" -a "$REMOVE" = "no" ]; then + fail "Either -i or -r must be specified" fi -if [ ! "${INSTALL}" -a ! "${REMOVE}" ]; then - usage - die "Either -i or -r must be specified" +if [ "$(id -u)" != "0" ]; then + fail "Must run as root" fi -if [ $(id -u) != 0 ]; then - die "Must run as root" +if [ "$INTREE" != "yes" ]; then + fail "Must be run in-tree" fi -if [ "$VERBOSE" ]; then +if [ "$VERBOSE" = "yes" ]; then echo "--- Configuration ---" - echo "udevdir: $udevdir" - echo "udevruledir: $udevruledir" - echo "mounthelperdir: $mounthelperdir" - echo "sysconfdir: $sysconfdir" - echo "DRYRUN: $DRYRUN" + echo "udevdir: $INSTALL_UDEV_DIR" + echo "udevruledir: $INSTALL_UDEV_RULE_DIR" + echo "mounthelperdir: $INSTALL_MOUNT_HELPER_DIR" + echo "sysconfdir: $INSTALL_SYSCONF_DIR" + echo "dryrun: $DRYRUN" echo fi @@ -106,18 +118,19 @@ install() { local src=$1 local dst=$2 - if [ -h $dst ]; then + if [ -h "$dst" ]; then echo "Symlink exists: $dst" - elif [ -e $dst ]; then + elif [ -e "$dst" ]; then echo "File exists: $dst" - elif [ ! -e $src ]; then + elif [ ! -e "$src" ]; then echo "Source missing: $src" else msg "ln -s $src $dst" - if [ ! "$DRYRUN" ]; then - mkdir -p $(dirname $dst) &>/dev/null - ln -s $src $dst + if [ "$DRYRUN" = "no" ]; then + DIR=$(dirname "$dst") + mkdir -p "$DIR" >/dev/null 2>&1 + ln -s "$src" "$dst" fi fi } @@ -125,31 +138,42 @@ install() { remove() { local dst=$1 - if [ -h $dst ]; then + if [ -h "$dst" ]; then msg "rm $dst" - rm $dst - rmdir $(dirname $dst) &>/dev/null + rm "$dst" + DIR=$(dirname "$dst") + rmdir "$DIR" >/dev/null 2>&1 + elif [ -e "$dst" ]; then + echo "Expected symlink: $dst" fi } -if [ ${INSTALL} ]; then - install $CMDDIR/mount_zfs/mount.zfs $mounthelperdir/mount.zfs - install $CMDDIR/fsck_zfs/fsck.zfs $mounthelperdir/fsck.zfs - install $CMDDIR/zvol_id/zvol_id $udevdir/zvol_id - install $CMDDIR/vdev_id/vdev_id $udevdir/vdev_id - install $UDEVRULEDIR/60-zvol.rules $udevruledir/60-zvol.rules - install $UDEVRULEDIR/69-vdev.rules $udevruledir/69-vdev.rules - install $UDEVRULEDIR/90-zfs.rules $udevruledir/90-zfs.rules - install $CMDDIR/zpool/zpool.d $sysconfdir/zfs/zpool.d +if [ "${INSTALL}" = "yes" ]; then + install "$CMD_DIR/mount_zfs/mount.zfs" \ + "$INSTALL_MOUNT_HELPER_DIR/mount.zfs" + install "$CMD_DIR/fsck_zfs/fsck.zfs" \ + "$INSTALL_MOUNT_HELPER_DIR/fsck.zfs" + install "$CMD_DIR/zvol_id/zvol_id" \ + "$INSTALL_UDEV_DIR/zvol_id" + install "$CMD_DIR/vdev_id/vdev_id" \ + "$INSTALL_UDEV_DIR/vdev_id" + install "$UDEV_RULE_DIR/60-zvol.rules" \ + "$INSTALL_UDEV_RULE_DIR/60-zvol.rules" + install "$UDEV_RULE_DIR/69-vdev.rules" \ + "$INSTALL_UDEV_RULE_DIR/69-vdev.rules" + install "$UDEV_RULE_DIR/90-zfs.rules" \ + "$INSTALL_UDEV_RULE_DIR/90-zfs.rules" + install "$CMD_DIR/zpool/zpool.d" \ + "$INSTALL_SYSCONF_DIR/zfs/zpool.d" else - remove $mounthelperdir/mount.zfs - remove $mounthelperdir/fsck.zfs - remove $udevdir/zvol_id - remove $udevdir/vdev_id - remove $udevruledir/60-zvol.rules - remove $udevruledir/69-vdev.rules - remove $udevruledir/90-zfs.rules - remove $sysconfdir/zfs/zpool.d + remove "$INSTALL_MOUNT_HELPER_DIR/mount.zfs" + remove "$INSTALL_MOUNT_HELPER_DIR/fsck.zfs" + remove "$INSTALL_UDEV_DIR/zvol_id" + remove "$INSTALL_UDEV_DIR/vdev_id" + remove "$INSTALL_UDEV_RULE_DIR/60-zvol.rules" + remove "$INSTALL_UDEV_RULE_DIR/69-vdev.rules" + remove "$INSTALL_UDEV_RULE_DIR/90-zfs.rules" + remove "$INSTALL_SYSCONF_DIR/zfs/zpool.d" fi exit 0 diff --git a/scripts/zfs-tests.sh b/scripts/zfs-tests.sh index eb2ce3828..94dd9a5b2 100755 --- a/scripts/zfs-tests.sh +++ b/scripts/zfs-tests.sh @@ -20,21 +20,21 @@ # # CDDL HEADER END # -basedir=$(dirname "$0") +BASE_DIR=$(dirname "$0") SCRIPT_COMMON=common.sh -if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then -. "${basedir}/${SCRIPT_COMMON}" +if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then +. "${BASE_DIR}/${SCRIPT_COMMON}" else echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi PROG=zfs-tests.sh -VERBOSE= +VERBOSE="no" QUIET= -CLEANUP=1 -CLEANUPALL=0 -LOOPBACK=1 +CLEANUP="yes" +CLEANUPALL="no" +LOOPBACK="yes" FILESIZE="4G" RUNFILE=${RUNFILE:-"linux.run"} FILEDIR=${FILEDIR:-/var/tmp} @@ -45,6 +45,26 @@ ZFS_DBGMSG="$STF_SUITE/callbacks/zfs_dbgmsg.ksh" ZFS_DMESG="$STF_SUITE/callbacks/zfs_dmesg.ksh" ZFS_MMP="$STF_SUITE/callbacks/zfs_mmp.ksh" TESTFAIL_CALLBACKS=${TESTFAIL_CALLBACKS:-"$ZFS_DBGMSG:$ZFS_DMESG:$ZFS_MMP"} +LOSETUP=${LOSETUP:-/sbin/losetup} +DMSETUP=${DMSETUP:-/sbin/dmsetup} + +# +# Log an informational message when additional verbosity is enabled. +# +msg() { + if [ "$VERBOSE" = "yes" ]; then + echo "$@" + fi +} + +# +# Log a failure message, cleanup, and return an error. +# +fail() { + echo -e "$PROG: $1" >&2 + cleanup + exit 1 +} # # Attempt to remove loopback devices and files which where created earlier @@ -52,11 +72,11 @@ TESTFAIL_CALLBACKS=${TESTFAIL_CALLBACKS:-"$ZFS_DBGMSG:$ZFS_DMESG:$ZFS_MMP"} # to the script to suppress cleanup for debugging purposes. # cleanup() { - if [ $CLEANUP -eq 0 ]; then + if [ "$CLEANUP" = "no" ]; then return 0 fi - if [ $LOOPBACK -eq 1 ]; then + if [ "$LOOPBACK" = "yes" ]; then for TEST_LOOPBACK in ${LOOPBACKS}; do LOOP_DEV=$(basename "$TEST_LOOPBACK") DM_DEV=$(sudo "${DMSETUP}" ls 2>/dev/null | \ @@ -78,8 +98,7 @@ cleanup() { rm -f "${TEST_FILE}" &>/dev/null done - # Preserve in-tree symlinks to aid debugging. - if [ -z "${INTREE}" ] && [ -d "$STF_PATH" ]; then + if [ "$STF_PATH_REMOVE" = "yes" ] && [ -d "$STF_PATH" ]; then rm -Rf "$STF_PATH" fi } @@ -122,20 +141,11 @@ cleanup_all() { } # -# Log a failure message, cleanup, and return an error. -# -fail() { - echo -e "${PROG}: $1" >&2 - cleanup - exit 1 -} - -# # Takes a name as the only arguments and looks for the following variations # on that name. If one is found it is returned. # -# $RUNFILEDIR/<name> -# $RUNFILEDIR/<name>.run +# $RUNFILE_DIR/<name> +# $RUNFILE_DIR/<name>.run # <name> # <name>.run # @@ -143,10 +153,10 @@ find_runfile() { local NAME=$1 local RESULT="" - if [ -f "$RUNFILEDIR/$NAME" ]; then - RESULT="$RUNFILEDIR/$NAME" - elif [ -f "$RUNFILEDIR/$NAME.run" ]; then - RESULT="$RUNFILEDIR/$NAME.run" + if [ -f "$RUNFILE_DIR/$NAME" ]; then + RESULT="$RUNFILE_DIR/$NAME" + elif [ -f "$RUNFILE_DIR/$NAME.run" ]; then + RESULT="$RUNFILE_DIR/$NAME.run" elif [ -f "$NAME" ]; then RESULT="$NAME" elif [ -f "$NAME.run" ]; then @@ -188,40 +198,44 @@ create_links() { constrain_path() { . "$STF_SUITE/include/commands.cfg" - if [ -n "${INTREE}" ]; then - STF_PATH="$BUILDDIR/bin" + if [ "$INTREE" = "yes" ]; then + # Constrained path set to ./zfs/bin/ + STF_PATH="$BIN_DIR" + STF_PATH_REMOVE="no" + STF_MISSING_BIN="" if [ ! -d "$STF_PATH" ]; then mkdir "$STF_PATH" + chmod 755 "$STF_PATH" || fail "Couldn't chmod $STF_PATH" fi + + # Special case links for standard zfs utilities + DIRS="$(find "$CMD_DIR" -type d \( ! -name .deps -a \ + ! -name .libs \) -print | tr '\n' ' ')" + create_links "$DIRS" "$ZFS_FILES" + + # Special case links for zfs test suite utilities + DIRS="$(find "$STF_SUITE" -type d \( ! -name .deps -a \ + ! -name .libs \) -print | tr '\n' ' ')" + create_links "$DIRS" "$ZFSTEST_FILES" else + # Constrained path set to /var/tmp/constrained_path.* SYSTEMDIR=${SYSTEMDIR:-/var/tmp/constrained_path.XXXX} STF_PATH=$(/bin/mktemp -d "$SYSTEMDIR") - fi + STF_PATH_REMOVE="yes" + STF_MISSING_BIN="" - STF_MISSING_BIN="" - chmod 755 "$STF_PATH" || fail "Couldn't chmod $STF_PATH" + chmod 755 "$STF_PATH" || fail "Couldn't chmod $STF_PATH" - # Standard system utilities - create_links "/bin /usr/bin /sbin /usr/sbin" "$SYSTEM_FILES" - - if [ -z "${INTREE}" ]; then # Special case links for standard zfs utilities create_links "/bin /usr/bin /sbin /usr/sbin" "$ZFS_FILES" - # Special case links for zfs test suite utilties - create_links "$TESTSDIR/bin" "$ZFSTEST_FILES" - else - # Special case links for standard zfs utilities - DIRS="$(find "$CMDDIR" -type d \( ! -name .deps -a \ - ! -name .libs \) -print | tr '\n' ' ')" - create_links "$DIRS" "$ZFS_FILES" - - # Special case links for zfs test suite utilties - DIRS="$(find "$TESTSDIR" -type d \( ! -name .deps -a \ - ! -name .libs \) -print | tr '\n' ' ')" - create_links "$DIRS" "$ZFSTEST_FILES" + # Special case links for zfs test suite utilities + create_links "$STF_SUITE/bin" "$ZFSTEST_FILES" fi + # Standard system utilities + create_links "/bin /usr/bin /sbin /usr/sbin" "$SYSTEM_FILES" + # Exceptions ln -fs "$STF_PATH/awk" "$STF_PATH/nawk" ln -fs /sbin/fsck.ext2 "$STF_PATH/fsck" @@ -250,6 +264,7 @@ OPTIONS: -x Remove all testpools, dm, lo, and files (unsafe) -k Disable cleanup after test failure -f Use files only, disables block device tests + -c Only create and populate constrained path -d DIR Use DIR for files and loopback devices -s SIZE Use vdevs of SIZE (default: 4G) -r RUNFILE Run tests in RUNFILE (default: linux.run) @@ -270,7 +285,7 @@ $0 -x EOF } -while getopts 'hvqxkfd:s:r:?t:u:' OPTION; do +while getopts 'hvqxkfcd:s:r:?t:u:' OPTION; do case $OPTION in h) usage @@ -278,19 +293,23 @@ while getopts 'hvqxkfd:s:r:?t:u:' OPTION; do ;; v) # shellcheck disable=SC2034 - VERBOSE=1 + VERBOSE="yes" ;; q) QUIET="-q" ;; x) - CLEANUPALL=1 + CLEANUPALL="yes" ;; k) - CLEANUP=0 + CLEANUP="no" ;; f) - LOOPBACK=0 + LOOPBACK="no" + ;; + c) + constrain_path + exit ;; d) FILEDIR="$OPTARG" @@ -323,7 +342,7 @@ FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"} LOOPBACKS=${LOOPBACKS:-""} if [ ${#SINGLETEST[@]} -ne 0 ]; then - RUNFILEDIR="/var/tmp" + RUNFILE_DIR="/var/tmp" RUNFILE="zfs-tests.$$.run" SINGLEQUIET="False" @@ -331,7 +350,7 @@ if [ ${#SINGLETEST[@]} -ne 0 ]; then SINGLEQUIET="True" fi - cat >$RUNFILEDIR/$RUNFILE << EOF + cat >$RUNFILE_DIR/$RUNFILE << EOF [DEFAULT] pre = quiet = $SINGLEQUIET @@ -357,7 +376,7 @@ EOF CLEANUPSCRIPT="cleanup" fi - cat >>$RUNFILEDIR/$RUNFILE << EOF + cat >>$RUNFILE_DIR/$RUNFILE << EOF [$SINGLETESTDIR] tests = ['$SINGLETESTFILE'] @@ -394,7 +413,7 @@ if [ "$(sudo whoami)" != "root" ]; then fi # -# Constain the available binaries to a known set. +# Constrain the available binaries to a known set. # constrain_path @@ -406,14 +425,14 @@ constrain_path "Missing $STF_SUITE/include/default.cfg file." # -# Verify the ZFS module stack if loaded. +# Verify the ZFS module stack is loaded. # sudo "${ZFS_SH}" &>/dev/null # # Attempt to cleanup all previous state for a new test run. # -if [ $CLEANUPALL -ne 0 ]; then +if [ "$CLEANUPALL" = "yes" ]; then cleanup_all fi @@ -457,9 +476,10 @@ if [ -z "${DISKS}" ]; then # # If requested setup loopback devices backed by the sparse files. # - if [ $LOOPBACK -eq 1 ]; then + if [ "$LOOPBACK" = "yes" ]; then DISKS="" - check_loop_utils + + test -x "$LOSETUP" || fail "$LOSETUP utility must be installed" for TEST_FILE in ${FILES}; do TEST_LOOPBACK=$(sudo "${LOSETUP}" -f) @@ -472,7 +492,7 @@ if [ -z "${DISKS}" ]; then fi fi -NUM_DISKS=$(echo "${DISKS}" | $AWK '{print NF}') +NUM_DISKS=$(echo "${DISKS}" | awk '{print NF}') [ "$NUM_DISKS" -lt 3 ] && fail "Not enough disks ($NUM_DISKS/3 minimum)" # diff --git a/scripts/zfs.sh b/scripts/zfs.sh index 2ffcf40da..63c3a57d0 100755 --- a/scripts/zfs.sh +++ b/scripts/zfs.sh @@ -1,19 +1,34 @@ -#!/bin/bash +#!/bin/sh +# +# A simple script to load/unload the ZFS module stack. # -# A simple script to simply the loading/unloading the ZFS module stack. - -basedir=$(dirname "$0") +BASE_DIR=$(dirname "$0") SCRIPT_COMMON=common.sh -if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then -. "${basedir}/${SCRIPT_COMMON}" +if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then + . "${BASE_DIR}/${SCRIPT_COMMON}" else -echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 + echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi -# shellcheck disable=SC2034 PROG=zfs.sh -UNLOAD= +VERBOSE="no" +UNLOAD="no" + +ZED_PIDFILE=${ZED_PIDFILE:-/var/run/zed.pid} +LDMOD=${LDMOD:-/sbin/modprobe} + +KMOD_ZLIB_DEFLATE=${KMOD_ZLIB_DEFLATE:-zlib_deflate} +KMOD_ZLIB_INFLATE=${KMOD_ZLIB_INFLATE:-zlib_inflate} +KMOD_SPL=${KMOD_SPL:-spl} +KMOD_SPLAT=${KMOD_SPLAT:-splat} +KMOD_ZAVL=${KMOD_ZAVL:-zavl} +KMOD_ZNVPAIR=${KMOD_ZNVPAIR:-znvpair} +KMOD_ZUNICODE=${KMOD_ZUNICODE:-zunicode} +KMOD_ZCOMMON=${KMOD_ZCOMMON:-zcommon} +KMOD_ICP=${KMOD_ICP:-icp} +KMOD_ZFS=${KMOD_ZFS:-zfs} + usage() { cat << EOF @@ -27,13 +42,6 @@ OPTIONS: -h Show this message -v Verbose -u Unload modules - -MODULE-OPTIONS: - Must be of the from module="options", for example: - -$0 zfs="zfs_prefetch_disable=1" -$0 zfs="zfs_prefetch_disable=1 zfs_mdcomp_disable=1" - EOF } @@ -44,11 +52,10 @@ while getopts 'hvu' OPTION; do exit 1 ;; v) - # shellcheck disable=SC2034 - VERBOSE=1 + VERBOSE="yes" ;; u) - UNLOAD=1 + UNLOAD="yes" ;; ?) usage @@ -57,20 +64,158 @@ while getopts 'hvu' OPTION; do esac done +kill_zed() { + if [ -f "$ZED_PIDFILE" ]; then + PID=$(cat "$ZED_PIDFILE") + kill "$PID" + fi +} + +check_modules() { + local LOADED_MODULES="" + local MISSING_MODULES="" + + for KMOD in $KMOD_SPL $KMOD_SPLAT $KMOD_ZAVL $KMOD_ZNVPAIR \ + $KMOD_ZUNICODE $KMOD_ZCOMMON $KMOD_ICP $KMOD_ZFS; do + NAME=$(basename "$KMOD" .ko) + + if lsmod | egrep -q "^${NAME}"; then + LOADED_MODULES="$LOADED_MODULES\t$NAME\n" + fi + + if ! modinfo "$KMOD" >/dev/null 2>&1; then + MISSING_MODULES="$MISSING_MODULES\t${KMOD}\n" + fi + done + + if [ -n "$LOADED_MODULES" ]; then + printf "Unload the kernel modules by running '%s -u':\n" "$PROG" + printf "%b" "$LOADED_MODULES" + exit 1 + fi + + if [ -n "$MISSING_MODULES" ]; then + printf "The following kernel modules can not be found:\n" + printf "%b" "$MISSING_MODULES" + exit 1 + fi + + return 0 +} + +load_module() { + local KMOD=$1 + + FILE=$(modinfo "$KMOD" | awk '/^filename:/ {print $2}') + VERSION=$(modinfo "$KMOD" | awk '/^version:/ {print $2}') + + if [ "$VERBOSE" = "yes" ]; then + echo "Loading: $FILE ($VERSION)" + fi + + $LDMOD "$KMOD" >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "Failed to load $KMOD" + return 1 + fi + + return 0 +} + +load_modules() { + mkdir -p /etc/zfs + + modprobe "$KMOD_ZLIB_DEFLATE" >/dev/null + modprobe "$KMOD_ZLIB_INFLATE" >/dev/null + + for KMOD in $KMOD_SPL $KMOD_SPLAT $KMOD_ZAVL $KMOD_ZNVPAIR \ + $KMOD_ZUNICODE $KMOD_ZCOMMON $KMOD_ICP $KMOD_ZFS; do + load_module "$KMOD" || return 1 + done + + if [ "$VERBOSE" = "yes" ]; then + echo "Successfully loaded ZFS module stack" + fi + + return 0 +} + +unload_module() { + local KMOD=$1 + + NAME=$(basename "$KMOD" .ko) + FILE=$(modinfo "$KMOD" | awk '/^filename:/ {print $2}') + VERSION=$(modinfo "$KMOD" | awk '/^version:/ {print $2}') + + if [ "$VERBOSE" = "yes" ]; then + echo "Unloading: $KMOD ($VERSION)" + fi + + rmmod "$NAME" || echo "Failed to unload $NAME" + + return 0 +} + +unload_modules() { + for KMOD in $KMOD_ZFS $KMOD_ICP $KMOD_ZCOMMON $KMOD_ZUNICODE \ + $KMOD_ZNVPAIR $KMOD_ZAVL $KMOD_SPLAT $KMOD_SPL; do + NAME=$(basename "$KMOD" .ko) + USE_COUNT=$(lsmod | egrep "^${NAME} " | awk '{print $3}') + + if [ "$USE_COUNT" = "0" ] ; then + unload_module "$KMOD" || return 1 + fi + done + + if [ "$VERBOSE" = "yes" ]; then + echo "Successfully unloaded ZFS module stack" + fi + + return 0 +} + +stack_clear() { + local STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size + local STACK_TRACER_ENABLED=/proc/sys/kernel/stack_tracer_enabled + + if [ -e "$STACK_MAX_SIZE" ]; then + echo 1 >"$STACK_TRACER_ENABLED" + echo 0 >"$STACK_MAX_SIZE" + fi +} + +stack_check() { + local STACK_MAX_SIZE=/sys/kernel/debug/tracing/stack_max_size + local STACK_TRACE=/sys/kernel/debug/tracing/stack_trace + local STACK_LIMIT=7600 + + if [ -e "$STACK_MAX_SIZE" ]; then + STACK_SIZE=$(cat "$STACK_MAX_SIZE") + + if [ "$STACK_SIZE" -ge "$STACK_LIMIT" ]; then + echo + echo "Warning: max stack size $STACK_SIZE bytes" + cat "$STACK_TRACE" + fi + fi +} + if [ "$(id -u)" != 0 ]; then - die "Must run as root" + echo "Must run as root" + exit 1 fi -if [ ${UNLOAD} ]; then +if [ "$UNLOAD" = "yes" ]; then kill_zed umount -t zfs -a stack_check unload_modules else stack_clear - check_modules || die "${ERROR}" - load_modules "$@" || die "Failed to load modules" - wait_udev /dev/zfs 30 || die "'/dev/zfs' was not created" + check_modules + load_modules "$@" + udevadm trigger + udevadm settle fi exit 0 diff --git a/scripts/zimport.sh b/scripts/zimport.sh index da747b0ad..81e415805 100755 --- a/scripts/zimport.sh +++ b/scripts/zimport.sh @@ -53,23 +53,21 @@ # master Pass Pass Pass # installed Pass Pass Pass # -basedir="$(dirname $0)" +BASE_DIR=$(dirname "$0") SCRIPT_COMMON=common.sh -if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then -. "${basedir}/${SCRIPT_COMMON}" +if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then + . "${BASE_DIR}/${SCRIPT_COMMON}" else -echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 + echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi -PROG=zimport.sh - -SRC_TAGS="zfs-0.6.1 zfs-0.6.2 master" +SRC_TAGS="zfs-0.6.5.11 master" POOL_TAGS="all master" -TEST_DIR=`mktemp -u -d -p /var/tmp zimport.XXXXXXXX` -KEEP=0 -VERBOSE=0 -COLOR=1 +TEST_DIR=$(mktemp -u -d -p /var/tmp zimport.XXXXXXXX) +KEEP="no" +VERBOSE="no" +COLOR="yes" REPO="https://github.com/zfsonlinux" IMAGES_DIR="$SCRIPTDIR/zfs-images/" IMAGES_TAR="https://github.com/zfsonlinux/zfs-images/tarball/master" @@ -80,6 +78,11 @@ CONFIG_OPTIONS=${CONFIG_OPTIONS:-""} MAKE_LOG="make.log" MAKE_OPTIONS=${MAKE_OPTIONS:-"-s -j$(nproc)"} +COLOR_GREEN="\033[0;32m" +COLOR_RED="\033[0;31m" +COLOR_BROWN="\033[0;33m" +COLOR_RESET="\033[0m" + usage() { cat << EOF USAGE: @@ -109,13 +112,13 @@ while getopts 'hvckr:s:i:p:f:?' OPTION; do exit 1 ;; v) - VERBOSE=1 + VERBOSE="yes" ;; c) - COLOR=0 + COLOR="no" ;; k) - KEEP=1 + KEEP="yes" ;; r) REPO="$OPTARG" @@ -139,15 +142,51 @@ while getopts 'hvckr:s:i:p:f:?' OPTION; do esac done -# Initialize the test suite -init -check_modules || die "ZFS modules must be unloaded" +# +# Verify the module start is not loaded +# +if lsmod | grep zfs >/dev/null; then + echo "ZFS modules must be unloaded" + exit 1 +fi + +# +# Create a random directory tree of files and sub-directories to +# to act as a copy source for the various regression tests. +# +populate() { + local ROOT=$1 + local MAX_DIR_SIZE=$2 + local MAX_FILE_SIZE=$3 + + # shellcheck disable=SC2086 + mkdir -p $ROOT/{a,b,c,d,e,f,g}/{h,i} + DIRS=$(find "$ROOT") + + for DIR in $DIRS; do + COUNT=$((RANDOM % MAX_DIR_SIZE)) + + # shellcheck disable=SC2034 + for i in $(seq $COUNT); do + FILE=$(mktemp -p "$DIR") + SIZE=$((RANDOM % MAX_FILE_SIZE)) + dd if=/dev/urandom of="$FILE" bs=1k \ + count="$SIZE" &>/dev/null + done + done + + return 0 +} + +SRC_DIR=$(mktemp -d -p /var/tmp/ zfs.src.XXXXXXXX) +trap 'rm -Rf "$SRC_DIR"' INT TERM EXIT +populate "$SRC_DIR" 10 100 SRC_DIR="$TEST_DIR/src" SRC_DIR_SPL="$SRC_DIR/spl" SRC_DIR_ZFS="$SRC_DIR/zfs" -if [ $COLOR -eq 0 ]; then +if [ "$COLOR" = "no" ]; then COLOR_GREEN="" COLOR_BROWN="" COLOR_RED="" @@ -166,6 +205,11 @@ fail_nonewline() { echo -n -e "${COLOR_RED}Fail${COLOR_RESET}\t\t" } +fail() { + echo -e "${COLOR_RED}Fail${COLOR_RESET} ($1)" + exit "$1" +} + # # Set several helper variables which are derived from a source tag. # @@ -179,24 +223,22 @@ fail_nonewline() { src_set_vars() { local TAG=$1 - SPL_TAG=`echo $TAG | sed -e 's/zfs/spl/'` - SPL_DIR=$SRC_DIR_SPL/$SPL_TAG - SPL_URL=$REPO/spl/tarball/$SPL_TAG + SPL_TAG="${TAG//zfs/spl}" + SPL_DIR="$SRC_DIR_SPL/$SPL_TAG" + SPL_URL="$REPO/spl/tarball/$SPL_TAG" - ZFS_TAG=$TAG - ZFS_DIR=$SRC_DIR_ZFS/$ZFS_TAG - ZFS_URL=$REPO/zfs/tarball/$ZFS_TAG + ZFS_TAG="$TAG" + ZFS_DIR="$SRC_DIR_ZFS/$ZFS_TAG" + ZFS_URL="$REPO/zfs/tarball/$ZFS_TAG" if [ "$TAG" = "installed" ]; then - ZPOOL_CMD=`which zpool` - ZFS_CMD=`which zfs` + ZPOOL_CMD=$(which zpool) + ZFS_CMD=$(which zfs) ZFS_SH="/usr/share/zfs/zfs.sh" - ZPOOL_CREATE="/usr/share/zfs/zpool-create.sh" else ZPOOL_CMD="./cmd/zpool/zpool" ZFS_CMD="./cmd/zfs/zfs" ZFS_SH="./scripts/zfs.sh" - ZPOOL_CREATE="./scripts/zpool-create.sh" fi } @@ -220,8 +262,7 @@ pool_set_vars() { POOL_DIR=$TEST_DIR/pools/$POOL_TAG POOL_DIR_PRISTINE=$POOL_DIR/pristine POOL_DIR_COPY=$POOL_DIR/copy - POOL_DIR_SRC=`echo -n "$SRC_DIR_ZFS/"; \ - echo "$POOL_TAG" | sed -e 's/zol/zfs/'` + POOL_DIR_SRC="$SRC_DIR_ZFS/${POOL_TAG//zol/zfs}" } # @@ -230,46 +271,51 @@ pool_set_vars() { # extended as needed to create more realistic pools. # pool_create() { - pool_set_vars $1 - src_set_vars $1 + pool_set_vars "$1" + src_set_vars "$1" if [ "$POOL_TAG" != "installed" ]; then - cd $POOL_DIR_SRC + cd "$POOL_DIR_SRC" fi $ZFS_SH zfs="spa_config_path=$POOL_DIR_PRISTINE" || fail 1 # Create a file vdev RAIDZ pool. - FILEDIR="$POOL_DIR_PRISTINE" $ZPOOL_CREATE \ - -c file-raidz -p $POOL_TAG -v -x >/dev/null || fail 2 + truncate -s 1G \ + "$POOL_DIR_PRISTINE/vdev1" "$POOL_DIR_PRISTINE/vdev2" \ + "$POOL_DIR_PRISTINE/vdev3" "$POOL_DIR_PRISTINE/vdev4" + $ZPOOL_CMD create "$POOL_TAG" raidz \ + "$POOL_DIR_PRISTINE/vdev1" "$POOL_DIR_PRISTINE/vdev2" \ + "$POOL_DIR_PRISTINE/vdev3" "$POOL_DIR_PRISTINE/vdev4" # Create a pool/fs filesystem with some random contents. - $ZFS_CMD create $POOL_TAG/fs || fail 3 - populate /$POOL_TAG/fs/ 10 100 + $ZFS_CMD create "$POOL_TAG/fs" || fail 3 + populate "/$POOL_TAG/fs/" 10 100 # Snapshot that filesystem, clone it, remove the files/dirs, # replace them with new files/dirs. - $ZFS_CMD snap $POOL_TAG/fs@snap || fail 4 - $ZFS_CMD clone $POOL_TAG/fs@snap $POOL_TAG/clone || fail 5 + $ZFS_CMD snap "$POOL_TAG/fs@snap" || fail 4 + $ZFS_CMD clone "$POOL_TAG/fs@snap" "$POOL_TAG/clone" || fail 5 + # shellcheck disable=SC2086 rm -Rf /$POOL_TAG/clone/* || fail 6 - populate /$POOL_TAG/clone/ 10 100 + populate "/$POOL_TAG/clone/" 10 100 # Scrub the pool, delay slightly, then export it. It is now # somewhat interesting for testing purposes. - $ZPOOL_CMD scrub $POOL_TAG || fail 7 + $ZPOOL_CMD scrub "$POOL_TAG" || fail 7 sleep 10 - $ZPOOL_CMD export $POOL_TAG || fail 8 + $ZPOOL_CMD export "$POOL_TAG" || fail 8 $ZFS_SH -u || fail 9 } # If the zfs-images directory doesn't exist fetch a copy from Github then # cache it in the $TEST_DIR and update $IMAGES_DIR. -if [ ! -d $IMAGES_DIR ]; then +if [ ! -d "$IMAGES_DIR" ]; then IMAGES_DIR="$TEST_DIR/zfs-images" - mkdir -p $IMAGES_DIR - curl -sL $IMAGES_TAR | \ - tar -xz -C $IMAGES_DIR --strip-components=1 || fail 10 + mkdir -p "$IMAGES_DIR" + curl -sL "$IMAGES_TAR" | \ + tar -xz -C "$IMAGES_DIR" --strip-components=1 || fail 10 fi # Given the available images in the zfs-images directory substitute the @@ -277,8 +323,9 @@ fi for TAG in $POOL_TAGS; do if [ "$TAG" = "all" ]; then - ALL_TAGS=`ls $IMAGES_DIR | grep "tar.bz2" | \ - sed 's/.tar.bz2//' | tr '\n' ' '` + # shellcheck disable=SC2010 + ALL_TAGS=$(ls "$IMAGES_DIR" | grep "tar.bz2" | \ + sed 's/.tar.bz2//' | tr '\n' ' ') NEW_TAGS="$NEW_TAGS $ALL_TAGS" else NEW_TAGS="$NEW_TAGS $TAG" @@ -286,41 +333,41 @@ for TAG in $POOL_TAGS; do done POOL_TAGS="$NEW_TAGS" -if [ $VERBOSE -ne 0 ]; then +if [ "$VERBOSE" = "yes" ]; then echo "---------------------------- Options ----------------------------" echo "VERBOSE=$VERBOSE" echo "KEEP=$KEEP" echo "REPO=$REPO" - echo "SRC_TAGS="$SRC_TAGS"" - echo "POOL_TAGS="$POOL_TAGS"" + echo "SRC_TAGS=$SRC_TAGS" + echo "POOL_TAGS=$POOL_TAGS" echo "PATH=$TEST_DIR" echo fi -if [ ! -d $TEST_DIR ]; then - mkdir -p $TEST_DIR +if [ ! -d "$TEST_DIR" ]; then + mkdir -p "$TEST_DIR" fi -if [ ! -d $SRC_DIR ]; then - mkdir -p $SRC_DIR +if [ ! -d "$SRC_DIR" ]; then + mkdir -p "$SRC_DIR" fi # Print a header for all tags which are being tested. echo "--------------------- ZFS on Linux Source Versions --------------" printf "%-16s" " " for TAG in $SRC_TAGS; do - src_set_vars $TAG + src_set_vars "$TAG" if [ "$TAG" = "installed" ]; then - ZFS_VERSION=`modinfo zfs | awk '/version:/ { print $2; exit }'` + ZFS_VERSION=$(modinfo zfs | awk '/version:/ { print $2; exit }') if [ -n "$ZFS_VERSION" ]; then - printf "%-16s" $ZFS_VERSION + printf "%-16s" "$ZFS_VERSION" else - echo "ZFS is not installed\n" + echo -e "ZFS is not installed\n" fail fi else - printf "%-16s" $TAG + printf "%-16s" "$TAG" fi done echo -e "\n-----------------------------------------------------------------" @@ -331,29 +378,29 @@ echo -e "\n-----------------------------------------------------------------" # printf "%-16s" "Clone SPL" for TAG in $SRC_TAGS; do - src_set_vars $TAG + src_set_vars "$TAG" - if [ -d $SPL_DIR ]; then + if [ -d "$SPL_DIR" ]; then skip_nonewline elif [ "$SPL_TAG" = "installed" ]; then skip_nonewline else - cd $SRC_DIR + cd "$SRC_DIR" - if [ ! -d $SRC_DIR_SPL ]; then - mkdir -p $SRC_DIR_SPL + if [ ! -d "$SRC_DIR_SPL" ]; then + mkdir -p "$SRC_DIR_SPL" fi - git archive --format=tar --prefix=$SPL_TAG/ $SPL_TAG \ - -o $SRC_DIR_SPL/$SPL_TAG.tar &>/dev/nul || \ - rm $SRC_DIR_SPL/$SPL_TAG.tar - if [ -s $SRC_DIR_SPL/$SPL_TAG.tar ]; then - tar -xf $SRC_DIR_SPL/$SPL_TAG.tar -C $SRC_DIR_SPL - rm $SRC_DIR_SPL/$SPL_TAG.tar + git archive --format=tar --prefix="$SPL_TAG/ $SPL_TAG" \ + -o "$SRC_DIR_SPL/$SPL_TAG.tar" &>/dev/nul || \ + rm "$SRC_DIR_SPL/$SPL_TAG.tar" + if [ -s "$SRC_DIR_SPL/$SPL_TAG.tar" ]; then + tar -xf "$SRC_DIR_SPL/$SPL_TAG.tar" -C "$SRC_DIR_SPL" + rm "$SRC_DIR_SPL/$SPL_TAG.tar" echo -n -e "${COLOR_GREEN}Local${COLOR_RESET}\t\t" else - mkdir -p $SPL_DIR || fail 1 - curl -sL $SPL_URL | tar -xz -C $SPL_DIR \ + mkdir -p "$SPL_DIR" || fail 1 + curl -sL "$SPL_URL" | tar -xz -C "$SPL_DIR" \ --strip-components=1 || fail 2 echo -n -e "${COLOR_GREEN}Remote${COLOR_RESET}\t\t" fi @@ -367,29 +414,29 @@ printf "\n" # printf "%-16s" "Clone ZFS" for TAG in $SRC_TAGS; do - src_set_vars $TAG + src_set_vars "$TAG" - if [ -d $ZFS_DIR ]; then + if [ -d "$ZFS_DIR" ]; then skip_nonewline elif [ "$ZFS_TAG" = "installed" ]; then skip_nonewline else - cd $SRC_DIR + cd "$SRC_DIR" - if [ ! -d $SRC_DIR_ZFS ]; then - mkdir -p $SRC_DIR_ZFS + if [ ! -d "$SRC_DIR_ZFS" ]; then + mkdir -p "$SRC_DIR_ZFS" fi - git archive --format=tar --prefix=$ZFS_TAG/ $ZFS_TAG \ - -o $SRC_DIR_ZFS/$ZFS_TAG.tar &>/dev/nul || \ - rm $SRC_DIR_ZFS/$ZFS_TAG.tar - if [ -s $SRC_DIR_ZFS/$ZFS_TAG.tar ]; then - tar -xf $SRC_DIR_ZFS/$ZFS_TAG.tar -C $SRC_DIR_ZFS - rm $SRC_DIR_ZFS/$ZFS_TAG.tar + git archive --format=tar --prefix="$ZFS_TAG/ $ZFS_TAG" \ + -o "$SRC_DIR_ZFS/$ZFS_TAG.tar" &>/dev/nul || \ + rm "$SRC_DIR_ZFS/$ZFS_TAG.tar" + if [ -s "$SRC_DIR_ZFS/$ZFS_TAG.tar" ]; then + tar -xf "$SRC_DIR_ZFS/$ZFS_TAG.tar" -C "$SRC_DIR_ZFS" + rm "$SRC_DIR_ZFS/$ZFS_TAG.tar" echo -n -e "${COLOR_GREEN}Local${COLOR_RESET}\t\t" else - mkdir -p $ZFS_DIR || fail 1 - curl -sL $ZFS_URL | tar -xz -C $ZFS_DIR \ + mkdir -p "$ZFS_DIR" || fail 1 + curl -sL "$ZFS_URL" | tar -xz -C "$ZFS_DIR" \ --strip-components=1 || fail 2 echo -n -e "${COLOR_GREEN}Remote${COLOR_RESET}\t\t" fi @@ -400,18 +447,20 @@ printf "\n" # Build the listed tags printf "%-16s" "Build SPL" for TAG in $SRC_TAGS; do - src_set_vars $TAG + src_set_vars "$TAG" - if [ -f $SPL_DIR/module/spl/spl.ko ]; then + if [ -f "$SPL_DIR/module/spl/spl.ko" ]; then skip_nonewline elif [ "$SPL_TAG" = "installed" ]; then skip_nonewline else - cd $SPL_DIR + cd "$SPL_DIR" make distclean &>/dev/null - ./autogen.sh >>$CONFIG_LOG 2>&1 || fail 1 - ./configure $CONFIG_OPTIONS >>$CONFIG_LOG 2>&1 || fail 2 - make ${MAKE_OPTIONS} >>$MAKE_LOG 2>&1 || fail 3 + ./autogen.sh >>"$CONFIG_LOG" 2>&1 || fail 1 + # shellcheck disable=SC2086 + ./configure $CONFIG_OPTIONS >>"$CONFIG_LOG" 2>&1 || fail 2 + # shellcheck disable=SC2086 + make $MAKE_OPTIONS >>"$MAKE_LOG" 2>&1 || fail 3 pass_nonewline fi done @@ -420,19 +469,21 @@ printf "\n" # Build the listed tags printf "%-16s" "Build ZFS" for TAG in $SRC_TAGS; do - src_set_vars $TAG + src_set_vars "$TAG" - if [ -f $ZFS_DIR/module/zfs/zfs.ko ]; then + if [ -f "$ZFS_DIR/module/zfs/zfs.ko" ]; then skip_nonewline elif [ "$ZFS_TAG" = "installed" ]; then skip_nonewline else - cd $ZFS_DIR + cd "$ZFS_DIR" make distclean &>/dev/null - ./autogen.sh >>$CONFIG_LOG 2>&1 || fail 1 - ./configure --with-spl=$SPL_DIR $CONFIG_OPTIONS \ - >>$CONFIG_LOG 2>&1 || fail 2 - make ${MAKE_OPTIONS} >>$MAKE_LOG 2>&1 || fail 3 + ./autogen.sh >>"$CONFIG_LOG" 2>&1 || fail 1 + # shellcheck disable=SC2086 + ./configure --with-spl="$SPL_DIR" $CONFIG_OPTIONS \ + >>"$CONFIG_LOG" 2>&1 || fail 2 + # shellcheck disable=SC2086 + make $MAKE_OPTIONS >>"$MAKE_LOG" 2>&1 || fail 3 pass_nonewline fi done @@ -442,23 +493,23 @@ echo "-----------------------------------------------------------------" # Either create a new pool using 'zpool create', or alternately restore an # existing pool from another ZFS implementation for compatibility testing. for TAG in $POOL_TAGS; do - pool_set_vars $TAG + pool_set_vars "$TAG" SKIP=0 - printf "%-16s" $POOL_TAG - rm -Rf $POOL_DIR - mkdir -p $POOL_DIR_PRISTINE + printf "%-16s" "$POOL_TAG" + rm -Rf "$POOL_DIR" + mkdir -p "$POOL_DIR_PRISTINE" # Use the existing compressed image if available. - if [ -f $POOL_BZIP ]; then - tar -xjf $POOL_BZIP -C $POOL_DIR_PRISTINE \ + if [ -f "$POOL_BZIP" ]; then + tar -xjf "$POOL_BZIP" -C "$POOL_DIR_PRISTINE" \ --strip-components=1 || fail 1 # Use the installed version to create the pool. elif [ "$TAG" = "installed" ]; then - pool_create $TAG + pool_create "$TAG" # A source build is available to create the pool. - elif [ -d $POOL_DIR_SRC ]; then - pool_create $TAG + elif [ -d "$POOL_DIR_SRC" ]; then + pool_create "$TAG" else SKIP=1 fi @@ -471,35 +522,36 @@ for TAG in $POOL_TAGS; do continue fi - src_set_vars $TAG + src_set_vars "$TAG" if [ "$TAG" != "installed" ]; then - cd $ZFS_DIR + cd "$ZFS_DIR" fi $ZFS_SH zfs="spa_config_path=$POOL_DIR_COPY" - cp -a --sparse=always $POOL_DIR_PRISTINE \ - $POOL_DIR_COPY || fail 2 - POOL_NAME=`$ZPOOL_CMD import -d $POOL_DIR_COPY | \ - awk '/pool:/ { print $2; exit 0 }'` + cp -a --sparse=always "$POOL_DIR_PRISTINE" \ + "$POOL_DIR_COPY" || fail 2 + POOL_NAME=$($ZPOOL_CMD import -d "$POOL_DIR_COPY" | \ + awk '/pool:/ { print $2; exit 0 }') - $ZPOOL_CMD import -N -d $POOL_DIR_COPY $POOL_NAME &>/dev/null + $ZPOOL_CMD import -N -d "$POOL_DIR_COPY" \ + "$POOL_NAME" &>/dev/null if [ $? -ne 0 ]; then fail_nonewline ERROR=1 else - $ZPOOL_CMD export $POOL_NAME || fail 3 + $ZPOOL_CMD export "$POOL_NAME" || fail 3 pass_nonewline fi - rm -Rf $POOL_DIR_COPY + rm -Rf "$POOL_DIR_COPY" $ZFS_SH -u || fail 4 done printf "\n" done -if [ ! $KEEP ]; then - rm -Rf $TEST_DIR +if [ "$KEEP" = "no" ]; then + rm -Rf "$TEST_DIR" fi exit $ERROR diff --git a/scripts/zloop.sh b/scripts/zloop.sh index 3a6db40cf..d3ec93202 100755 --- a/scripts/zloop.sh +++ b/scripts/zloop.sh @@ -20,11 +20,10 @@ # Copyright (C) 2016 Lawrence Livermore National Security, LLC. # -basedir=$(dirname "$0") - +BASE_DIR=$(dirname "$0") SCRIPT_COMMON=common.sh -if [ -f "${basedir}/${SCRIPT_COMMON}" ]; then - . "${basedir}/${SCRIPT_COMMON}" +if [ -f "${BASE_DIR}/${SCRIPT_COMMON}" ]; then + . "${BASE_DIR}/${SCRIPT_COMMON}" else echo "Missing helper script ${SCRIPT_COMMON}" && exit 1 fi diff --git a/scripts/zpios-profile/Makefile.am b/scripts/zpios-profile/Makefile.am deleted file mode 100644 index c87f16938..000000000 --- a/scripts/zpios-profile/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -pkgdataprofiledir = $(pkgdatadir)/zpios-profile -dist_pkgdataprofile_SCRIPTS = \ - $(top_srcdir)/scripts/zpios-profile/zpios-profile-disk.sh \ - $(top_srcdir)/scripts/zpios-profile/zpios-profile-pids.sh \ - $(top_srcdir)/scripts/zpios-profile/zpios-profile-post.sh \ - $(top_srcdir)/scripts/zpios-profile/zpios-profile-pre.sh \ - $(top_srcdir)/scripts/zpios-profile/zpios-profile.sh diff --git a/scripts/zpios-profile/zpios-profile-disk.sh b/scripts/zpios-profile/zpios-profile-disk.sh deleted file mode 100755 index b56ee1ee4..000000000 --- a/scripts/zpios-profile/zpios-profile-disk.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash -# -# /proc/diskinfo <after skipping major/minor> -# Field 1 -- device name -# Field 2 -- # of reads issued -# Field 3 -- # of reads merged -# Field 4 -- # of sectors read -# Field 5 -- # of milliseconds spent reading -# Field 6 -- # of writes completed -# Field 7 -- # of writes merged -# Field 8 -- # of sectors written -# Field 9 -- # of milliseconds spent writing -# Field 10 -- # of I/Os currently in progress -# Field 11 -- # of milliseconds spent doing I/Os -# Field 12 -- weighted # of milliseconds spent doing I/Os - -PROG=zpios-profile-disk.sh - -RUN_PIDS=${0} -RUN_LOG_DIR=${1} -RUN_ID=${2} - -create_table() { - local FIELD=$1 - local ROW_M=() - local ROW_N=() - local HEADER=1 - local STEP=1 - - for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do - ROW_M=( ${ROW_N[@]} ) - ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` ) - - if [ $HEADER -eq 1 ]; then - echo -n "step, " - cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", " - echo "total" - HEADER=0 - fi - - if [ ${#ROW_M[@]} -eq 0 ]; then - continue - fi - - if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then - echo "Badly formatted profile data in ${DISK_FILE}" - break - fi - - TOTAL=0 - echo -n "${STEP}, " - for (( i=0; i<${#ROW_N[@]}; i++ )); do - DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc` - let TOTAL=${TOTAL}+${DELTA} - echo -n "${DELTA}, " - done - echo "${TOTAL}, " - - let STEP=${STEP}+1 - done -} - -create_table_mbs() { - local FIELD=$1 - local TIME=$2 - local ROW_M=() - local ROW_N=() - local HEADER=1 - local STEP=1 - - for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do - ROW_M=( ${ROW_N[@]} ) - ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` ) - - if [ $HEADER -eq 1 ]; then - echo -n "step, " - cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", " - echo "total" - HEADER=0 - fi - - if [ ${#ROW_M[@]} -eq 0 ]; then - continue - fi - - if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then - echo "Badly formatted profile data in ${DISK_FILE}" - break - fi - - TOTAL=0 - echo -n "${STEP}, " - for (( i=0; i<${#ROW_N[@]}; i++ )); do - DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc` - MBS=`echo "scale=2; ((${DELTA}*512)/${TIME})/(1024*1024)" | bc` - TOTAL=`echo "scale=2; ${TOTAL}+${MBS}" | bc` - echo -n "${MBS}, " - done - echo "${TOTAL}, " - - let STEP=${STEP}+1 - done -} - -echo -echo "Reads issued per device" -create_table 2 -echo -echo "Reads merged per device" -create_table 3 -echo -echo "Sectors read per device" -create_table 4 -echo "MB/s per device" -create_table_mbs 4 3 - -echo -echo "Writes issued per device" -create_table 6 -echo -echo "Writes merged per device" -create_table 7 -echo -echo "Sectors written per device" -create_table 8 -echo "MB/s per device" -create_table_mbs 8 3 - -exit 0 diff --git a/scripts/zpios-profile/zpios-profile-pids.sh b/scripts/zpios-profile/zpios-profile-pids.sh deleted file mode 100755 index 3514b38e2..000000000 --- a/scripts/zpios-profile/zpios-profile-pids.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -PROG=zpios-profile-pids.sh - -RUN_PIDS=${0} -RUN_LOG_DIR=${1} -RUN_ID=${2} - -ROW_M=() -ROW_N=() -ROW_N_SCHED=() -ROW_N_WAIT=() - -HEADER=1 -STEP=1 - -for PID_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/pids-[0-9]*`; do - ROW_M=( ${ROW_N[@]} ) - ROW_N=( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ROW_N_SCHED=( `cat ${PID_FILE} | cut -f15 -d' ' | tr "\n" "\t"` ) - ROW_N_WAIT=( `cat ${PID_FILE} | cut -f17 -d' ' | tr "\n" "\t"` ) - ROW_N_NAMES=( `cat ${PID_FILE} | cut -f2 -d' ' | cut -f2 -d'(' | - cut -f1 -d')' | cut -f1 -d'/' | tr "\n" "\t"` ) - - for (( i=0; i<${#ROW_N_SCHED[@]}; i++ )); do - SUM=`echo "${ROW_N_WAIT[${i}]}+${ROW_N_SCHED[${i}]}" | bc` - - case ${ROW_N_NAMES[${i}]} in - zio_taskq) IDX=0;; - zio_req_nul) IDX=1;; - zio_irq_nul) IDX=2;; - zio_req_rd) IDX=3;; - zio_irq_rd) IDX=4;; - zio_req_wr) IDX=5;; - zio_irq_wr) IDX=6;; - zio_req_fr) IDX=7;; - zio_irq_fr) IDX=8;; - zio_req_cm) IDX=9;; - zio_irq_cm) IDX=10;; - zio_req_ctl) IDX=11;; - zio_irq_ctl) IDX=12;; - txg_quiesce) IDX=13;; - txg_sync) IDX=14;; - txg_timelimit) IDX=15;; - arc_reclaim) IDX=16;; - l2arc_feed) IDX=17;; - zpios_io) IDX=18;; - *) continue;; - esac - - let ROW_N[${IDX}]=${ROW_N[${IDX}]}+${SUM} - done - - if [ $HEADER -eq 1 ]; then - echo "step, zio_taskq, zio_req_nul, zio_irq_nul, " \ - "zio_req_rd, zio_irq_rd, zio_req_wr, zio_irq_wr, " \ - "zio_req_fr, zio_irq_fr, zio_req_cm, zio_irq_cm, " \ - "zio_req_ctl, zio_irq_ctl, txg_quiesce, txg_sync, " \ - "txg_timelimit, arc_reclaim, l2arc_feed, zpios_io, " \ - "idle" - HEADER=0 - fi - - if [ ${#ROW_M[@]} -eq 0 ]; then - continue - fi - - if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then - echo "Badly formatted profile data in ${PID_FILE}" - break - fi - - # Original values are in jiffies and we expect HZ to be 1000 - # on most 2.6 systems thus we divide by 10 to get a percentage. - IDLE=1000 - echo -n "${STEP}, " - for (( i=0; i<${#ROW_N[@]}; i++ )); do - DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc` - DELTA_PERCENT=`echo "scale=1; ${DELTA}/10" | bc` - let IDLE=${IDLE}-${DELTA} - echo -n "${DELTA_PERCENT}, " - done - ILDE_PERCENT=`echo "scale=1; ${IDLE}/10" | bc` - echo "${ILDE_PERCENT}" - - let STEP=${STEP}+1 -done - -exit - -echo -echo "Percent of total system time per pid" -for PID_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/pids-[0-9]*`; do - ROW_M=( ${ROW_N[@]} ) - ROW_N_SCHED=( `cat ${PID_FILE} | cut -f15 -d' ' | tr "\n" "\t"` ) - ROW_N_WAIT=( `cat ${PID_FILE} | cut -f17 -d' ' | tr "\n" "\t"` ) - - for (( i=0; i<${#ROW_N_SCHED[@]}; i++ )); do - ROW_N[${i}]=`echo "${ROW_N_WAIT[${i}]}+${ROW_N_SCHED[${i}]}" | bc` - done - - if [ $HEADER -eq 1 ]; then - echo -n "step, " - cat ${PID_FILE} | cut -f2 -d' ' | tr "\n" ", " - echo - HEADER=0 - fi - - if [ ${#ROW_M[@]} -eq 0 ]; then - continue - fi - - if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then - echo "Badly formatted profile data in ${PID_FILE}" - break - fi - - # Original values are in jiffies and we expect HZ to be 1000 - # on most 2.6 systems thus we divide by 10 to get a percentage. - echo -n "${STEP}, " - for (( i=0; i<${#ROW_N[@]}; i++ )); do - DELTA=`echo "scale=1; (${ROW_N[${i}]}-${ROW_M[${i}]})/10" | bc` - echo -n "${DELTA}, " - done - - echo - let STEP=${STEP}+1 -done - - -exit 0 diff --git a/scripts/zpios-profile/zpios-profile-post.sh b/scripts/zpios-profile/zpios-profile-post.sh deleted file mode 100755 index 3a454ba04..000000000 --- a/scripts/zpios-profile/zpios-profile-post.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash - -PROG=zpios-profile-post.sh - -RUN_POST=${0} -RUN_PHASE=${1} -RUN_DIR=${2} -RUN_ID=${3} -RUN_POOL=${4} -RUN_CHUNK_SIZE=${5} -RUN_REGION_SIZE=${6} -RUN_THRD_COUNT=${7} -RUN_REGION_COUNT=${8} -RUN_OFFSET=${9} -RUN_REGION_NOISE=${10} -RUN_CHUNK_NOISE=${11} -RUN_THRD_DELAY=${12} -RUN_FLAGS=${13} -RUN_RESULT=${14} - -# Summarize system time per process -zpios_profile_post_pids() { - ${PROFILE_PIDS} ${PROFILE_RUN_CR_PIDS_LOG} >${PROFILE_RUN_CR_PIDS_CSV} - ${PROFILE_PIDS} ${PROFILE_RUN_WR_PIDS_LOG} >${PROFILE_RUN_WR_PIDS_CSV} - ${PROFILE_PIDS} ${PROFILE_RUN_RD_PIDS_LOG} >${PROFILE_RUN_RD_PIDS_CSV} - ${PROFILE_PIDS} ${PROFILE_RUN_RM_PIDS_LOG} >${PROFILE_RUN_RM_PIDS_CSV} -} - -zpios_profile_post_disk() { - ${PROFILE_DISK} ${PROFILE_RUN_CR_DISK_LOG} >${PROFILE_RUN_CR_DISK_CSV} - ${PROFILE_DISK} ${PROFILE_RUN_WR_DISK_LOG} >${PROFILE_RUN_WR_DISK_CSV} - ${PROFILE_DISK} ${PROFILE_RUN_RD_DISK_LOG} >${PROFILE_RUN_RD_DISK_CSV} - ${PROFILE_DISK} ${PROFILE_RUN_RM_DISK_LOG} >${PROFILE_RUN_RM_DISK_CSV} -} - -# Summarize per device performance - -# Stop a user defined profiling script which is gathering additional data -zpios_profile_post_stop() { - local PROFILE_PID=$1 - - kill -s SIGHUP `cat ${PROFILE_PID}` - - - # Sleep waiting for profile script to exit - while [ -f ${PROFILE_PID} ]; do - sleep 0.01 - done -} - -zpios_profile_post_proc_stop() { - local PROC_DIR=$1 - - if [ -f ${PROFILE_ARC_PROC} ]; then - cat ${PROFILE_ARC_PROC} >${PROC_DIR}/arcstats.txt - fi - - if [ -f ${PROFILE_VDEV_CACHE_PROC} ]; then - cat ${PROFILE_VDEV_CACHE_PROC} >${PROC_DIR}/vdev_cache_stats.txt - fi -} - -zpios_profile_post_oprofile_stop() { - local OPROFILE_LOG=$1 - local OPROFILE_ARGS="-a -g -l -p ${OPROFILE_KERNEL_DIR},${OPROFILE_SPL_DIR},${OPROFILE_ZFS_DIR}" - - /usr/bin/opcontrol --stop >>${OPROFILE_LOG} 2>&1 - /usr/bin/opcontrol --dump >>${OPROFILE_LOG} 2>&1 - /usr/bin/opreport ${OPROFILE_ARGS} >${OPROFILE_LOG} 2>&1 - /usr/bin/oparchive -} - -zpios_profile_post_create() { - zpios_profile_post_oprofile_stop ${PROFILE_RUN_CR_OPROFILE_LOG} - zpios_profile_post_proc_stop ${PROFILE_RUN_CR_DIR} - zpios_profile_post_stop ${PROFILE_RUN_CR_PID} -} - -zpios_profile_post_write() { - zpios_profile_post_oprofile_stop ${PROFILE_RUN_WR_OPROFILE_LOG} - zpios_profile_post_proc_stop ${PROFILE_RUN_WR_DIR} - zpios_profile_post_stop ${PROFILE_RUN_WR_PID} -} - -zpios_profile_post_read() { - zpios_profile_post_oprofile_stop ${PROFILE_RUN_CR_RD_LOG} - zpios_profile_post_proc_stop ${PROFILE_RUN_RD_DIR} - zpios_profile_post_stop ${PROFILE_RUN_RD_PID} -} - -zpios_profile_post_remove() { - zpios_profile_post_oprofile_stop ${PROFILE_RUN_RM_OPROFILE_LOG} - zpios_profile_post_proc_stop ${PROFILE_RUN_RM_DIR} - zpios_profile_post_stop ${PROFILE_RUN_RM_PID} -} - -# Source global zpios test configuration -if [ -f ${RUN_DIR}/zpios-config.sh ]; then - . ${RUN_DIR}/zpios-config.sh -fi - -# Source global per-run test configuration -if [ -f ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh ]; then - . ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh -fi - -case "${RUN_PHASE}" in - post-run) - zpios_profile_post_pids - zpios_profile_post_disk - ;; - post-create) - zpios_profile_post_create - ;; - post-write) - zpios_profile_post_write - ;; - post-read) - zpios_profile_post_read - ;; - post-remove) - zpios_profile_post_remove - ;; - *) - echo "Usage: ${PROG} {post-run|post-create|post-write|post-read|post-remove}" - exit 1 -esac - -exit 0 diff --git a/scripts/zpios-profile/zpios-profile-pre.sh b/scripts/zpios-profile/zpios-profile-pre.sh deleted file mode 100755 index a2a885798..000000000 --- a/scripts/zpios-profile/zpios-profile-pre.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/bash - -PROG=zpios-profile-pre.sh - -PROFILE_RDY=0 -trap "PROFILE_RDY=1" SIGHUP - -RUN_PRE=${0} -RUN_PHASE=${1} -RUN_DIR=${2} -RUN_ID=${3} -RUN_POOL=${4} -RUN_CHUNK_SIZE=${5} -RUN_REGION_SIZE=${6} -RUN_THRD_COUNT=${7} -RUN_REGION_COUNT=${8} -RUN_OFFSET=${9} -RUN_REGION_NOISE=${10} -RUN_CHUNK_NOISE=${11} -RUN_THRD_DELAY=${12} -RUN_FLAGS=${13} -RUN_RESULT=${14} - -zpios_profile_pre_run_cfg() { -cat > ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh << EOF -# -# Zpios Profiling Configuration for Run ${RUN_ID} -# - -PROFILE_RUN_DIR=${RUN_DIR}/${RUN_ID} - -PROFILE_RUN_CR_DIR=${RUN_DIR}/${RUN_ID}/create -PROFILE_RUN_CR_PID=${RUN_DIR}/${RUN_ID}/create/profile.pid -PROFILE_RUN_CR_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/create/oprofile.txt -PROFILE_RUN_CR_PIDS_LOG=${RUN_DIR}/${RUN_ID}/create/pids.txt -PROFILE_RUN_CR_PIDS_CSV=${RUN_DIR}/${RUN_ID}/create/pids.csv -PROFILE_RUN_CR_DISK_LOG=${RUN_DIR}/${RUN_ID}/create/disk.txt -PROFILE_RUN_CR_DISK_CSV=${RUN_DIR}/${RUN_ID}/create/disk.csv - -PROFILE_RUN_WR_DIR=${RUN_DIR}/${RUN_ID}/write -PROFILE_RUN_WR_PID=${RUN_DIR}/${RUN_ID}/write/profile.pid -PROFILE_RUN_WR_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/write/oprofile.txt -PROFILE_RUN_WR_PIDS_LOG=${RUN_DIR}/${RUN_ID}/write/pids.txt -PROFILE_RUN_WR_PIDS_CSV=${RUN_DIR}/${RUN_ID}/write/pids.csv -PROFILE_RUN_WR_DISK_LOG=${RUN_DIR}/${RUN_ID}/write/disk.txt -PROFILE_RUN_WR_DISK_CSV=${RUN_DIR}/${RUN_ID}/write/disk.csv - -PROFILE_RUN_RD_DIR=${RUN_DIR}/${RUN_ID}/read -PROFILE_RUN_RD_PID=${RUN_DIR}/${RUN_ID}/read/profile.pid -PROFILE_RUN_RD_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/read/oprofile.txt -PROFILE_RUN_RD_PIDS_LOG=${RUN_DIR}/${RUN_ID}/read/pids.txt -PROFILE_RUN_RD_PIDS_CSV=${RUN_DIR}/${RUN_ID}/read/pids.csv -PROFILE_RUN_RD_DISK_LOG=${RUN_DIR}/${RUN_ID}/read/disk.txt -PROFILE_RUN_RD_DISK_CSV=${RUN_DIR}/${RUN_ID}/read/disk.csv - -PROFILE_RUN_RM_DIR=${RUN_DIR}/${RUN_ID}/remove -PROFILE_RUN_RM_PID=${RUN_DIR}/${RUN_ID}/remove/profile.pid -PROFILE_RUN_RM_OPROFILE_LOG=${RUN_DIR}/${RUN_ID}/remove/oprofile.txt -PROFILE_RUN_RM_PIDS_LOG=${RUN_DIR}/${RUN_ID}/remove/pids.txt -PROFILE_RUN_RM_PIDS_CSV=${RUN_DIR}/${RUN_ID}/remove/pids.csv -PROFILE_RUN_RM_DISK_LOG=${RUN_DIR}/${RUN_ID}/remove/disk.txt -PROFILE_RUN_RM_DISK_CSV=${RUN_DIR}/${RUN_ID}/remove/disk.csv - -# PROFILE_PIDS_LOG=${RUN_DIR}/${RUN_ID}/pids-summary.csv -# PROFILE_DISK_LOG=${RUN_DIR}/${RUN_ID}/disk-summary.csv -EOF -} - -zpios_profile_pre_run_args() { -cat > ${RUN_DIR}/${RUN_ID}/zpios-args.txt << EOF -# -# Zpios Arguments for Run ${RUN_ID} -# - -DIR=${RUN_DIR} -ID=${RUN_ID} -POOL=${RUN_POOL} -CHUNK_SIZE=${RUN_CHUNK_SIZE} -REGION_SIZE=${RUN_REGION_SIZE} -THRD_COUNT=${RUN_THRD_COUNT} -REGION_COUNT=${RUN_REGION_COUNT} -OFFSET=${RUN_OFFSET} -REGION_NOISE=${RUN_REGION_NOISE} -CHUNK_NOISE=${RUN_CHUNK_NOISE} -THRD_DELAY=${RUN_THRD_DELAY} -FLAGS=${RUN_FLAGS} -RESULT=${RUN_RESULT} -EOF -} - -# Spawn a user defined profiling script to gather additional data -zpios_profile_pre_start() { - local PROFILE_PID=$1 - - ${PROFILE_USER} ${RUN_PHASE} ${RUN_DIR} ${RUN_ID} & - echo "$!" >${PROFILE_PID} - - # Sleep waiting for profile script to be ready, it will - # signal us via SIGHUP when it is ready to start profiling. - while [ ${PROFILE_RDY} -eq 0 ]; do - sleep 0.01 - done -} - -zpios_profile_post_proc_start() { - - if [ -f ${PROFILE_ARC_PROC} ]; then - echo 0 >${PROFILE_ARC_PROC} - fi - - if [ -f ${PROFILE_VDEV_CACHE_PROC} ]; then - echo 0 >${PROFILE_VDEV_CACHE_PROC} - fi -} - -zpios_profile_pre_oprofile_start() { - local OPROFILE_LOG=$1 - - /usr/bin/opcontrol --reset >>${OPROFILE_LOG} 2>&1 - /usr/bin/opcontrol --start >>${OPROFILE_LOG} 2>&1 -} - -zpios_profile_pre_create() { - mkdir ${PROFILE_RUN_CR_DIR} - zpios_profile_pre_start ${PROFILE_RUN_CR_PID} - zpios_profile_post_proc_start - zpios_profile_pre_oprofile_start ${PROFILE_RUN_CR_OPROFILE_LOG} -} - -zpios_profile_pre_write() { - mkdir ${PROFILE_RUN_WR_DIR} - zpios_profile_pre_start ${PROFILE_RUN_WR_PID} - zpios_profile_post_proc_start - zpios_profile_pre_oprofile_start ${PROFILE_RUN_WR_OPROFILE_LOG} -} - -zpios_profile_pre_read() { - mkdir ${PROFILE_RUN_RD_DIR} - zpios_profile_pre_start ${PROFILE_RUN_RD_PID} - zpios_profile_post_proc_start - zpios_profile_pre_oprofile_start ${PROFILE_RUN_CR_RD_LOG} -} - -zpios_profile_pre_remove() { - mkdir ${PROFILE_RUN_RM_DIR} - zpios_profile_pre_start ${PROFILE_RUN_RM_PID} - zpios_profile_post_proc_start - zpios_profile_pre_oprofile_start ${PROFILE_RUN_RM_OPROFILE_LOG} -} - -# Source global zpios test configuration -if [ -f ${RUN_DIR}/zpios-config.sh ]; then - . ${RUN_DIR}/zpios-config.sh -fi - -# Source global per-run test configuration -if [ -f ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh ]; then - . ${RUN_DIR}/${RUN_ID}/zpios-config-run.sh -fi - -case "${RUN_PHASE}" in - pre-run) - mkdir -p ${RUN_DIR}/${RUN_ID}/ - zpios_profile_pre_run_cfg - zpios_profile_pre_run_args - ;; - pre-create) - zpios_profile_pre_create - ;; - pre-write) - zpios_profile_pre_write - ;; - pre-read) - zpios_profile_pre_read - ;; - pre-remove) - zpios_profile_pre_remove - ;; - *) - echo "Usage: ${PROG} {pre-run|pre-create|pre-write|pre-read|pre-remove}" - exit 1 -esac - -exit 0 diff --git a/scripts/zpios-profile/zpios-profile.sh b/scripts/zpios-profile/zpios-profile.sh deleted file mode 100755 index bd3c9c504..000000000 --- a/scripts/zpios-profile/zpios-profile.sh +++ /dev/null @@ -1,226 +0,0 @@ -#!/bin/bash - - -PROG=zpios-profile.sh - -trap "RUN_DONE=1" SIGHUP - -RUN_PHASE=${1} -RUN_LOG_DIR=${2} -RUN_ID=${3} -RUN_DONE=0 - -POLL_INTERVAL=2.99 - -# Log these pids, the exact pid numbers will vary from system to system -# so I harvest pid for all the following type of processes from /proc/<pid>/ -# -# zio_taskq/# -# spa_zio_issue/# -# spa_zio_intr/# -# txg_quiesce_thr -# txg_sync_thread -# txg_timelimit_t -# arc_reclaim_thr -# l2arc_feed_thre -# zpios_io/# - -ZIO_TASKQ_PIDS=() -ZIO_REQ_NUL_PIDS=() -ZIO_IRQ_NUL_PIDS=() -ZIO_REQ_RD_PIDS=() -ZIO_IRQ_RD_PIDS=() -ZIO_REQ_WR_PIDS=() -ZIO_IRQ_WR_PIDS=() -ZIO_REQ_FR_PIDS=() -ZIO_IRQ_FR_PIDS=() -ZIO_REQ_CM_PIDS=() -ZIO_IRQ_CM_PIDS=() -ZIO_REQ_CTL_PIDS=() -ZIO_IRQ_CTL_PIDS=() - -TXG_QUIESCE_PIDS=() -TXG_SYNC_PIDS=() -TXG_TIMELIMIT_PIDS=() - -ARC_RECLAIM_PIDS=() -L2ARC_FEED_PIDS=() - -ZPIOS_IO_PIDS=() - -show_pids() { - echo "* zio_taskq: { ${ZIO_TASKQ_PIDS[@]} } = ${#ZIO_TASKQ_PIDS[@]}" - echo "* zio_req_nul: { ${ZIO_REQ_NUL_PIDS[@]} } = ${#ZIO_REQ_NUL_PIDS[@]}" - echo "* zio_irq_nul: { ${ZIO_IRQ_NUL_PIDS[@]} } = ${#ZIO_IRQ_NUL_PIDS[@]}" - echo "* zio_req_rd: { ${ZIO_REQ_RD_PIDS[@]} } = ${#ZIO_REQ_RD_PIDS[@]}" - echo "* zio_irq_rd: { ${ZIO_IRQ_RD_PIDS[@]} } = ${#ZIO_IRQ_RD_PIDS[@]}" - echo "* zio_req_wr: { ${ZIO_REQ_WR_PIDS[@]} } = ${#ZIO_REQ_WR_PIDS[@]}" - echo "* zio_irq_wr: { ${ZIO_IRQ_WR_PIDS[@]} } = ${#ZIO_IRQ_WR_PIDS[@]}" - echo "* zio_req_fr: { ${ZIO_REQ_FR_PIDS[@]} } = ${#ZIO_REQ_FR_PIDS[@]}" - echo "* zio_irq_fr: { ${ZIO_IRQ_FR_PIDS[@]} } = ${#ZIO_IRQ_FR_PIDS[@]}" - echo "* zio_req_cm: { ${ZIO_REQ_CM_PIDS[@]} } = ${#ZIO_REQ_CM_PIDS[@]}" - echo "* zio_irq_cm: { ${ZIO_IRQ_CM_PIDS[@]} } = ${#ZIO_IRQ_CM_PIDS[@]}" - echo "* zio_req_ctl: { ${ZIO_REQ_CTL_PIDS[@]} } = ${#ZIO_REQ_CTL_PIDS[@]}" - echo "* zio_irq_ctl: { ${ZIO_IRQ_CTL_PIDS[@]} } = ${#ZIO_IRQ_CTL_PIDS[@]}" - echo "* txg_quiesce: { ${TXG_QUIESCE_PIDS[@]} } = ${#TXG_QUIESCE_PIDS[@]}" - echo "* txg_sync: { ${TXG_SYNC_PIDS[@]} } = ${#TXG_SYNC_PIDS[@]}" - echo "* txg_timelimit: { ${TXG_TIMELIMIT_PIDS[@]} } = ${#TXG_TIMELIMIT_PIDS[@]}" - echo "* arc_reclaim: { ${ARC_RECLAIM_PIDS[@]} } = ${#ARC_RECLAIM_PIDS[@]}" - echo "* l2arc_feed: { ${L2ARC_FEED_PIDS[@]} } = ${#L2ARC_FEED_PIDS[@]}" - echo "* zpios_io: { ${ZPIOS_IO_PIDS[@]} } = ${#ZPIOS_IO_PIDS[@]}" -} - -check_pid() { - local PID=$1 - local NAME=$2 - local TYPE=$3 - local PIDS=( "$4" ) - local NAME_STRING=`echo ${NAME} | cut -f1 -d'/'` - local NAME_NUMBER=`echo ${NAME} | cut -f2 -d'/'` - - if [ "${NAME_STRING}" == "${TYPE}" ]; then - if [ -n "${NAME_NUMBER}" ]; then - PIDS[${NAME_NUMBER}]=${PID} - else - PIDS[${#PIDS[@]}]=${PID} - - fi - fi - - echo "${PIDS[@]}" -} - -# NOTE: This whole process is crazy slow but it will do for now -acquire_pids() { - echo "--- Aquiring ZFS pids ---" - - for PID in `ls /proc/ | grep [0-9] | sort -n -u`; do - if [ ! -e /proc/${PID}/status ]; then - continue - fi - - NAME=`cat /proc/${PID}/status | head -n1 | cut -f2` - - ZIO_TASKQ_PIDS=( `check_pid ${PID} ${NAME} "zio_taskq" \ - "$(echo "${ZIO_TASKQ_PIDS[@]}")"` ) - - ZIO_REQ_NUL_PIDS=( `check_pid ${PID} ${NAME} "zio_req_nul" \ - "$(echo "${ZIO_REQ_NUL_PIDS[@]}")"` ) - - ZIO_IRQ_NUL_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_nul" \ - "$(echo "${ZIO_IRQ_NUL_PIDS[@]}")"` ) - - ZIO_REQ_RD_PIDS=( `check_pid ${PID} ${NAME} "zio_req_rd" \ - "$(echo "${ZIO_REQ_RD_PIDS[@]}")"` ) - - ZIO_IRQ_RD_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_rd" \ - "$(echo "${ZIO_IRQ_RD_PIDS[@]}")"` ) - - ZIO_REQ_WR_PIDS=( `check_pid ${PID} ${NAME} "zio_req_wr" \ - "$(echo "${ZIO_REQ_WR_PIDS[@]}")"` ) - - ZIO_IRQ_WR_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_wr" \ - "$(echo "${ZIO_IRQ_WR_PIDS[@]}")"` ) - - ZIO_REQ_FR_PIDS=( `check_pid ${PID} ${NAME} "zio_req_fr" \ - "$(echo "${ZIO_REQ_FR_PIDS[@]}")"` ) - - ZIO_IRQ_FR_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_fr" \ - "$(echo "${ZIO_IRQ_FR_PIDS[@]}")"` ) - - ZIO_REQ_CM_PIDS=( `check_pid ${PID} ${NAME} "zio_req_cm" \ - "$(echo "${ZIO_REQ_CM_PIDS[@]}")"` ) - - ZIO_IRQ_CM_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_cm" \ - "$(echo "${ZIO_IRQ_CM_PIDS[@]}")"` ) - - ZIO_REQ_CTL_PIDS=( `check_pid ${PID} ${NAME} "zio_req_ctl" \ - "$(echo "${ZIO_REQ_CTL_PIDS[@]}")"` ) - - ZIO_IRQ_CTL_PIDS=( `check_pid ${PID} ${NAME} "zio_irq_ctl" \ - "$(echo "${ZIO_IRQ_CTL_PIDS[@]}")"` ) - - TXG_QUIESCE_PIDS=( `check_pid ${PID} ${NAME} "txg_quiesce" \ - "$(echo "${TXG_QUIESCE_PIDS[@]}")"` ) - - TXG_SYNC_PIDS=( `check_pid ${PID} ${NAME} "txg_sync" \ - "$(echo "${TXG_SYNC_PIDS[@]}")"` ) - - TXG_TIMELIMIT_PIDS=( `check_pid ${PID} ${NAME} "txg_timelimit" \ - "$(echo "${TXG_TIMELIMIT_PIDS[@]}")"` ) - - ARC_RECLAIM_PIDS=( `check_pid ${PID} ${NAME} "arc_reclaim" \ - "$(echo "${ARC_RECLAIM_PIDS[@]}")"` ) - - L2ARC_FEED_PIDS=( `check_pid ${PID} ${NAME} "l2arc_feed" \ - "$(echo "${L2ARC_FEED_PIDS[@]}")"` ) - done - - # Wait for zpios_io threads to start - kill -s SIGHUP ${PPID} - echo "* Waiting for zpios_io threads to start" - while [ ${RUN_DONE} -eq 0 ]; do - ZPIOS_IO_PIDS=( `ps ax | grep zpios_io | grep -v grep | \ - sed 's/^ *//g' | cut -f1 -d' '` ) - if [ ${#ZPIOS_IO_PIDS[@]} -gt 0 ]; then - break; - fi - sleep 0.1 - done - - echo "`show_pids`" >${RUN_LOG_DIR}/${RUN_ID}/pids.txt -} - -log_pids() { - echo "--- Logging ZFS profile to ${RUN_LOG_DIR}/${RUN_ID}/ ---" - ALL_PIDS=( ${ZIO_TASKQ_PIDS[@]} \ - ${ZIO_REQ_NUL_PIDS[@]} \ - ${ZIO_IRQ_NUL_PIDS[@]} \ - ${ZIO_REQ_RD_PID[@]} \ - ${ZIO_IRQ_RD_PIDS[@]} \ - ${ZIO_REQ_WR_PIDS[@]} \ - ${ZIO_IRQ_WR_PIDS[@]} \ - ${ZIO_REQ_FR_PIDS[@]} \ - ${ZIO_IRQ_FR_PIDS[@]} \ - ${ZIO_REQ_CM_PIDS[@]} \ - ${ZIO_IRQ_CM_PIDS[@]} \ - ${ZIO_REQ_CTL_PIDS[@]} \ - ${ZIO_IRQ_CTL_PIDS[@]} \ - ${TXG_QUIESCE_PIDS[@]} \ - ${TXG_SYNC_PIDS[@]} \ - ${TXG_TIMELIMIT_PIDS[@]} \ - ${ARC_RECLAIM_PIDS[@]} \ - ${L2ARC_FEED_PIDS[@]} \ - ${ZPIOS_IO_PIDS[@]} ) - - while [ ${RUN_DONE} -eq 0 ]; do - NOW=`date +%s.%N` - LOG_PIDS="${RUN_LOG_DIR}/${RUN_ID}/pids-${NOW}" - LOG_DISK="${RUN_LOG_DIR}/${RUN_ID}/disk-${NOW}" - - for PID in "${ALL_PIDS[@]}"; do - if [ -z ${PID} ]; then - continue; - fi - - if [ -e /proc/${PID}/stat ]; then - cat /proc/${PID}/stat | head -n1 >>${LOG_PIDS} - else - echo "<${PID} exited>" >>${LOG_PIDS} - fi - done - - cat /proc/diskstats >${LOG_DISK} - - NOW2=`date +%s.%N` - DELTA=`echo "${POLL_INTERVAL}-(${NOW2}-${NOW})" | bc` - sleep ${DELTA} - done -} - -acquire_pids -log_pids - -# rm ${PROFILE_PID} - -exit 0 diff --git a/scripts/zpios-sanity.sh b/scripts/zpios-sanity.sh deleted file mode 100755 index 0f441157d..000000000 --- a/scripts/zpios-sanity.sh +++ /dev/null @@ -1,171 +0,0 @@ -#!/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 diff --git a/scripts/zpios-survey.sh b/scripts/zpios-survey.sh deleted file mode 100755 index 78601695f..000000000 --- a/scripts/zpios-survey.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash -# -# Wrapper script for easily running a survey of zpios based tests -# - -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-survey.sh - -usage() { -cat << EOF -USAGE: -$0 [hvp] <-c config> <-t test> - -DESCRIPTION: - Helper script for easy zpios survey benchmarking. - -OPTIONS: - -h Show this message - -v Verbose - -p Enable profiling - -c Zpool configuration - -t Zpios test - -l Zpios survey log - -EOF -} - -print_header() { -tee -a ${ZPIOS_SURVEY_LOG} << EOF - -================================================================ -Test: $1 -EOF -} - -# Baseline performance for an out of the box config with no manual tuning. -# Ideally, we want everything to be automatically tuned for your system and -# for this to perform reasonably well. -zpios_survey_base() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+baseline" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - -# Disable ZFS's prefetching. For some reason still not clear to me -# current prefetching policy is quite bad for a random workload. -# Allowing the algorithm to detect a random workload and not do -# anything may be the way to address this issue. -zpios_survey_prefetch() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+prefetch" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} \ - -o "--noprefetch" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - -# Simulating a zerocopy IO path should improve performance by freeing up -# lots of CPU which is wasted move data between buffers. -zpios_survey_zerocopy() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+zerocopy" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} \ - -o "--zerocopy" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - -# Disabling checksumming should show some (if small) improvement -# simply due to freeing up a modest amount of CPU. -zpios_survey_checksum() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+checksum" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} \ - -s "set checksum=off" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - -# Increasing the pending IO depth also seems to improve things likely -# at the expense of latency. This should be explored more because I'm -# seeing a much bigger impact there that I would have expected. There -# may be some low hanging fruit to be found here. -zpios_survey_pending() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+pending" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} \ - zfs="zfs_vdev_max_pending=1024" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - -# Apply all possible turning concurrently to get a best case number -zpios_survey_all() { - TEST_NAME="${ZPOOL_CONFIG}+${ZPIOS_TEST}+all" - print_header ${TEST_NAME} - - ${ZFS_SH} ${VERBOSE_FLAG} \ - zfs="zfs_vdev_max_pending=1024" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZPIOS_SH} ${VERBOSE_FLAG} -c ${ZPOOL_CONFIG} -t ${ZPIOS_TEST} \ - -o "--noprefetch --zerocopy" \ - -s "set checksum=off" | \ - tee -a ${ZPIOS_SURVEY_LOG} - ${ZFS_SH} -u ${VERBOSE_FLAG} | \ - tee -a ${ZPIOS_SURVEY_LOG} -} - - -PROFILE= -ZPOOL_NAME=zpios-survey -ZPOOL_CONFIG=zpool-config.sh -ZPIOS_TEST=zpios-test.sh -ZPIOS_SURVEY_LOG=/dev/null - -while getopts 'hvpc:t:l:' OPTION; do - case $OPTION in - h) - usage - exit 1 - ;; - v) - VERBOSE=1 - VERBOSE_FLAG="-v" - ;; - p) - PROFILE=1 - PROFILE_FLAG="-p" - ;; - c) - ZPOOL_CONFIG=${OPTARG} - ;; - t) - ZPIOS_TEST=${OPTARG} - ;; - l) - ZPIOS_SURVEY_LOG=${OPTARG} - ;; - ?) - usage - exit - ;; - esac -done - -if [ $(id -u) != 0 ]; then - die "Must run as root" -fi - -zpios_survey_base -zpios_survey_prefetch -zpios_survey_zerocopy -zpios_survey_checksum -zpios_survey_pending -zpios_survey_all - -exit 0 diff --git a/scripts/zpios-test/16th-8192rc-4rs-1cs-4off.sh b/scripts/zpios-test/16th-8192rc-4rs-1cs-4off.sh deleted file mode 100755 index cbd9c697a..000000000 --- a/scripts/zpios-test/16th-8192rc-4rs-1cs-4off.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_CONFIG} \ - --threadcount=16 \ - --regioncount=8192 \ - --regionsize=4M \ - --chunksize=1M \ - --offset=4M \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/1th-16rc-4rs-1cs-4off.sh b/scripts/zpios-test/1th-16rc-4rs-1cs-4off.sh deleted file mode 100755 index cd3c50b77..000000000 --- a/scripts/zpios-test/1th-16rc-4rs-1cs-4off.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_CONFIG} \ - --threadcount=1 \ - --regioncount=16 \ - --regionsize=4M \ - --chunksize=1M \ - --offset=4M \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/1x256th-65536rc-4rs-1cs-4off.sh b/scripts/zpios-test/1x256th-65536rc-4rs-1cs-4off.sh deleted file mode 100755 index 743e97b64..000000000 --- a/scripts/zpios-test/1x256th-65536rc-4rs-1cs-4off.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_CONFIG} \ - --threadcount=1,2,4,8,16,32,64,128,256 \ - --regioncount=65536 \ - --regionsize=4M \ - --chunksize=1M \ - --offset=4M \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/256th-65536rc-4rs-1cs-4off.sh b/scripts/zpios-test/256th-65536rc-4rs-1cs-4off.sh deleted file mode 100755 index 92a3b77b4..000000000 --- a/scripts/zpios-test/256th-65536rc-4rs-1cs-4off.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_CONFIG} \ - --threadcount=256 \ - --regioncount=65536 \ - --regionsize=4M \ - --chunksize=1M \ - --offset=4M \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/4th-1024rc-4rs-1cs-4off.sh b/scripts/zpios-test/4th-1024rc-4rs-1cs-4off.sh deleted file mode 100755 index 0db952cd6..000000000 --- a/scripts/zpios-test/4th-1024rc-4rs-1cs-4off.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_CONFIG} \ - --threadcount=4 \ - --regioncount=1024 \ - --regionsize=4M \ - --chunksize=1M \ - --offset=4M \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/Makefile.am b/scripts/zpios-test/Makefile.am deleted file mode 100644 index c74e24f21..000000000 --- a/scripts/zpios-test/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -pkgdatatestdir = $(pkgdatadir)/zpios-test -dist_pkgdatatest_SCRIPTS = \ - $(top_srcdir)/scripts/zpios-test/16th-8192rc-4rs-1cs-4off.sh \ - $(top_srcdir)/scripts/zpios-test/1th-16rc-4rs-1cs-4off.sh \ - $(top_srcdir)/scripts/zpios-test/1x256th-65536rc-4rs-1cs-4off.sh \ - $(top_srcdir)/scripts/zpios-test/256th-65536rc-4rs-1cs-4off.sh \ - $(top_srcdir)/scripts/zpios-test/4th-1024rc-4rs-1cs-4off.sh \ - $(top_srcdir)/scripts/zpios-test/large.sh \ - $(top_srcdir)/scripts/zpios-test/large-thread-survey.sh \ - $(top_srcdir)/scripts/zpios-test/medium.sh \ - $(top_srcdir)/scripts/zpios-test/small.sh \ - $(top_srcdir)/scripts/zpios-test/tiny.sh \ - $(top_srcdir)/scripts/zpios-test/lustre.sh diff --git a/scripts/zpios-test/large-thread-survey.sh b/scripts/zpios-test/large-thread-survey.sh deleted file mode 120000 index 90b6e3c47..000000000 --- a/scripts/zpios-test/large-thread-survey.sh +++ /dev/null @@ -1 +0,0 @@ -1x256th-65536rc-4rs-1cs-4off.sh
\ No newline at end of file diff --git a/scripts/zpios-test/large.sh b/scripts/zpios-test/large.sh deleted file mode 120000 index b8e22bf54..000000000 --- a/scripts/zpios-test/large.sh +++ /dev/null @@ -1 +0,0 @@ -256th-65536rc-4rs-1cs-4off.sh
\ No newline at end of file diff --git a/scripts/zpios-test/lustre.sh b/scripts/zpios-test/lustre.sh deleted file mode 100644 index e02df2269..000000000 --- a/scripts/zpios-test/lustre.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash -# -# Usage: zpios -# --threadcount -t =values -# --threadcount_low -l =value -# --threadcount_high -h =value -# --threadcount_incr -e =value -# --regioncount -n =values -# --regioncount_low -i =value -# --regioncount_high -j =value -# --regioncount_incr -k =value -# --offset -o =values -# --offset_low -m =value -# --offset_high -q =value -# --offset_incr -r =value -# --chunksize -c =values -# --chunksize_low -a =value -# --chunksize_high -b =value -# --chunksize_incr -g =value -# --regionsize -s =values -# --regionsize_low -A =value -# --regionsize_high -B =value -# --regionsize_incr -C =value -# --load -L =dmuio|ssf|fpp -# --pool -p =pool name -# --name -M =test name -# --cleanup -x -# --prerun -P =pre-command -# --postrun -R =post-command -# --log -G =log directory -# --regionnoise -I =shift -# --chunknoise -N =bytes -# --threaddelay -T =jiffies -# --verify -V -# --zerocopy -z -# --nowait -O -# --human-readable -H -# --verbose -v =increase verbosity -# --help -? =this help - -ZPIOS_CMD="${ZPIOS} \ - --load=dmuio,fpp \ - --pool=${ZPOOL_NAME} \ - --name=${ZPOOL_DESC} \ - --threadcount=128 \ - --regioncount=4096 \ - --regionsize=16M \ - --chunksize=1M \ - --offset=0M \ - --threaddelay=0 \ - --cleanup \ - --human-readable \ - ${ZPIOS_OPTIONS}" - -zpios_start() { - if [ ${VERBOSE} ]; then - ZPIOS_CMD="${ZPIOS_CMD} --verbose" - echo ${ZPIOS_CMD} - fi - - ${ZPIOS_CMD} || exit 1 -} - -zpios_stop() { - [ ${VERBOSE} ] && echo -} diff --git a/scripts/zpios-test/medium.sh b/scripts/zpios-test/medium.sh deleted file mode 120000 index d81027b73..000000000 --- a/scripts/zpios-test/medium.sh +++ /dev/null @@ -1 +0,0 @@ -16th-8192rc-4rs-1cs-4off.sh
\ No newline at end of file diff --git a/scripts/zpios-test/small.sh b/scripts/zpios-test/small.sh deleted file mode 120000 index cbf03b5ce..000000000 --- a/scripts/zpios-test/small.sh +++ /dev/null @@ -1 +0,0 @@ -4th-1024rc-4rs-1cs-4off.sh
\ No newline at end of file diff --git a/scripts/zpios-test/tiny.sh b/scripts/zpios-test/tiny.sh deleted file mode 120000 index ba8b7cd0c..000000000 --- a/scripts/zpios-test/tiny.sh +++ /dev/null @@ -1 +0,0 @@ -1th-16rc-4rs-1cs-4off.sh
\ No newline at end of file diff --git a/scripts/zpios.sh b/scripts/zpios.sh deleted file mode 100755 index 0fcb88d4b..000000000 --- a/scripts/zpios.sh +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/bash -# -# Wrapper script for easily running zpios based tests -# - -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.sh -DATE=`date +%Y%m%d-%H%M%S` -if [ "${ZPIOS_MODULES}" ]; then - MODULES=(${ZPIOS_MODULES[*]}) -else - MODULES=(zpios) -fi - -usage() { -cat << EOF -USAGE: -$0 [hvp] <-c config> <-t test> - -DESCRIPTION: - Helper script for easy zpios benchmarking. - -OPTIONS: - -h Show this message - -v Verbose - -f Force everything - -p Enable profiling - -c Zpool configuration - -t Zpios test - -o Additional zpios options - -l Additional zpool options - -s Additional zfs options - -EOF -} - -unload_die() { - unload_modules - while [ -c /dev/zpios ]; do - sleep 1 - done - - exit 1 -} - -print_header() { - echo --------------------- ZPIOS RESULTS ---------------------------- - echo -n "Date: "; date - echo -n "Kernel: "; uname -r - dmesg | grep "Loaded Solaris Porting Layer" | tail -n1 - dmesg | grep "Loaded ZFS Filesystem" | tail -n1 - echo -} - -print_spl_info() { - echo --------------------- SPL Tunings ------------------------------ - ${SYSCTL} -A | grep spl - - if [ -d /sys/module/spl/parameters ]; then - grep [0-9] /sys/module/spl/parameters/* - else - grep [0-9] /sys/module/spl/* - fi - - echo -} - -print_zfs_info() { - echo --------------------- ZFS Tunings ------------------------------ - ${SYSCTL} -A | grep zfs - - if [ -d /sys/module/zfs/parameters ]; then - grep [0-9] /sys/module/zfs/parameters/* - else - grep [0-9] /sys/module/zfs/* - fi - - echo -} - -print_stats() { - echo ---------------------- Statistics ------------------------------- - ${SYSCTL} -A | grep spl | grep stack_max - - if [ -d /proc/spl/kstat/ ]; then - if [ -f /proc/spl/kstat/zfs/arcstats ]; then - echo "* ARC" - cat /proc/spl/kstat/zfs/arcstats - echo - fi - - if [ -f /proc/spl/kstat/zfs/vdev_cache_stats ]; then - echo "* VDEV Cache" - cat /proc/spl/kstat/zfs/vdev_cache_stats - echo - fi - fi - - if [ -f /proc/spl/kmem/slab ]; then - echo "* SPL SLAB" - cat /proc/spl/kmem/slab - echo - fi - - echo -} - -check_test() { - - if [ ! -f ${ZPIOS_TEST} ]; then - local NAME=`basename ${ZPIOS_TEST} .sh` - ERROR="Unknown test '${NAME}', available tests are:\n" - - for TST in `ls ${ZPIOSDIR}/ | grep ".sh"`; do - local NAME=`basename ${TST} .sh` - ERROR="${ERROR}${NAME}\n" - done - - return 1 - fi - - return 0 -} - -zpios_profile_config() { -cat > ${PROFILE_DIR}/zpios-config.sh << EOF -# -# Zpios Profiling Configuration -# - -PROFILE_DIR=/tmp/zpios/${ZPOOL_CONFIG}+${ZPIOS_TEST_ARG}+${DATE} -PROFILE_PRE=${ZPIOSPROFILEDIR}/zpios-profile-pre.sh -PROFILE_POST=${ZPIOSPROFILEDIR}/zpios-profile-post.sh -PROFILE_USER=${ZPIOSPROFILEDIR}/zpios-profile.sh -PROFILE_PIDS=${ZPIOSPROFILEDIR}/zpios-profile-pids.sh -PROFILE_DISK=${ZPIOSPROFILEDIR}/zpios-profile-disk.sh -PROFILE_ARC_PROC=/proc/spl/kstat/zfs/arcstats -PROFILE_VDEV_CACHE_PROC=/proc/spl/kstat/zfs/vdev_cache_stats - -OPROFILE_KERNEL="/boot/vmlinux-`uname -r`" -OPROFILE_KERNEL_DIR="/lib/modules/`uname -r`/kernel/" -OPROFILE_SPL_DIR=${SPLBUILD}/module/ -OPROFILE_ZFS_DIR=${MODDIR} - -EOF -} - -zpios_profile_start() { - PROFILE_DIR=/tmp/zpios/${ZPOOL_CONFIG}+${ZPIOS_TEST_ARG}+${DATE} - - mkdir -p ${PROFILE_DIR} - zpios_profile_config - . ${PROFILE_DIR}/zpios-config.sh - - ZPIOS_OPTIONS="${ZPIOS_OPTIONS} --log=${PROFILE_DIR}" - ZPIOS_OPTIONS="${ZPIOS_OPTIONS} --prerun=${PROFILE_PRE}" - ZPIOS_OPTIONS="${ZPIOS_OPTIONS} --postrun=${PROFILE_POST}" - - /usr/bin/opcontrol --init - /usr/bin/opcontrol --setup --vmlinux=${OPROFILE_KERNEL} -} - -zpios_profile_stop() { - /usr/bin/opcontrol --shutdown - /usr/bin/opcontrol --deinit -} - -PROFILE= -ZPOOL_CONFIG=zpool-config.sh -ZPIOS_TEST=zpios-test.sh -ZPOOL_NAME=zpios -ZPIOS_OPTIONS= -ZPOOL_OPTIONS="" -ZFS_OPTIONS="" - -while getopts 'hvfpc:t:o:l:s:' OPTION; do - case $OPTION in - h) - usage - exit 1 - ;; - v) - VERBOSE=1 - VERBOSE_FLAG="-v" - ;; - f) - FORCE=1 - FORCE_FLAG="-f" - ;; - p) - PROFILE=1 - ;; - c) - ZPOOL_CONFIG=${OPTARG} - ;; - t) - ZPIOS_TEST_ARG=${OPTARG} - ZPIOS_TEST=${ZPIOSDIR}/${OPTARG}.sh - ;; - o) - ZPIOS_OPTIONS=${OPTARG} - ;; - l) # Passed through to zpool-create.sh - ZPOOL_OPTIONS=${OPTARG} - ;; - s) # Passed through to zpool-create.sh - ZFS_OPTIONS=${OPTARG} - ;; - ?) - usage - exit - ;; - esac -done - -if [ $(id -u) != 0 ]; then - die "Must run as root" -fi - -# Validate and source your test config -check_test || die "${ERROR}" -. ${ZPIOS_TEST} - -# Pull in the zpios test module if not loaded. If this fails, it is -# likely because the full module stack was not yet loaded with zfs.sh -if check_modules; then - if ! load_modules; then - die "Run 'zfs.sh' to ensure the full module stack is loaded" - fi -fi - -# Wait for device creation -while [ ! -c /dev/zpios ]; do - sleep 1 -done - -if [ ${VERBOSE} ]; then - print_header - print_spl_info - print_zfs_info -fi - -# Create the zpool configuration -${ZPOOL_CREATE_SH} ${VERBOSE_FLAG} ${FORCE_FLAG} \ - -p ${ZPOOL_NAME} -c ${ZPOOL_CONFIG} \ - -l "${ZPOOL_OPTIONS}" -s "${ZFS_OPTIONS}" || unload_die - -if [ ${PROFILE} ]; then - zpios_profile_start -fi - -zpios_start -zpios_stop - -if [ ${PROFILE} ]; then - zpios_profile_stop -fi - -if [ ${VERBOSE} ]; then - print_stats -fi - -# Destroy the zpool configuration -${ZPOOL_CREATE_SH} ${VERBOSE_FLAG} ${FORCE_FLAG} \ - -p ${ZPOOL_NAME} -c ${ZPOOL_CONFIG} -d || unload_die - -# Unload the test module stack and wait for device removal -unload_modules -while [ -c /dev/zpios ]; do - sleep 1 -done - -exit 0 diff --git a/scripts/zpool-config/Makefile.am b/scripts/zpool-config/Makefile.am deleted file mode 100644 index 2d7799413..000000000 --- a/scripts/zpool-config/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -pkgdataconfigdir = $(pkgdatadir)/zpool-config -dist_pkgdataconfig_SCRIPTS = \ - $(top_srcdir)/scripts/zpool-config/dm0-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/file-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/file-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/file-raidz2.sh \ - $(top_srcdir)/scripts/zpool-config/file-raidz.sh \ - $(top_srcdir)/scripts/zpool-config/hda-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/lo-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/lo-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/lo-raidz2.sh \ - $(top_srcdir)/scripts/zpool-config/lo-raidz.sh \ - $(top_srcdir)/scripts/zpool-config/lo-faulty-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/lo-faulty-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/lo-faulty-raidz.sh \ - $(top_srcdir)/scripts/zpool-config/lo-faulty-raidz2.sh \ - $(top_srcdir)/scripts/zpool-config/lo-faulty-raidz3.sh \ - $(top_srcdir)/scripts/zpool-config/md0-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/md0-raid5.sh \ - $(top_srcdir)/scripts/zpool-config/ram0-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-noraid.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-raidz.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-raidz2.sh \ - $(top_srcdir)/scripts/zpool-config/scsi_debug-raidz3.sh \ - $(top_srcdir)/scripts/zpool-config/sda-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/zpool-raid0.sh \ - $(top_srcdir)/scripts/zpool-config/zpool-raid10.sh \ - $(top_srcdir)/scripts/zpool-config/zpool-raidz.sh diff --git a/scripts/zpool-config/dm0-raid0.sh b/scripts/zpool-config/dm0-raid0.sh deleted file mode 100644 index f7fa8f60a..000000000 --- a/scripts/zpool-config/dm0-raid0.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# -# Four disk Raid-0 DM in a single Raid-0 Configuration -# - -PVCREATE=${PVCREATE:-/sbin/pvcreate} -PVREMOVE=${PVREMOVE:-/sbin/pvremove} -PVDEVICES=${PVDEVICES:-"/dev/sd[abcd]"} - -VGCREATE=${VGCREATE:-/sbin/vgcreate} -VGREMOVE=${VGREMOVE:-/sbin/vgremove} -VGNAME=${VGNAME:-"vg_tank"} - -LVCREATE=${LVCREATE:-/sbin/lvcreate} -LVREMOVE=${LVREMOVE:-/sbin/lvremove} -LVNAME=${LVNAME:-"lv_tank"} -LVSTRIPES=${LVSTRIPES:-4} -LVSIZE=${LVSIZE:-32G} - -DEVICES="/dev/${VGNAME}/${LVNAME}" - -zpool_dm_destroy() { - msg ${LVREMOVE} -f ${VGNAME}/${LVNAME} - ${LVREMOVE} -f ${VGNAME}/${LVNAME} >/dev/null - - msg ${VGREMOVE} -f ${VGNAME} - ${VGREMOVE} -f ${VGNAME} >/dev/null - - msg ${PVREMOVE} ${PVDEVICES} - ${PVREMOVE} ${PVDEVICES} >/dev/null -} - -zpool_create() { - # Remove EFI labels which cause pvcreate failure - for DEVICE in ${PVDEVICES}; do - dd if=/dev/urandom of=${DEVICE} bs=1k count=32 &>/dev/null - done - - msg ${PVCREATE} -f ${PVDEVICES} - ${PVCREATE} -f ${PVDEVICES} >/dev/null || exit 1 - - msg ${VGCREATE} ${VGNAME} ${PVDEVICES} - ${VGCREATE} ${VGNAME} ${PVDEVICES} >/dev/null || exit 2 - - msg ${LVCREATE} --size=${LVSIZE} --stripes=${LVSTRIPES} \ - --name=${LVNAME} ${VGNAME} - ${LVCREATE} --size=${LVSIZE} --stripes=${LVSTRIPES} \ - --name=${LVNAME} ${VGNAME} >/dev/null || exit 3 - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - ${DEVICES} || (zpool_dm_destroy && exit 4) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - zpool_dm_destroy -} diff --git a/scripts/zpool-config/file-raid0.sh b/scripts/zpool-config/file-raid0.sh deleted file mode 100644 index 24b6aec4d..000000000 --- a/scripts/zpool-config/file-raid0.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# -# 4 File Raid-0 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} - -zpool_create() { - for FILE in ${FILES}; do - msg "Creating ${FILE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${FILES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${FILES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - msg "Removing ${FILE}" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/file-raid10.sh b/scripts/zpool-config/file-raid10.sh deleted file mode 100644 index 92b22c2fd..000000000 --- a/scripts/zpool-config/file-raid10.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# -# 4 File Raid-10 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES_M1=${FILES_M1:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1"} -FILES_M2=${FILES_M2:-"$FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -FILES="${FILES_M1} ${FILES_M2}" - -zpool_create() { - for FILE in ${FILES}; do - msg "Creating ${FILE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${FILES_M1} mirror ${FILES_M2} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${FILES_M1} mirror ${FILES_M2} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - msg "Removing ${FILE}" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/file-raidz.sh b/scripts/zpool-config/file-raidz.sh deleted file mode 100644 index 4112deba7..000000000 --- a/scripts/zpool-config/file-raidz.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# -# 4 File Raid-Z Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} - -zpool_create() { - for FILE in ${FILES}; do - msg "Creating ${FILE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${FILES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${FILES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - msg "Removing ${FILE}" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/file-raidz2.sh b/scripts/zpool-config/file-raidz2.sh deleted file mode 100644 index 6e03da869..000000000 --- a/scripts/zpool-config/file-raidz2.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# -# 4 File Raid-Z2 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} - -zpool_create() { - for FILE in ${FILES}; do - msg "Creating ${FILE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${FILES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${FILES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - msg "Removing ${FILE}" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/hda-raid0.sh b/scripts/zpool-config/hda-raid0.sh deleted file mode 100644 index 0623963fd..000000000 --- a/scripts/zpool-config/hda-raid0.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# -# Single disk /dev/hda Raid-0 Configuration -# - -DEVICES="/dev/hda" - -zpool_create() { - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} || exit 1 -} diff --git a/scripts/zpool-config/lo-faulty-raid0.sh b/scripts/zpool-config/lo-faulty-raid0.sh deleted file mode 100644 index 72894ee23..000000000 --- a/scripts/zpool-config/lo-faulty-raid0.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -# -# 4 loopback devices using the md faulty level for easy -# fault injection on top of which is layered raid0 (striped). -# -# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 -# loop0 loop1 loop2 loop3 -# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) -# <--------------------- raid0 zpool ---------------------> -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -LODEVICES="" -MDDEVICES="" - -zpool_create() { - check_loop_utils - check_md_utils - check_md_partitionable || die "Error non-partitionable md devices" - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - MDDEVICE=`unused_md_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || \ - die "Error $? creating ${LODEVICE} using ${FILE}" - - LODEVICES="${LODEVICES} ${LODEVICE}" - - # Setup the md device on the loopback device. - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error $? creating ${MDDEVICE} using ${LODEVICE}") - wait_udev ${MDDEVICE} 30 || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error udev never created ${MDDEVICE}") - - # Check if the md device support partitions - ${BLOCKDEV} --rereadpt ${MDDEVICE} 2>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error ${MDDEVICE} does not support partitions") - - # Create a GPT/EFI partition table for ZFS to use. - ${PARTED} --script ${MDDEVICE} mklabel gpt - MDDEVICES="${MDDEVICES} ${MDDEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${MDDEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${MDDEVICES} || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && exit 1) - - echo "$LODEVICES" >/tmp/zpool-lo.txt - echo "$MDDEVICES" >/tmp/zpool-md.txt -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - destroy_md_devices "`cat /tmp/zpool-md.txt`" - destroy_loop_devices "`cat /tmp/zpool-lo.txt`" - - rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt -} diff --git a/scripts/zpool-config/lo-faulty-raid10.sh b/scripts/zpool-config/lo-faulty-raid10.sh deleted file mode 100644 index 1a523ec45..000000000 --- a/scripts/zpool-config/lo-faulty-raid10.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -# -# 4 loopback devices using the md faulty level for easy -# fault injection on top of which is layered raid10 (mirrored). -# -# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 -# loop0 loop1 loop2 loop3 -# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) -# <--------------------- raid10 zpool ---------------------> -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES_M1=${FILES_M1:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1"} -FILES_M2=${FILES_M2:-"$FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -FILES="${FILES_M1} ${FILES_M2}" -LODEVICES="" -MDDEVICES="" -MDDEVICES_M1="" -MDDEVICES_M2="" - -zpool_create() { - local COUNT=0 - - check_loop_utils - check_md_utils - check_md_partitionable || die "Error non-partitionable md devices" - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - MDDEVICE=`unused_md_device` - let COUNT=${COUNT}+1 - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || \ - die "Error $? creating ${LODEVICE} using ${FILE}" - - LODEVICES="${LODEVICES} ${LODEVICE}" - - # Setup the md device on the loopback device. - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error $? creating ${MDDEVICE} using ${LODEVICE}") - wait_udev ${MDDEVICE} 30 || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error udev never created ${MDDEVICE}") - - # Create empty GPT/EFI partition table. - ${PARTED} --script ${MDDEVICE} mklabel gpt - MDDEVICES="${MDDEVICES} ${MDDEVICE}" - if [ $((COUNT % 2)) -eq 0 ]; then - MDDEVICES_M2="${MDDEVICES_M2} ${MDDEVICE}" - else - MDDEVICES_M1="${MDDEVICES_M1} ${MDDEVICE}" - fi - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${MDDEVICES_M1} mirror ${MDDEVICES_M2} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${MDDEVICES_M1} mirror ${MDDEVICES_M2} || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && exit 1) - - echo "$LODEVICES" >/tmp/zpool-lo.txt - echo "$MDDEVICES" >/tmp/zpool-md.txt -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - destroy_md_devices "`cat /tmp/zpool-md.txt`" - destroy_loop_devices "`cat /tmp/zpool-lo.txt`" - - rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt -} diff --git a/scripts/zpool-config/lo-faulty-raidz.sh b/scripts/zpool-config/lo-faulty-raidz.sh deleted file mode 100644 index c8f88b31f..000000000 --- a/scripts/zpool-config/lo-faulty-raidz.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -# -# 4 loopback devices using the md faulty level for easy -# fault injection on top of which is layered raidz. -# -# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 -# loop0 loop1 loop2 loop3 -# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) -# <--------------------- raidz zpool ---------------------> -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -LODEVICES="" -MDDEVICES="" - -zpool_create() { - check_loop_utils - check_md_utils - check_md_partitionable || die "Error non-partitionable md devices" - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - MDDEVICE=`unused_md_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || \ - die "Error $? creating ${LODEVICE} using ${FILE}" - - LODEVICES="${LODEVICES} ${LODEVICE}" - - # Setup the md device on the loopback device. - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error $? creating ${MDDEVICE} using ${LODEVICE}") - wait_udev ${MDDEVICE} 30 || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error udev never created ${MDDEVICE}") - - # Create empty GPT/EFI partition table. - ${PARTED} --script ${MDDEVICE} mklabel gpt - MDDEVICES="${MDDEVICES} ${MDDEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${MDDEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${MDDEVICES} || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && exit 1) - - echo "$LODEVICES" >/tmp/zpool-lo.txt - echo "$MDDEVICES" >/tmp/zpool-md.txt -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - destroy_md_devices "`cat /tmp/zpool-md.txt`" - destroy_loop_devices "`cat /tmp/zpool-lo.txt`" - - rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt -} diff --git a/scripts/zpool-config/lo-faulty-raidz2.sh b/scripts/zpool-config/lo-faulty-raidz2.sh deleted file mode 100644 index 85b7d463a..000000000 --- a/scripts/zpool-config/lo-faulty-raidz2.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -# -# 4 loopback devices using the md faulty level for easy -# fault injection on top of which is layered raidz2. -# -# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 -# loop0 loop1 loop2 loop3 -# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) -# <--------------------- raidz2 zpool --------------------> -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -LODEVICES="" -MDDEVICES="" - -zpool_create() { - check_loop_utils - check_md_utils - check_md_partitionable || die "Error non-partitionable md devices" - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - MDDEVICE=`unused_md_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || \ - die "Error $? creating ${LODEVICE} using ${FILE}" - - LODEVICES="${LODEVICES} ${LODEVICE}" - - # Setup the md device on the loopback device. - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error $? creating ${MDDEVICE} using ${LODEVICE}") - wait_udev ${MDDEVICE} 30 || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error udev never created ${MDDEVICE}") - - # Create empty GPT/EFI partition table. - ${PARTED} --script ${MDDEVICE} mklabel gpt - MDDEVICES="${MDDEVICES} ${MDDEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${MDDEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${MDDEVICES} || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && exit 1) - - echo "$LODEVICES" >/tmp/zpool-lo.txt - echo "$MDDEVICES" >/tmp/zpool-md.txt -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - destroy_md_devices "`cat /tmp/zpool-md.txt`" - destroy_loop_devices "`cat /tmp/zpool-lo.txt`" - - rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt -} diff --git a/scripts/zpool-config/lo-faulty-raidz3.sh b/scripts/zpool-config/lo-faulty-raidz3.sh deleted file mode 100644 index 7836b5f49..000000000 --- a/scripts/zpool-config/lo-faulty-raidz3.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash -# -# 4 loopback devices using the md faulty level for easy -# fault injection on top of which is layered raidz3. -# -# zpool-vdev0 zpool-vdev1 zpool-vdev2 zpool-vdev3 -# loop0 loop1 loop2 loop3 -# md0 (faulty) md1 (faulty) md2 (faulty) md3 (faulty) -# <--------------------- raidz3 zpool --------------------> -# - -FILES="/tmp/zpool-vdev0 \ - /tmp/zpool-vdev1 \ - /tmp/zpool-vdev2 \ - /tmp/zpool-vdev3" -LODEVICES="" -MDDEVICES="" - -zpool_create() { - check_loop_utils - check_md_utils - check_md_partitionable || die "Error non-partitionable md devices" - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - MDDEVICE=`unused_md_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1M count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || \ - die "Error $? creating ${LODEVICE} using ${FILE}" - - LODEVICES="${LODEVICES} ${LODEVICE}" - - # Setup the md device on the loopback device. - msg "Creating ${MDDEVICE} using ${LODEVICE}" - ${MDADM} --build ${MDDEVICE} --level=faulty \ - --raid-devices=1 ${LODEVICE} &>/dev/null || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error $? creating ${MDDEVICE} using ${LODEVICE}") - wait_udev ${MDDEVICE} 30 || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && \ - die "Error udev never created ${MDDEVICE}") - - # Create empty GPT/EFI partition table. - ${PARTED} --script ${MDDEVICE} mklabel gpt - MDDEVICES="${MDDEVICES} ${MDDEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${MDDEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${MDDEVICES} || \ - (destroy_md_devices "${MDDEVICES}" && \ - destroy_loop_devices "${LODEVICES}" && exit 1) - - echo "$LODEVICES" >/tmp/zpool-lo.txt - echo "$MDDEVICES" >/tmp/zpool-md.txt -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - destroy_md_devices "`cat /tmp/zpool-md.txt`" - destroy_loop_devices "`cat /tmp/zpool-lo.txt`" - - rm -f /tmp/zpool-md.txt /tmp/zpool-lo.txt -} diff --git a/scripts/zpool-config/lo-raid0.sh b/scripts/zpool-config/lo-raid0.sh deleted file mode 100644 index 3f2cfe55e..000000000 --- a/scripts/zpool-config/lo-raid0.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# -# 4 Device Loopback Raid-0 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -DEVICES="" - -zpool_create() { - check_loop_utils - - for FILE in ${FILES}; do - DEVICE=`unused_loop_device` - msg "Creating ${FILE} using loopback device ${DEVICE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - ${LOSETUP} ${DEVICE} ${FILE} || - die "Error $? creating ${FILE} -> ${DEVICE} loopback" - DEVICES="${DEVICES} ${DEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - # Delay to ensure device is closed before removing loop device - sleep 1 - - for FILE in ${FILES}; do - DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${FILE} using loopback device ${DEVICE}" - ${LOSETUP} -d ${DEVICE} || - die "Error $? destroying ${FILE} -> ${DEVICE} loopback" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/lo-raid10.sh b/scripts/zpool-config/lo-raid10.sh deleted file mode 100644 index 580ed1fb7..000000000 --- a/scripts/zpool-config/lo-raid10.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# -# 4 Device Loopback Raid-0 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES_M1=${FILES_M1:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1"} -FILES_M2=${FILES_M2:-"$FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -FILES="${FILES_M1} ${FILES_M2}" -DEVICES_M1="" -DEVICES_M2="" - -zpool_create() { - check_loop_utils - - for FILE in ${FILES_M1}; do - DEVICE=`unused_loop_device` - msg "Creating ${FILE} using loopback device ${DEVICE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - ${LOSETUP} ${DEVICE} ${FILE} || - die "Error $? creating ${FILE} -> ${DEVICE} loopback" - DEVICES_M1="${DEVICES_M1} ${DEVICE}" - done - - for FILE in ${FILES_M2}; do - DEVICE=`unused_loop_device` - msg "Creating ${FILE} using loopback device ${DEVICE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - ${LOSETUP} ${DEVICE} ${FILE} || - die "Error $? creating ${FILE} -> ${DEVICE} loopback" - DEVICES_M2="${DEVICES_M2} ${DEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${DEVICES_M1} mirror ${DEVICES_M2} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${DEVICES_M1} mirror ${DEVICES_M2} -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - # Delay to ensure device is closed before removing loop device - sleep 1 - - for FILE in ${FILES}; do - DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${FILE} using loopback device ${DEVICE}" - ${LOSETUP} -d ${DEVICE} || - die "Error $? destroying ${FILE} -> ${DEVICE} loopback" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/lo-raidz.sh b/scripts/zpool-config/lo-raidz.sh deleted file mode 100644 index 90b26c591..000000000 --- a/scripts/zpool-config/lo-raidz.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -# -# 4 Device Loopback Raid-0 Configuration -# -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -DEVICES="" - -zpool_create() { - check_loop_utils - - for FILE in ${FILES}; do - DEVICE=`unused_loop_device` - msg "Creating ${FILE} using loopback device ${DEVICE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - ${LOSETUP} ${DEVICE} ${FILE} || - die "Error $? creating ${FILE} -> ${DEVICE} loopback" - DEVICES="${DEVICES} ${DEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - # Delay to ensure device is closed before removing loop device - sleep 1 - - for FILE in ${FILES}; do - DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${FILE} using loopback device ${DEVICE}" - ${LOSETUP} -d ${DEVICE} || - die "Error $? destroying ${FILE} -> ${DEVICE} loopback" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/lo-raidz2.sh b/scripts/zpool-config/lo-raidz2.sh deleted file mode 100644 index 9e58b2a17..000000000 --- a/scripts/zpool-config/lo-raidz2.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# -# 4 Device Loopback Raid-0 Configuration -# - -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 \ - $FILEDIR/file-vdev2 $FILEDIR/file-vdev3"} -DEVICES="" - -zpool_create() { - check_loop_utils - - for FILE in ${FILES}; do - DEVICE=`unused_loop_device` - msg "Creating ${FILE} using loopback device ${DEVICE}" - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || die "Error $? creating ${FILE}" - ${LOSETUP} ${DEVICE} ${FILE} || - die "Error $? creating ${FILE} -> ${DEVICE} loopback" - DEVICES="${DEVICES} ${DEVICE}" - done - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - # Delay to ensure device is closed before removing loop device - sleep 1 - - for FILE in ${FILES}; do - DEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${FILE} using loopback device ${DEVICE}" - ${LOSETUP} -d ${DEVICE} || - die "Error $? destroying ${FILE} -> ${DEVICE} loopback" - rm -f ${FILE} || exit 1 - done -} diff --git a/scripts/zpool-config/md0-raid10.sh b/scripts/zpool-config/md0-raid10.sh deleted file mode 100644 index 65cae6a26..000000000 --- a/scripts/zpool-config/md0-raid10.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# -# Four disk Raid-10 in a single Raid-0 Configuration -# - -MDADM=${MDADM:-/sbin/mdadm} -MDDEVICES=${MDDEVICES:-"/dev/sd[abcd]"} -MDCOUNT=${MDCOUNT:-4} -MDRAID=${MDRAID:-10} - -DEVICES="/dev/md0" - -zpool_md_destroy() { - msg ${MDADM} --manage --stop ${DEVICES} - ${MDADM} --manage --stop ${DEVICES} &>/dev/null - - msg ${MDADM} --zero-superblock ${MDDEVICES} - ${MDADM} --zero-superblock ${MDDEVICES} >/dev/null -} - -zpool_create() { - msg ${MDADM} --create ${DEVICES} --level=${MDRAID} \ - --raid-devices=${MDCOUNT} ${MDDEVICES} - ${MDADM} --create ${DEVICES} --level=${MDRAID} \ - --raid-devices=${MDCOUNT} ${MDDEVICES} \ - &>/dev/null || (zpool_md_destroy && exit 1) - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - ${DEVICES} || (zpool_md_destroy && exit 2) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - zpool_md_destroy -} diff --git a/scripts/zpool-config/md0-raid5.sh b/scripts/zpool-config/md0-raid5.sh deleted file mode 100644 index 373034bd3..000000000 --- a/scripts/zpool-config/md0-raid5.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# -# Four disk Raid-5 in a single Raid-0 Configuration -# - -MDADM=${MDADM:-/sbin/mdadm} -MDDEVICES=${MDDEVICES:-"/dev/sd[abcd]"} -MDCOUNT=${MDCOUNT:-4} -MDRAID=${MDRAID:-5} - -DEVICES="/dev/md0" - -zpool_md_destroy() { - msg ${MDADM} --manage --stop ${DEVICES} - ${MDADM} --manage --stop ${DEVICES} &>/dev/null - - msg ${MDADM} --zero-superblock ${MDDEVICES} - ${MDADM} --zero-superblock ${MDDEVICES} >/dev/null -} - -zpool_create() { - msg ${MDADM} --create ${DEVICES} --level=${MDRAID} \ - --raid-devices=${MDCOUNT} ${MDDEVICES} - ${MDADM} --create ${DEVICES} --level=${MDRAID} \ - --raid-devices=${MDCOUNT} ${MDDEVICES} \ - &>/dev/null || (zpool_md_destroy && exit 1) - - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - ${DEVICES} || (zpool_md_destroy && exit 2) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - zpool_md_destroy -} diff --git a/scripts/zpool-config/ram0-raid0.sh b/scripts/zpool-config/ram0-raid0.sh deleted file mode 100644 index 801c912ca..000000000 --- a/scripts/zpool-config/ram0-raid0.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# -# Single ram disk /dev/ram0 Raid-0 Configuration -# - -DEVICES="/dev/ram0" - -zpool_create() { - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} || exit 1 -} diff --git a/scripts/zpool-config/scsi_debug-noraid.sh b/scripts/zpool-config/scsi_debug-noraid.sh deleted file mode 100644 index c508ffbf1..000000000 --- a/scripts/zpool-config/scsi_debug-noraid.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug devices on top of which is layered no raid. -# - -SDSIZE=${SDSIZE:-128} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe - -zpool_create() { - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - SDDEVICE=`${LSSCSI}|${AWK} '/scsi_debug/ { print $6; exit }'` - - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${SDDEVICE}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${SDDEVICE} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/scsi_debug-raid0.sh b/scripts/zpool-config/scsi_debug-raid0.sh deleted file mode 100644 index 66720852b..000000000 --- a/scripts/zpool-config/scsi_debug-raid0.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug device for fault injection and 3 loopback devices -# on top of which is layered raid0 (striped). -# - -SDSIZE=${SDSIZE:-256} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"} -DEVICES="" - -zpool_create() { - check_loop_utils - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - - SDDEVICE=`${LSSCSI} | ${AWK} '/scsi_debug/ { print $6; exit }'` - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || (${RMMOD} scsi_debug && \ - die "Error $? creating ${FILE}") - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug \ - die "Error $? creating ${LODEVICE} using ${FILE}") - - DEVICES="${DEVICES} ${LODEVICE}" - done - - DEVICES="${DEVICES} ${SDDEVICE}" - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${LODEVICE} using ${FILE}" - ${LOSETUP} -d ${LODEVICE} || - die "Error $? destroying ${LODEVICE} using ${FILE}" - rm -f ${FILE} || exit 1 - done - - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/scsi_debug-raid10.sh b/scripts/zpool-config/scsi_debug-raid10.sh deleted file mode 100644 index caff1a0f6..000000000 --- a/scripts/zpool-config/scsi_debug-raid10.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug device for fault injection and 3 loopback devices -# on top of which is layered raid10 (mirrored). -# - -SDSIZE=${SDSIZE:-256} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"} -DEVICES_M1="" -DEVICES_M2="" - -zpool_create() { - local COUNT=0 - - check_loop_utils - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - SDDEVICE=`${LSSCSI}|${AWK} '/scsi_debug/ { print $6; exit }'` - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || (${RMMOD} scsi_debug && \ - die "Error $? creating ${FILE}") - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug \ - die "Error $? creating ${LODEVICE} using ${FILE}") - - DEVICES="${DEVICES} ${LODEVICE}" - done - - DEVICES="${DEVICES} ${SDDEVICE}" - - for DEVICE in ${DEVICES}; do - let COUNT=${COUNT}+1 - - if [ $((COUNT % 2)) -eq 0 ]; then - DEVICES_M2="${DEVICES_M2} ${DEVICE}" - else - DEVICES_M1="${DEVICES_M1} ${DEVICE}" - fi - done - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} " \ - "mirror ${DEVICES_M1} mirror ${DEVICES_M2}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} \ - mirror ${DEVICES_M1} mirror ${DEVICES_M2} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${LODEVICE} using ${FILE}" - ${LOSETUP} -d ${LODEVICE} || - die "Error $? destroying ${LODEVICE} using ${FILE}" - rm -f ${FILE} || exit 1 - done - - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/scsi_debug-raidz.sh b/scripts/zpool-config/scsi_debug-raidz.sh deleted file mode 100644 index bc22d1004..000000000 --- a/scripts/zpool-config/scsi_debug-raidz.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug device for fault injection and 3 loopback devices -# on top of which is layered raidz. -# - -SDSIZE=${SDSIZE:-256} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"} -DEVICES="" - -zpool_create() { - check_loop_utils - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - - SDDEVICE=`${LSSCSI} | ${AWK} '/scsi_debug/ { print $6; exit }'` - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || (${RMMOD} scsi_debug && \ - die "Error $? creating ${FILE}") - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug \ - die "Error $? creating ${LODEVICE} using ${FILE}") - - DEVICES="${DEVICES} ${LODEVICE}" - done - - DEVICES="${DEVICES} ${SDDEVICE}" - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${DEVICES}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz ${DEVICES} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${LODEVICE} using ${FILE}" - ${LOSETUP} -d ${LODEVICE} || - die "Error $? destroying ${LODEVICE} using ${FILE}" - rm -f ${FILE} || exit 1 - done - - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/scsi_debug-raidz2.sh b/scripts/zpool-config/scsi_debug-raidz2.sh deleted file mode 100644 index 67a6f243a..000000000 --- a/scripts/zpool-config/scsi_debug-raidz2.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug device for fault injection and 3 loopback devices -# on top of which is layered raidz2. -# - -SDSIZE=${SDSIZE:-256} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe -FILEDIR=${FILEDIR:-/var/tmp} -FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"} -DEVICES="" - -zpool_create() { - check_loop_utils - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - - SDDEVICE=`${LSSCSI} | ${AWK} '/scsi_debug/ { print $6; exit }'` - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || (${RMMOD} scsi_debug && \ - die "Error $? creating ${FILE}") - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug \ - die "Error $? creating ${LODEVICE} using ${FILE}") - - DEVICES="${DEVICES} ${LODEVICE}" - done - - DEVICES="${DEVICES} ${SDDEVICE}" - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${DEVICES}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz2 ${DEVICES} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${LODEVICE} using ${FILE}" - ${LOSETUP} -d ${LODEVICE} || - die "Error $? destroying ${LODEVICE} using ${FILE}" - rm -f ${FILE} || exit 1 - done - - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/scsi_debug-raidz3.sh b/scripts/zpool-config/scsi_debug-raidz3.sh deleted file mode 100644 index d7ef2098e..000000000 --- a/scripts/zpool-config/scsi_debug-raidz3.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -# -# 1 scsi_debug device for fault injection and 3 loopback devices -# on top of which is layered raidz3. -# - -SDSIZE=${SDSIZE:-256} -SDHOSTS=${SDHOSTS:-1} -SDTGTS=${SDTGTS:-1} -SDLUNS=${SDLUNS:-1} -LDMOD=/sbin/modprobe -FILES="/tmp/zpool-vdev0 \ - /tmp/zpool-vdev1 \ - /tmp/zpool-vdev2" -DEVICES="" - -zpool_create() { - check_loop_utils - check_sd_utils - - test `${LSMOD} | grep -c scsi_debug` -gt 0 && \ - (echo 0 >/sys/module/scsi_debug/parameters/every_nth && \ - ${RMMOD} scsi_debug || exit 1) - udev_trigger - - msg "${LDMOD} scsi_debug dev_size_mb=${SDSIZE} " \ - "add_host=${SDHOSTS} num_tgts=${SDTGTS} " \ - "max_luns=${SDLUNS}" - ${LDMOD} scsi_debug \ - dev_size_mb=${SDSIZE} \ - add_host=${SDHOSTS} \ - num_tgts=${SDTGTS} \ - max_luns=${SDLUNS} || \ - die "Error $? creating scsi_debug devices" - udev_trigger - - SDDEVICE=`${LSSCSI} | ${AWK} '/scsi_debug/ { print $6; exit }'` - msg "${PARTED} -s ${SDDEVICE} mklabel gpt" - ${PARTED} -s ${SDDEVICE} mklabel gpt || \ - (${RMMOD} scsi_debug && die "Error $? creating gpt label") - - for FILE in ${FILES}; do - LODEVICE=`unused_loop_device` - - rm -f ${FILE} || exit 1 - dd if=/dev/zero of=${FILE} bs=1024k count=0 seek=256 \ - &>/dev/null || (${RMMOD} scsi_debug && \ - die "Error $? creating ${FILE}") - - # Setup the loopback device on the file. - msg "Creating ${LODEVICE} using ${FILE}" - ${LOSETUP} ${LODEVICE} ${FILE} || (${RMMOD} scsi_debug \ - die "Error $? creating ${LODEVICE} using ${FILE}") - - DEVICES="${DEVICES} ${LODEVICE}" - done - - DEVICES="${DEVICES} ${SDDEVICE}" - - msg "${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${DEVICES}" - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} raidz3 ${DEVICES} || \ - (${RMMOD} scsi_debug && exit 1) -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} - - for FILE in ${FILES}; do - LODEVICE=`${LOSETUP} -a | grep ${FILE} | head -n1|cut -f1 -d:` - msg "Removing ${LODEVICE} using ${FILE}" - ${LOSETUP} -d ${LODEVICE} || - die "Error $? destroying ${LODEVICE} using ${FILE}" - rm -f ${FILE} || exit 1 - done - - msg "${RMMOD} scsi_debug" - ${RMMOD} scsi_debug || die "Error $? removing scsi_debug devices" -} diff --git a/scripts/zpool-config/sda-raid0.sh b/scripts/zpool-config/sda-raid0.sh deleted file mode 100644 index 48dc96d27..000000000 --- a/scripts/zpool-config/sda-raid0.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# -# Single disk /dev/sda Raid-0 Configuration -# - -DEVICES="/dev/sda" - -zpool_create() { - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} || exit 1 -} diff --git a/scripts/zpool-config/zpool-raid0.sh b/scripts/zpool-config/zpool-raid0.sh deleted file mode 100644 index c75775588..000000000 --- a/scripts/zpool-config/zpool-raid0.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash -# -# Zpool Raid-0 Configuration -# -# This script is used to test with the /dev/disk/by-vdev/[A-Z][1-n] devices. -# It assumes that you have already populated /dev/disk/by-vdev/ by creating -# an /etc/zfs/vdev_id.conf file based on your system design. -# -# You can then use either the zpool-create.sh or the zpios.sh test script to -# test various Raid-0 configurations by adjusting the following tunables. -# For example if you wanted to create and test a single 4-disk Raid-0 -# configuration using disks [A-D]1 with dedicated ZIL and L2ARC devices -# you could run the following. -# -# ZIL="log A2" L2ARC="cache B2" RANKS=1 CHANNELS=4 \ -# zpool-create.sh -c zpool-raid0 -# -# zpool status tank -# pool: tank -# state: ONLINE -# scan: none requested -# config: -# -# NAME STATE READ WRITE CKSUM -# tank ONLINE 0 0 0 -# A1 ONLINE 0 0 0 -# B1 ONLINE 0 0 0 -# C1 ONLINE 0 0 0 -# D1 ONLINE 0 0 0 -# logs -# A2 ONLINE 0 0 0 -# cache -# B2 ONLINE 0 0 0 -# -# errors: No known data errors -# - -# Number of interior vdevs to create using the following rank ids. -RANKS=${RANKS:-1} -RANK_LIST=( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) - -# Number of devices per vdev using the following channel ids. -CHANNELS=${CHANNELS:-8} -CHANNEL_LIST=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) - -# Create a ZIL vdev as follows. -ZIL=${ZIL:-} - -# Create an L2ARC vdev as follows. -L2ARC=${L2ARC:-} - - -raid0_setup() { - local RANKS=$1 - local CHANNELS=$2 - - RAID0S=() - for (( i=0, k=0; i<${RANKS}; i++ )); do - RANK=${RANK_LIST[$i]} - - for (( j=0; j<${CHANNELS}; j++, k++ )); do - RAID0S[${k}]="${CHANNEL_LIST[$j]}${RANK}" - done - done - - return 0 -} - -zpool_create() { - raid0_setup ${RANKS} ${CHANNELS} - - ZPOOL_DEVICES="${RAID0S[*]} ${ZIL} ${L2ARC}" - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} -} diff --git a/scripts/zpool-config/zpool-raid10.sh b/scripts/zpool-config/zpool-raid10.sh deleted file mode 100644 index d71c4d366..000000000 --- a/scripts/zpool-config/zpool-raid10.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash -# -# Zpool Raid-10 Configuration -# -# This script is used to test with the /dev/disk/by-vdev/[A-Z][1-n] devices. -# It assumes that you have already populated /dev/disk/by-vdev/ by creating -# an /etc/zfs/vdev_id.conf file based on your system design. -# -# You can then use either the zpool-create.sh or the zpios.sh test script to -# test various Raid-10 configurations by adjusting the following tunables. -# For example if you wanted to create and test a single 4-disk Raid-10 -# configuration using disks [A-D]1 with dedicated ZIL and L2ARC devices -# you could run the following. -# -# ZIL="log A2" L2ARC="cache B2" RANKS=1 CHANNELS=4 \ -# zpool-create.sh -c zpool-raid10 -# -# zpool status tank -# pool: tank -# state: ONLINE -# scan: none requested -# config: -# -# NAME STATE READ WRITE CKSUM -# tank ONLINE 0 0 0 -# mirror-0 ONLINE 0 0 0 -# A1 ONLINE 0 0 0 -# B1 ONLINE 0 0 0 -# mirror-1 ONLINE 0 0 0 -# C1 ONLINE 0 0 0 -# D1 ONLINE 0 0 0 -# logs -# A2 ONLINE 0 0 0 -# cache -# B2 ONLINE 0 0 0 -# -# errors: No known data errors -# - -# Number of interior vdevs to create using the following rank ids. -RANKS=${RANKS:-1} -RANK_LIST=( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) - -# Number of devices per vdev using the following channel ids. -CHANNELS=${CHANNELS:-8} -CHANNEL_LIST=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) - -# Create a ZIL vdev as follows. -ZIL=${ZIL:-} - -# Create an L2ARC vdev as follows. -L2ARC=${L2ARC:-} - - -raid10_setup() { - local RANKS=$1 - local CHANNELS=$2 - local IDX=0 - - RAID10S=() - for (( i=0, l=0 ; i<${RANKS}; i++ )); do - RANK=${RANK_LIST[$i]} - - for (( j=0, k=1; j<${CHANNELS}; j+=2,k+=2,l++ )); do - DISK1="${CHANNEL_LIST[$j]}${RANK}" - DISK2="${CHANNEL_LIST[$k]}${RANK}" - RAID10S[$l]="mirror ${DISK1} ${DISK2}" - done - done - - return 0 -} - -zpool_create() { - raid10_setup ${RANKS} ${CHANNELS} - - ZPOOL_DEVICES="${RAID10S[*]} ${ZIL} ${L2ARC}" - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} -} diff --git a/scripts/zpool-config/zpool-raidz.sh b/scripts/zpool-config/zpool-raidz.sh deleted file mode 100644 index b3f21a003..000000000 --- a/scripts/zpool-config/zpool-raidz.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -# -# Zpool Raid-Z Configuration -# -# This script is used to test with the /dev/disk/by-vdev/[A-Z][1-n] devices. -# It assumes that you have already populated /dev/disk/by-vdev/ by creating -# an /etc/zfs/vdev_id.conf file based on your system design. -# -# You can then use either the zpool-create.sh or the zpios.sh test script to -# test various Raid-Z configurations by adjusting the following tunables. -# For example if you wanted to create and test a single 4-disk Raid-Z2 -# configuration using disks [A-D]1 with dedicated ZIL and L2ARC devices -# you could run the following. -# -# ZIL="log A2" L2ARC="cache B2" RANKS=1 CHANNELS=4 LEVEL=2 \ -# zpool-create.sh -c zpool-raidz -# -# zpool status tank -# pool: tank -# state: ONLINE -# scan: none requested -# config: -# -# NAME STATE READ WRITE CKSUM -# tank ONLINE 0 0 0 -# raidz2-0 ONLINE 0 0 0 -# A1 ONLINE 0 0 0 -# B1 ONLINE 0 0 0 -# C1 ONLINE 0 0 0 -# D1 ONLINE 0 0 0 -# logs -# A2 ONLINE 0 0 0 -# cache -# B2 ONLINE 0 0 0 -# -# errors: No known data errors -# - -# Number of interior vdevs to create using the following rank ids. -RANKS=${RANKS:-1} -RANK_LIST=( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ) - -# Number of devices per vdev using the following channel ids. -CHANNELS=${CHANNELS:-8} -CHANNEL_LIST=( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) - -# Raid-Z Level: 1, 2, or 3. -LEVEL=${LEVEL:-2} - -# Create a ZIL vdev as follows. -ZIL=${ZIL:-} - -# Create an L2ARC vdev as follows. -L2ARC=${L2ARC:-} - - -raidz_setup() { - local RANKS=$1 - local CHANNELS=$2 - - RAIDZS=() - for (( i=0; i<${RANKS}; i++ )); do - RANK=${RANK_LIST[$i]} - RAIDZ=("raidz${LEVEL}") - - for (( j=0, k=1; j<${CHANNELS}; j++, k++ )); do - RAIDZ[$k]="${CHANNEL_LIST[$j]}${RANK}" - done - - RAIDZS[$i]="${RAIDZ[*]}" - done - - return 0 -} - -zpool_create() { - raidz_setup ${RANKS} ${CHANNELS} - - ZPOOL_DEVICES="${RAIDZS[*]} ${ZIL} ${L2ARC}" - msg ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} - ${ZPOOL} create ${ZPOOL_FLAGS} ${ZPOOL_NAME} ${ZPOOL_DEVICES} || exit 1 -} - -zpool_destroy() { - msg ${ZPOOL} destroy ${ZPOOL_NAME} - ${ZPOOL} destroy ${ZPOOL_NAME} -} diff --git a/scripts/zpool-create.sh b/scripts/zpool-create.sh deleted file mode 100755 index 16ee67146..000000000 --- a/scripts/zpool-create.sh +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/bash - -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=zpool-create.sh - -usage() { -cat << EOF -USAGE: -$0 [hvfxcp] - -DESCRIPTION: - Create one of several predefined zpool configurations. - -OPTIONS: - -h Show this message - -v Verbose - -f Force everything - -x Disable all zpool features - -c Configuration for zpool - -p Name for zpool - -d Destroy zpool (default create) - -l Additional zpool options - -s Additional zfs options - -EOF -} - -check_config() { - - if [ ! -f ${ZPOOL_CONFIG} ]; then - local NAME=`basename ${ZPOOL_CONFIG} .sh` - ERROR="Unknown config '${NAME}', available configs are:\n" - - for CFG in `ls ${ZPOOLDIR}/ | grep ".sh"`; do - local NAME=`basename ${CFG} .sh` - ERROR="${ERROR}${NAME}\n" - done - - return 1 - fi - - return 0 -} - -ZPOOL_CONFIG=unknown -ZPOOL_NAME=tank -ZPOOL_DESTROY= -ZPOOL_FLAGS=${ZPOOL_FLAGS:-""} -ZPOOL_OPTIONS="" -ZFS_OPTIONS="" - -while getopts 'hvfxc:p:dl:s:' OPTION; do - case $OPTION in - h) - usage - exit 1 - ;; - v) - VERBOSE=1 - VERBOSE_FLAG="-v" - ;; - f) - FORCE=1 - ZPOOL_FLAGS="$ZPOOL_FLAGS -f" - ;; - x) - NO_FEATURES=1 - ZPOOL_FLAGS="$ZPOOL_FLAGS -d" - ;; - c) - ZPOOL_CONFIG=${ZPOOLDIR}/${OPTARG}.sh - ;; - p) - ZPOOL_NAME=${OPTARG} - ;; - d) - ZPOOL_DESTROY=1 - ;; - l) - ZPOOL_OPTIONS=${OPTARG} - ;; - s) - ZFS_OPTIONS=${OPTARG} - ;; - ?) - usage - exit 1 - ;; - esac -done - -if [ $(id -u) != 0 ]; then - die "Must run as root" -fi - -check_config || die "${ERROR}" -. ${ZPOOL_CONFIG} - -if [ ${ZPOOL_DESTROY} ]; then - zpool_destroy -else - zpool_create - - if [ "${ZPOOL_OPTIONS}" ]; then - if [ ${VERBOSE} ]; then - echo - echo "${ZPOOL} ${ZPOOL_OPTIONS} ${ZPOOL_NAME}" - fi - ${ZPOOL} ${ZPOOL_OPTIONS} ${ZPOOL_NAME} || exit 1 - fi - - if [ "${ZFS_OPTIONS}" ]; then - if [ ${VERBOSE} ]; then - echo - echo "${ZFS} ${ZFS_OPTIONS} ${ZPOOL_NAME}" - fi - ${ZFS} ${ZFS_OPTIONS} ${ZPOOL_NAME} || exit 1 - fi - - if [ ${VERBOSE} ]; then - echo - echo "zpool list" - ${ZPOOL} list || exit 1 - - echo - echo "zpool status ${ZPOOL_NAME}" - ${ZPOOL} status ${ZPOOL_NAME} || exit 1 - fi -fi - -exit 0 |