7fdf8cc174
until investigation of upstream issue[1] is completed. 1: https://github.com/zfsonlinux/zfs/issues/7401
233 lines
8.3 KiB
Diff
233 lines
8.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Paul Zuchowski <31706010+PaulZ-98@users.noreply.github.com>
|
|
Date: Wed, 7 Mar 2018 20:03:33 -0500
|
|
Subject: [PATCH] zdb and inuse tests don't pass with real disks
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Due to zpool create auto-partioning in Linux (i.e. sdb1),
|
|
certain utilities need to use the parition (sdb1) while
|
|
others use the whole disk name (sdb).
|
|
|
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
|
Signed-off-by: Paul Zuchowski <pzuchowski@datto.com>
|
|
Closes #6939
|
|
Closes #7261
|
|
(cherry picked from commit 0a0af41bd926ca20a26d7476d792ce82bca9c077)
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
tests/zfs-tests/include/libtest.shlib | 31 +++++++++++++++++++---
|
|
.../tests/functional/cli_root/zdb/zdb_003_pos.ksh | 5 ++++
|
|
.../tests/functional/cli_root/zdb/zdb_004_pos.ksh | 11 +++++---
|
|
.../tests/functional/cli_root/zdb/zdb_005_pos.ksh | 4 +++
|
|
.../tests/functional/inuse/inuse_005_pos.ksh | 8 +++---
|
|
.../tests/functional/inuse/inuse_008_pos.ksh | 5 ++--
|
|
.../tests/functional/inuse/inuse_009_pos.ksh | 10 +++++--
|
|
7 files changed, 59 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib
|
|
index 48fb5e7c5..d51d73e61 100644
|
|
--- a/tests/zfs-tests/include/libtest.shlib
|
|
+++ b/tests/zfs-tests/include/libtest.shlib
|
|
@@ -767,7 +767,11 @@ function zero_partitions #<whole_disk_name>
|
|
typeset i
|
|
|
|
if is_linux; then
|
|
- log_must parted $DEV_DSKDIR/$diskname -s -- mklabel gpt
|
|
+ DSK=$DEV_DSKDIR/$diskname
|
|
+ DSK=$(echo $DSK | sed -e "s|//|/|g")
|
|
+ log_must parted $DSK -s -- mklabel gpt
|
|
+ blockdev --rereadpt $DSK 2>/dev/null
|
|
+ block_device_wait
|
|
else
|
|
for i in 0 1 3 4 5 6 7
|
|
do
|
|
@@ -795,10 +799,11 @@ function set_partition #<slice_num> <slice_start> <size_plus_units> <whole_disk
|
|
typeset start=$2
|
|
typeset size=$3
|
|
typeset disk=$4
|
|
- [[ -z $slicenum || -z $size || -z $disk ]] && \
|
|
- log_fail "The slice, size or disk name is unspecified."
|
|
|
|
if is_linux; then
|
|
+ if [[ -z $size || -z $disk ]]; then
|
|
+ log_fail "The size or disk name is unspecified."
|
|
+ fi
|
|
typeset size_mb=${size%%[mMgG]}
|
|
|
|
size_mb=${size_mb%%[mMgG][bB]}
|
|
@@ -841,6 +846,10 @@ function set_partition #<slice_num> <slice_start> <size_plus_units> <whole_disk
|
|
blockdev --rereadpt $DEV_DSKDIR/$disk 2>/dev/null
|
|
block_device_wait
|
|
else
|
|
+ if [[ -z $slicenum || -z $size || -z $disk ]]; then
|
|
+ log_fail "The slice, size or disk name is unspecified."
|
|
+ fi
|
|
+
|
|
typeset format_file=/var/tmp/format_in.$$
|
|
|
|
echo "partition" >$format_file
|
|
@@ -3634,3 +3643,19 @@ function get_tunable_impl
|
|
|
|
return 1
|
|
}
|
|
+
|
|
+#
|
|
+# Get actual devices used by the pool (i.e. linux sdb1 not sdb).
|
|
+#
|
|
+function get_pool_devices #testpool #devdir
|
|
+{
|
|
+ typeset testpool=$1
|
|
+ typeset devdir=$2
|
|
+ typeset out=""
|
|
+
|
|
+ if is_linux; then
|
|
+ out=$(zpool status -P $testpool |grep ${devdir} | awk '{print $1}')
|
|
+ out=$(echo $out | sed -e "s|${devdir}/||g" | tr '\n' ' ')
|
|
+ fi
|
|
+ echo $out
|
|
+}
|
|
diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
|
|
index 4c57cb587..3c444ae98 100755
|
|
--- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
|
|
@@ -43,6 +43,11 @@ config_count=(1 2)
|
|
set -A DISK $DISKS
|
|
|
|
default_mirror_setup_noexit $DISKS
|
|
+
|
|
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
|
|
+log_note "$DEVS"
|
|
+[[ -n $DEVS ]] && set -A DISK $DEVS
|
|
+
|
|
log_must dd if=/dev/${DISK[0]} of=/dev/${DISK[1]} bs=1K count=256 conv=notrunc
|
|
|
|
for x in 0 1 ; do
|
|
diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
|
|
index 2b4057aa7..91a5c9799 100755
|
|
--- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
|
|
@@ -45,17 +45,22 @@ function cleanup
|
|
verify_runnable "global"
|
|
verify_disk_count "$DISKS" 2
|
|
set -A DISK $DISKS
|
|
+WHOLE_DISK=${DISK[0]}
|
|
|
|
default_mirror_setup_noexit $DISKS
|
|
-log_must zpool offline $TESTPOOL ${DISK[0]}
|
|
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
|
|
+[[ -n $DEVS ]] && set -A DISK $DEVS
|
|
+
|
|
+log_must zpool offline $TESTPOOL ${WHOLE_DISK}
|
|
log_must dd if=/dev/urandom of=$TESTDIR/testfile bs=1K count=2
|
|
log_must zpool export $TESTPOOL
|
|
+
|
|
log_must dd if=$DEV_RDSKDIR/${DISK[0]} of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
|
|
|
|
-ubs=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
|
|
+ubs=$(zdb -lu ${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
|
|
log_note "vdev 1: ubs $ubs"
|
|
|
|
-ub_dump_counts=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | \
|
|
+ub_dump_counts=$(zdb -lu ${DISK[1]} | \
|
|
awk ' /LABEL/ {label=$NF; blocks[label]=0};
|
|
/Uberblock/ {blocks[label]++};
|
|
END {print blocks[0],blocks[1],blocks[2],blocks[3]}')
|
|
diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
|
|
index 60bbb5615..f6730f611 100755
|
|
--- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
|
|
@@ -44,6 +44,10 @@ verify_disk_count "$DISKS" 2
|
|
set -A DISK $DISKS
|
|
|
|
default_mirror_setup_noexit $DISKS
|
|
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
|
|
+log_note "$DEVS"
|
|
+[[ -n $DEVS ]] && set -A DISK $DEVS
|
|
+
|
|
log_must dd if=/dev/zero of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
|
|
log_must truncate -s 0 $TEMPFILE
|
|
|
|
diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
|
|
index 9dd1e25bf..6b0abf429 100755
|
|
--- a/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
|
|
@@ -82,19 +82,18 @@ typeset -i i=0
|
|
|
|
unset NOINUSE_CHECK
|
|
while (( i < ${#vdevs[*]} )); do
|
|
-
|
|
for num in 0 1 2 3 ; do
|
|
eval typeset disk=\${FS_DISK$num}
|
|
zero_partitions $disk
|
|
done
|
|
-
|
|
typeset cyl=""
|
|
for num in 0 1 2 3 ; do
|
|
eval typeset slice=\${FS_SIDE$num}
|
|
disk=${slice%${SLICE_PREFIX}*}
|
|
- slice=${slice##*${SLICE_PREFIX}}
|
|
+ [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
|
|
+ slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
|
|
log_must set_partition $slice "$cyl" $FS_SIZE $disk
|
|
- cyl=$(get_endslice $disk $slice)
|
|
+ [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
|
done
|
|
|
|
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
|
@@ -115,7 +114,6 @@ while (( i < ${#vdevs[*]} )); do
|
|
(( i = i + 1 ))
|
|
continue
|
|
fi
|
|
-
|
|
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
|
|
verify_assertion "$rawtargets"
|
|
destroy_pool $TESTPOOL1
|
|
diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
|
|
index 95d39d958..ddc8fa7a4 100755
|
|
--- a/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
|
|
@@ -92,9 +92,10 @@ done
|
|
for num in 0 1 2 3 ; do
|
|
eval typeset slice=\${FS_SIDE$num}
|
|
disk=${slice%${SLICE_PREFIX}*}
|
|
- slice=${slice##*${SLICE_PREFIX}}
|
|
+ [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
|
|
+ slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
|
|
log_must set_partition $slice "$cyl" $FS_SIZE $disk
|
|
- cyl=$(get_endslice $disk $slice)
|
|
+ [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
|
done
|
|
|
|
while (( i < ${#vdevs[*]} )); do
|
|
diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
|
|
index 6a9b9623c..a5e9fda59 100755
|
|
--- a/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
|
|
+++ b/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
|
|
@@ -82,13 +82,19 @@ typeset -i i=0
|
|
|
|
while (( i < ${#vdevs[*]} )); do
|
|
|
|
+ for num in 0 1 2 3 ; do
|
|
+ eval typeset disk=\${FS_DISK$num}
|
|
+ zero_partitions $disk
|
|
+ done
|
|
+
|
|
typeset cyl=""
|
|
for num in 0 1 2 3 ; do
|
|
eval typeset slice=\${FS_SIDE$num}
|
|
disk=${slice%${SLICE_PREFIX}*}
|
|
- slice=${slice##*${SLICE_PREFIX}}
|
|
+ [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
|
|
+ slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
|
|
log_must set_partition $slice "$cyl" $FS_SIZE $disk
|
|
- cyl=$(get_endslice $disk $slice)
|
|
+ [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
|
done
|
|
|
|
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
|
--
|
|
2.14.2
|
|
|