Update ZFS from version 6 to 13 and bring some FreeBSD-specific changes.
This bring huge amount of changes, I'll enumerate only user-visible changes:
- Delegated Administration
Allows regular users to perform ZFS operations, like file system
creation, snapshot creation, etc.
- L2ARC
Level 2 cache for ZFS - allows to use additional disks for cache.
Huge performance improvements mostly for random read of mostly
static content.
- slog
Allow to use additional disks for ZFS Intent Log to speed up
operations like fsync(2).
- vfs.zfs.super_owner
Allows regular users to perform privileged operations on files stored
on ZFS file systems owned by him. Very careful with this one.
- chflags(2)
Not all the flags are supported. This still needs work.
- ZFSBoot
Support to boot off of ZFS pool. Not finished, AFAIK.
Submitted by: dfr
- Snapshot properties
- New failure modes
Before if write requested failed, system paniced. Now one
can select from one of three failure modes:
- panic - panic on write error
- wait - wait for disk to reappear
- continue - serve read requests if possible, block write requests
- Refquota, refreservation properties
Just quota and reservation properties, but don't count space consumed
by children file systems, clones and snapshots.
- Sparse volumes
ZVOLs that don't reserve space in the pool.
- External attributes
Compatible with extattr(2).
- NFSv4-ACLs
Not sure about the status, might not be complete yet.
Submitted by: trasz
- Creation-time properties
- Regression tests for zpool(8) command.
Obtained from: OpenSolaris
2008-11-17 20:49:29 +00:00
|
|
|
# $FreeBSD$
|
|
|
|
|
|
|
|
ntest=1
|
|
|
|
os=`uname -s`
|
|
|
|
|
|
|
|
echo ${dir} | egrep '^/' >/dev/null 2>&1
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
maindir="${dir}/../.."
|
|
|
|
else
|
|
|
|
maindir="`pwd`/${dir}/../.."
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Set up correct command names and switches
|
|
|
|
if [ -z "${LUSTRE}" ]; then
|
|
|
|
ZPOOL="zpool"
|
|
|
|
ZFS="zfs"
|
|
|
|
ZDB="zdb"
|
|
|
|
zpool_f_flag="-f"
|
|
|
|
else
|
|
|
|
ZPOOL="lzpool"
|
|
|
|
ZFS="lzfs"
|
|
|
|
ZDB="lzdb"
|
|
|
|
zpool_f_flag="-F"
|
|
|
|
no_mountpoint=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Use correct arguments to cmd line programs
|
|
|
|
stat --version 2>/dev/null | grep GNU >/dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
GNU_STAT="yes"
|
|
|
|
fi
|
|
|
|
if [ "${os}" = "SunOS" ]; then
|
|
|
|
import_flags="-d /dev/lofi"
|
|
|
|
mount_t_flag="-F"
|
|
|
|
else
|
|
|
|
mount_t_flag="-t"
|
|
|
|
fi
|
|
|
|
|
|
|
|
die()
|
|
|
|
{
|
|
|
|
echo "${1}" > /dev/stderr
|
2014-10-25 04:52:48 +00:00
|
|
|
echo "Bail out!"
|
Update ZFS from version 6 to 13 and bring some FreeBSD-specific changes.
This bring huge amount of changes, I'll enumerate only user-visible changes:
- Delegated Administration
Allows regular users to perform ZFS operations, like file system
creation, snapshot creation, etc.
- L2ARC
Level 2 cache for ZFS - allows to use additional disks for cache.
Huge performance improvements mostly for random read of mostly
static content.
- slog
Allow to use additional disks for ZFS Intent Log to speed up
operations like fsync(2).
- vfs.zfs.super_owner
Allows regular users to perform privileged operations on files stored
on ZFS file systems owned by him. Very careful with this one.
- chflags(2)
Not all the flags are supported. This still needs work.
- ZFSBoot
Support to boot off of ZFS pool. Not finished, AFAIK.
Submitted by: dfr
- Snapshot properties
- New failure modes
Before if write requested failed, system paniced. Now one
can select from one of three failure modes:
- panic - panic on write error
- wait - wait for disk to reappear
- continue - serve read requests if possible, block write requests
- Refquota, refreservation properties
Just quota and reservation properties, but don't count space consumed
by children file systems, clones and snapshots.
- Sparse volumes
ZVOLs that don't reserve space in the pool.
- External attributes
Compatible with extattr(2).
- NFSv4-ACLs
Not sure about the status, might not be complete yet.
Submitted by: trasz
- Creation-time properties
- Regression tests for zpool(8) command.
Obtained from: OpenSolaris
2008-11-17 20:49:29 +00:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
calcsum()
|
|
|
|
{
|
|
|
|
dd if="${1}" bs=1M 2>/dev/null | openssl md5
|
|
|
|
}
|
|
|
|
|
|
|
|
create_file()
|
|
|
|
{
|
|
|
|
name="${1}"
|
|
|
|
size="${2}"
|
|
|
|
|
|
|
|
dd if=/dev/urandom of=${name} bs=${size} count=1 >/dev/null 2>&1
|
|
|
|
sync
|
|
|
|
}
|
|
|
|
|
|
|
|
expect()
|
|
|
|
{
|
|
|
|
eorig="${1}"
|
|
|
|
eexp=`echo "${eorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
|
|
|
|
shift
|
|
|
|
gorig=`sh -c "$*" 2>&1`
|
|
|
|
got=`echo "${gorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs`
|
|
|
|
echo "${got}" | egrep "${eexp}" >/dev/null
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
echo "ok ${ntest} ${add_msg}"
|
|
|
|
else
|
|
|
|
echo "not ok ${ntest} ${add_msg}"
|
|
|
|
echo "# ----- expected from: $*"
|
|
|
|
echo "${eorig}" | sed 's/^/# /'
|
|
|
|
echo "# ----- got:"
|
|
|
|
echo "${gorig}" | sed 's/^/# /'
|
|
|
|
echo "# ----- end"
|
|
|
|
fi
|
|
|
|
ntest=`expr $ntest + 1`
|
|
|
|
}
|
|
|
|
|
|
|
|
expect_ok()
|
|
|
|
{
|
|
|
|
out=`$* 2>&1`
|
|
|
|
ec=$?
|
|
|
|
if [ $ec -eq 0 ]; then
|
|
|
|
echo "ok ${ntest} ${add_msg}"
|
|
|
|
echo "# ----- expected success from: $*"
|
|
|
|
if [ ! -z "${out}" ]; then
|
|
|
|
echo "# ----- output (exit code=${ec}):"
|
|
|
|
echo "${out}" | sed 's/^/# /'
|
|
|
|
echo "# ----- end"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo "not ok ${ntest} ${add_msg}"
|
|
|
|
echo "# ----- expected success from: $*"
|
|
|
|
echo "# ----- output (exit code=${ec}):"
|
|
|
|
echo "${out}" | sed 's/^/# /'
|
|
|
|
echo "# ----- end"
|
|
|
|
fi
|
|
|
|
ntest=`expr $ntest + 1`
|
|
|
|
}
|
|
|
|
|
|
|
|
expect_fl()
|
|
|
|
{
|
|
|
|
out=`$* 2>&1`
|
|
|
|
ec=$?
|
|
|
|
if [ $ec -ne 0 ]; then
|
|
|
|
echo "ok ${ntest} ${add_msg}"
|
|
|
|
echo "# ----- expected failure from: $*"
|
|
|
|
if [ ! -z "${out}" ]; then
|
|
|
|
echo "# ----- output (exit code=${ec}):"
|
|
|
|
echo "${out}" | sed 's/^/# /'
|
|
|
|
echo "# ----- end"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo "not ok ${ntest} ${add_msg}"
|
|
|
|
echo "# ----- expected failure from: $*"
|
|
|
|
echo "# ----- output (exit code=${ec}):"
|
|
|
|
echo "${out}" | sed 's/^/# /'
|
|
|
|
echo "# ----- end"
|
|
|
|
fi
|
|
|
|
ntest=`expr $ntest + 1`
|
|
|
|
}
|
|
|
|
|
|
|
|
quick_exit()
|
|
|
|
{
|
|
|
|
echo "1..1"
|
|
|
|
echo "ok 1"
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
# Set up a scratch tmpfs directory (Linux only)
|
|
|
|
setup_tmpfs()
|
|
|
|
{
|
|
|
|
cmd="mktemp -d /tmp/zfs-regression.XXXXXXXXXX"
|
|
|
|
TMPDIR=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
cmd="mount -t tmpfs none ${TMPDIR}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Clean up the tmpfs directory (Linux only)
|
|
|
|
cleanup_tmpfs()
|
|
|
|
{
|
|
|
|
if [ -n "${TMPDIR}" ]; then
|
|
|
|
cmd="umount ${TMPDIR} && rmdir ${TMPDIR}"
|
|
|
|
eval "${cmd}" || die "failed: ${cmd}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Truncate a file
|
|
|
|
truncate_cmd()
|
|
|
|
{
|
|
|
|
size="${1}"
|
|
|
|
file="${2}"
|
|
|
|
|
|
|
|
cmd="dd if=/dev/null of=${file} bs=1 count=0 seek=${size}"
|
|
|
|
${cmd} > /dev/null 2>&1 || die "failed: ${cmd}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create a memory-backed block device
|
|
|
|
create_memdisk()
|
|
|
|
{
|
|
|
|
size="${1}"
|
|
|
|
devname="${2}"
|
|
|
|
|
|
|
|
if [ "${os}" = "FreeBSD" ]; then
|
|
|
|
if [ -n "${devname}" ]; then
|
|
|
|
devparam="-u ${devname}"
|
|
|
|
fi
|
2014-10-25 05:31:18 +00:00
|
|
|
cmd="mdconfig -a -t swap -s ${size} ${devparam}"
|
|
|
|
DISKNAME=`$cmd 2>/dev/null` || die "failed: ${cmd}"
|
Update ZFS from version 6 to 13 and bring some FreeBSD-specific changes.
This bring huge amount of changes, I'll enumerate only user-visible changes:
- Delegated Administration
Allows regular users to perform ZFS operations, like file system
creation, snapshot creation, etc.
- L2ARC
Level 2 cache for ZFS - allows to use additional disks for cache.
Huge performance improvements mostly for random read of mostly
static content.
- slog
Allow to use additional disks for ZFS Intent Log to speed up
operations like fsync(2).
- vfs.zfs.super_owner
Allows regular users to perform privileged operations on files stored
on ZFS file systems owned by him. Very careful with this one.
- chflags(2)
Not all the flags are supported. This still needs work.
- ZFSBoot
Support to boot off of ZFS pool. Not finished, AFAIK.
Submitted by: dfr
- Snapshot properties
- New failure modes
Before if write requested failed, system paniced. Now one
can select from one of three failure modes:
- panic - panic on write error
- wait - wait for disk to reappear
- continue - serve read requests if possible, block write requests
- Refquota, refreservation properties
Just quota and reservation properties, but don't count space consumed
by children file systems, clones and snapshots.
- Sparse volumes
ZVOLs that don't reserve space in the pool.
- External attributes
Compatible with extattr(2).
- NFSv4-ACLs
Not sure about the status, might not be complete yet.
Submitted by: trasz
- Creation-time properties
- Regression tests for zpool(8) command.
Obtained from: OpenSolaris
2008-11-17 20:49:29 +00:00
|
|
|
if [ -n "${devname}" ]; then
|
|
|
|
DISKNAME="${devname}"
|
|
|
|
fi
|
|
|
|
FDISKNAME="/dev/${DISKNAME}"
|
|
|
|
elif [ "${os}" = "SunOS" ]; then
|
|
|
|
cmd="mktemp /tmp/zfstest.XXXXXXXXXX"
|
|
|
|
fname=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
truncate_cmd "${size}" "${fname}"
|
|
|
|
|
|
|
|
if [ -n "${devname}" ]; then
|
|
|
|
cmd="lofiadm -a ${fname} ${devname}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
DISKNAME="${devname}"
|
|
|
|
else
|
|
|
|
cmd="lofiadm -a ${fname}"
|
|
|
|
DISKNAME=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
fi
|
|
|
|
FDISKNAME="${DISKNAME}"
|
|
|
|
elif [ "${os}" = "Linux" ]; then
|
|
|
|
if [ -z "${TMPDIR_DISKS}" ]; then
|
|
|
|
setup_tmpfs
|
|
|
|
TMPDIR_DISKS="${TMPDIR}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
cmd="mktemp ${TMPDIR_DISKS}/disk.XXXXXXXXXX"
|
|
|
|
fname=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
truncate_cmd "${size}" "${fname}"
|
|
|
|
|
|
|
|
if [ -n "${devname}" ]; then
|
|
|
|
devname=`echo ${devname} | cut -c 9-`
|
|
|
|
cmd="losetup /dev/${devname} ${fname} 2>&1"
|
|
|
|
eval ${cmd} || die "failed: ${cmd}"
|
|
|
|
DISKNAME="${devname}"
|
|
|
|
else
|
|
|
|
cmd="losetup -s -f ${fname} 2>&1"
|
|
|
|
diskname=`eval ${cmd}`
|
|
|
|
|
|
|
|
if [ "${diskname}" = "losetup: could not find any free loop device" ]; then
|
|
|
|
# If there are no free loopback devices, create one more
|
|
|
|
max=`echo /dev/loop* | awk 'BEGIN { RS=" "; FS="loop" } {if ($2 > max) max = $2} END {print max}'`
|
|
|
|
max=$((max + 1))
|
|
|
|
cmd="mknod /dev/loop${max} b 7 ${max}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
cmd="losetup -s -f ${fname}"
|
|
|
|
diskname=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
fi
|
|
|
|
DISKNAME=`eval echo ${diskname} | sed 's/^\/dev\///'`
|
|
|
|
fi
|
|
|
|
ln /dev/${DISKNAME} /dev/zfstest_${DISKNAME}
|
|
|
|
DISKNAME="zfstest_${DISKNAME}"
|
|
|
|
FDISKNAME="/dev/${DISKNAME}"
|
|
|
|
else
|
|
|
|
die "Sorry, your OS is not supported"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Destroy a memory-backed block device
|
|
|
|
destroy_memdisk()
|
|
|
|
{
|
|
|
|
disk="${1}"
|
|
|
|
|
|
|
|
if [ "${os}" = "FreeBSD" ]; then
|
|
|
|
cmd="mdconfig -d -u ${disk}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
elif [ "${os}" = "SunOS" ]; then
|
|
|
|
cmd="lofiadm ${disk}"
|
|
|
|
fname=`${cmd}` || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
cmd="lofiadm -d ${disk}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
cmd="rm ${fname}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
elif [ "${os}" = "Linux" ]; then
|
|
|
|
cmd="rm /dev/${disk}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
disk=`echo ${disk} | cut -c 9-`
|
|
|
|
|
|
|
|
cmd="losetup /dev/${disk} | awk '{print substr(\$3, 2, length(\$3)-2)}'"
|
|
|
|
fname=`eval ${cmd}` || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
cmd="losetup -d /dev/${disk}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
|
|
|
|
cmd="rm ${fname}"
|
|
|
|
${cmd} || die "failed: ${cmd}"
|
|
|
|
else
|
|
|
|
die "Sorry, your OS is not supported"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
disks_create()
|
|
|
|
{
|
|
|
|
if [ -z "${ndisks}" ]; then
|
|
|
|
start=0
|
|
|
|
else
|
|
|
|
start=${ndisks}
|
|
|
|
fi
|
|
|
|
ndisks=$((start+$1))
|
|
|
|
n=$((ndisks-$start))
|
|
|
|
if [ -z "${2}" ]; then
|
|
|
|
size="96M"
|
|
|
|
else
|
|
|
|
size="${2}"
|
|
|
|
fi
|
|
|
|
for i in `nums $n $start`; do
|
|
|
|
create_memdisk ${size}
|
|
|
|
eval disk${i}="${DISKNAME}"
|
|
|
|
eval fdisk${i}="${FDISKNAME}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
disks_destroy()
|
|
|
|
{
|
|
|
|
for i in `nums $ndisks 0`; do
|
|
|
|
eval disk=\$disk${i}
|
|
|
|
if [ ! -z "${disk}" ]; then
|
|
|
|
destroy_memdisk ${disk}
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
[ -n "${TMPDIR_DISKS}" ] && TMPDIR="${TMPDIR_DISKS}" cleanup_tmpfs
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
disk_create()
|
|
|
|
{
|
|
|
|
diskno=${1}
|
|
|
|
eval disk=\$disk${diskno}
|
|
|
|
if [ ! -z ${disk} ]; then
|
|
|
|
die "disk${diskno} is already set"
|
|
|
|
fi
|
|
|
|
dname=${2}
|
|
|
|
if [ -z "${3}" ]; then
|
|
|
|
size="96M"
|
|
|
|
else
|
|
|
|
size="${3}"
|
|
|
|
fi
|
|
|
|
create_memdisk ${size} ${dname}
|
|
|
|
[ "${DISKNAME}" = "${dname}" ] || die "${DISKNAME} != ${dname}"
|
|
|
|
eval disk${diskno}="${DISKNAME}"
|
|
|
|
eval fdisk${diskno}="${FDISKNAME}"
|
|
|
|
}
|
|
|
|
|
|
|
|
disk_destroy()
|
|
|
|
{
|
|
|
|
eval disk=\$disk${1}
|
|
|
|
destroy_memdisk ${disk}
|
|
|
|
eval disk${1}=""
|
|
|
|
}
|
|
|
|
|
|
|
|
files_create()
|
|
|
|
{
|
|
|
|
if [ -z "${nfiles}" ]; then
|
|
|
|
start=0
|
|
|
|
else
|
|
|
|
start=${nfiles}
|
|
|
|
fi
|
|
|
|
nfiles=$((start+$1))
|
|
|
|
n=$((nfiles-$start))
|
|
|
|
if [ -z "${2}" ]; then
|
|
|
|
size="96M"
|
|
|
|
else
|
|
|
|
size="${2}"
|
|
|
|
fi
|
|
|
|
for i in `nums $n $start`; do
|
|
|
|
if [ "${os}" = "Linux" ]; then
|
|
|
|
if [ -z "${TMPDIR_FILES}" ]; then
|
|
|
|
setup_tmpfs
|
|
|
|
TMPDIR_FILES="${TMPDIR}"
|
|
|
|
fi
|
|
|
|
file=`mktemp ${TMPDIR_FILES}/zfstest.XXXXXXXX`
|
|
|
|
else
|
|
|
|
file=`mktemp /tmp/zfstest.XXXXXXXX`
|
|
|
|
fi
|
|
|
|
truncate_cmd ${size} ${file}
|
|
|
|
eval file${i}=${file}
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
files_destroy()
|
|
|
|
{
|
|
|
|
for i in `nums $nfiles 0`; do
|
|
|
|
eval file=\$file${i}
|
|
|
|
rm -f ${file}
|
|
|
|
done
|
|
|
|
nfiles=0
|
|
|
|
[ -n "${TMPDIR_FILES}" ] && TMPDIR="${TMPDIR_FILES}" cleanup_tmpfs
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
name_create()
|
|
|
|
{
|
2014-10-25 04:52:48 +00:00
|
|
|
echo "zfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{ print $NF }'`"
|
Update ZFS from version 6 to 13 and bring some FreeBSD-specific changes.
This bring huge amount of changes, I'll enumerate only user-visible changes:
- Delegated Administration
Allows regular users to perform ZFS operations, like file system
creation, snapshot creation, etc.
- L2ARC
Level 2 cache for ZFS - allows to use additional disks for cache.
Huge performance improvements mostly for random read of mostly
static content.
- slog
Allow to use additional disks for ZFS Intent Log to speed up
operations like fsync(2).
- vfs.zfs.super_owner
Allows regular users to perform privileged operations on files stored
on ZFS file systems owned by him. Very careful with this one.
- chflags(2)
Not all the flags are supported. This still needs work.
- ZFSBoot
Support to boot off of ZFS pool. Not finished, AFAIK.
Submitted by: dfr
- Snapshot properties
- New failure modes
Before if write requested failed, system paniced. Now one
can select from one of three failure modes:
- panic - panic on write error
- wait - wait for disk to reappear
- continue - serve read requests if possible, block write requests
- Refquota, refreservation properties
Just quota and reservation properties, but don't count space consumed
by children file systems, clones and snapshots.
- Sparse volumes
ZVOLs that don't reserve space in the pool.
- External attributes
Compatible with extattr(2).
- NFSv4-ACLs
Not sure about the status, might not be complete yet.
Submitted by: trasz
- Creation-time properties
- Regression tests for zpool(8) command.
Obtained from: OpenSolaris
2008-11-17 20:49:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
names_create()
|
|
|
|
{
|
|
|
|
nnames=$1
|
|
|
|
for i in `nums $nnames 0`; do
|
|
|
|
eval name${i}=`name_create`
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
is_mountpoint()
|
|
|
|
{
|
|
|
|
dir="${1}"
|
|
|
|
if [ ! -d "${dir}" ]; then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
if [ -n "${GNU_STAT}" ]; then
|
|
|
|
statcmd="stat -c"
|
|
|
|
else
|
|
|
|
statcmd="stat -f"
|
|
|
|
fi
|
|
|
|
if [ "`${statcmd} '%d' ${dir} 2>/dev/null`" -eq "`${statcmd} '%d' ${dir}/.. 2>/dev/null`" ]; then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
nums()
|
|
|
|
{
|
|
|
|
which jot >/dev/null 2>&1
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
jot ${1} ${2}
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
|
|
|
|
start="${2}"
|
|
|
|
[ -z "${start}" ] && start="1";
|
|
|
|
end=$((${1}+${start}-1))
|
|
|
|
|
|
|
|
which seq >/dev/null 2>&1
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
seq ${start} ${end}
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
|
|
|
|
i=1
|
|
|
|
while :; do
|
|
|
|
echo $i
|
|
|
|
if [ $i -eq ${1} ]; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
i=$((i+1))
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
wait_for_resilver()
|
|
|
|
{
|
|
|
|
for i in `nums 64`; do
|
|
|
|
${ZPOOL} status ${1} | grep replacing >/dev/null
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
sleep 1
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
get_guid()
|
|
|
|
{
|
|
|
|
${ZDB} -l ${1} | grep -B1 ${1} | grep guid | head -n1 | awk 'BEGIN {FS="="} {print $2}'
|
|
|
|
}
|