mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 12:12:13 +03:00
ZTS: Eliminate partitioning from zpool_create etc
These tests can be made to work without a bunch of complex partitioning of physical disks. Use the 3 disks directly, creating a few file disks if needed for a compelling reason. Reduce the use of shared variables that don't have a clear utility. Catch the fallout in tests that include cfg/shlib from zpool_create. Reviewed-by: John Kennedy <john.kennedy@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #10002
This commit is contained in:
@@ -30,100 +30,25 @@
|
||||
|
||||
. $STF_SUITE/include/libtest.shlib
|
||||
|
||||
if is_linux; then
|
||||
export DISKSARRAY=$DISKS
|
||||
export DISK_ARRAY_NUM=$(echo ${DISKS} | nawk '{print NF}')
|
||||
set_device_dir
|
||||
set_slice_prefix
|
||||
export SLICE0=1
|
||||
export SLICE1=2
|
||||
else
|
||||
export SLICE0=0
|
||||
export SLICE1=1
|
||||
fi
|
||||
|
||||
verify_disk_count "$DISKS" 2
|
||||
set -A disk_array $(find_disks $DISKS)
|
||||
case "${#disk_array[@]}" in
|
||||
2)
|
||||
FS_DISK0=${disk_array[0]}
|
||||
FS_DISK1=${disk_array[1]}
|
||||
FS_DISK2=${disk_array[0]}
|
||||
FS_DISK3=${disk_array[1]}
|
||||
FS_SIDE0=${FS_DISK0}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE1=${FS_DISK0}${SLICE_PREFIX}${SLICE1}
|
||||
FS_SIDE2=${FS_DISK1}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE3=${FS_DISK1}${SLICE_PREFIX}${SLICE1}
|
||||
disk0="${DEV_DSKDIR}/$FS_SIDE0"
|
||||
disk1="${DEV_DSKDIR}/$FS_SIDE1"
|
||||
disk2="${DEV_DSKDIR}/$FS_SIDE2"
|
||||
disk3="${DEV_DSKDIR}/$FS_SIDE3"
|
||||
disktargets="$disk0 $disk2"
|
||||
rawdisk0="${DEV_RDSKDIR}/$FS_SIDE0"
|
||||
rawdisk1="${DEV_RDSKDIR}/$FS_SIDE1"
|
||||
rawdisk2="${DEV_RDSKDIR}/$FS_SIDE2"
|
||||
rawdisk3="${DEV_RDSKDIR}/$FS_SIDE3"
|
||||
rawtargets="$rawdisk0 $rawdisk2"
|
||||
vdisks="$FS_DISK0"
|
||||
sdisks="$FS_DISK1"
|
||||
vslices="$FS_SIDE0 $FS_SIDE1 $FS_SIDE2"
|
||||
sslices="$FS_SIDE3"
|
||||
;;
|
||||
3)
|
||||
FS_DISK0=${disk_array[0]}
|
||||
FS_DISK1=${disk_array[1]}
|
||||
FS_DISK2=${disk_array[2]}
|
||||
FS_DISK3=${disk_array[0]}
|
||||
FS_SIDE0=${FS_DISK0}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE1=${FS_DISK0}${SLICE_PREFIX}${SLICE1}
|
||||
FS_SIDE2=${FS_DISK1}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE3=${FS_DISK2}${SLICE_PREFIX}${SLICE0}
|
||||
disk0="${DEV_DSKDIR}/$FS_SIDE0"
|
||||
disk1="${DEV_DSKDIR}/$FS_SIDE1"
|
||||
disk2="${DEV_DSKDIR}/$FS_SIDE2"
|
||||
disk3="${DEV_DSKDIR}/$FS_SIDE3"
|
||||
disktargets="$disk0 $disk2 $disk3"
|
||||
rawdisk0="${DEV_RDSKDIR}/$FS_SIDE0"
|
||||
rawdisk1="${DEV_RDSKDIR}/$FS_SIDE1"
|
||||
rawdisk2="${DEV_RDSKDIR}/$FS_SIDE2"
|
||||
rawdisk3="${DEV_RDSKDIR}/$FS_SIDE3"
|
||||
rawtargets="$rawdisk0 $rawdisk2 $rawdisk3"
|
||||
vdisks="$FS_DISK0 $FS_DISK1"
|
||||
sdisks="$FS_DISK2"
|
||||
vslices="$FS_SIDE0 $FS_SIDE2 $FS_SIDE3"
|
||||
sslices="$FS_SIDE1"
|
||||
;;
|
||||
*)
|
||||
FS_DISK0=${disk_array[0]}
|
||||
FS_DISK1=${disk_array[1]}
|
||||
FS_DISK2=${disk_array[2]}
|
||||
FS_DISK3=${disk_array[3]}
|
||||
FS_SIDE0=${FS_DISK0}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE1=${FS_DISK1}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE2=${FS_DISK2}${SLICE_PREFIX}${SLICE0}
|
||||
FS_SIDE3=${FS_DISK3}${SLICE_PREFIX}${SLICE0}
|
||||
disk0="${DEV_DSKDIR}/$FS_SIDE0"
|
||||
disk1="${DEV_DSKDIR}/$FS_SIDE1"
|
||||
disk2="${DEV_DSKDIR}/$FS_SIDE2"
|
||||
disk3="${DEV_DSKDIR}/$FS_SIDE3"
|
||||
disktargets="$disk0 $disk1 $disk2 $disk3"
|
||||
rawdisk0="${DEV_RDSKDIR}/$FS_SIDE0"
|
||||
rawdisk1="${DEV_RDSKDIR}/$FS_SIDE1"
|
||||
rawdisk2="${DEV_RDSKDIR}/$FS_SIDE2"
|
||||
rawdisk3="${DEV_RDSKDIR}/$FS_SIDE3"
|
||||
rawtargets="$rawdisk0 $rawdisk1 $rawdisk2 $rawdisk3"
|
||||
vdisks="$FS_DISK0 $FS_DISK1 $FS_DISK2"
|
||||
sdisks="$FS_DISK3"
|
||||
vslices="$FS_SIDE0 $FS_SIDE1 $FS_SIDE2"
|
||||
sslices="$FS_SIDE3"
|
||||
;;
|
||||
esac
|
||||
FS_DISK0=${disk_array[0]}
|
||||
FS_DISK1=${disk_array[1]}
|
||||
FS_DISK2=${disk_array[2]}
|
||||
disk0="${DEV_DSKDIR}/$FS_DISK0"
|
||||
disk1="${DEV_DSKDIR}/$FS_DISK1"
|
||||
disk2="${DEV_DSKDIR}/$FS_DISK2"
|
||||
disktargets="$disk0 $disk1 $disk2"
|
||||
rawdisk0="${DEV_RDSKDIR}/$FS_DISK0"
|
||||
rawdisk1="${DEV_RDSKDIR}/$FS_DISK1"
|
||||
rawdisk2="${DEV_RDSKDIR}/$FS_DISK2"
|
||||
rawtargets="$rawdisk0 $rawdisk1 $rawdisk2"
|
||||
vdisks="$FS_DISK0 $FS_DISK1"
|
||||
sdisks="$FS_DISK2"
|
||||
|
||||
export FS_DISK0 FS_DISK1 FS_DISK2 FS_DISK3 SINGLE_DISK
|
||||
export FS_SIDE0 FS_SIDE1 FS_SIDE2 FS_SIDE3
|
||||
export disk0 disk1 disk2 disk3 disktargets
|
||||
export rawdisk0 rawdisk1 rawdisk2 rawdisk3 rawtargets
|
||||
export vdisks sdisks vslices sslices
|
||||
export FS_DISK0 FS_DISK1 FS_DISK2
|
||||
export disk0 disk1 disk2 disktargets
|
||||
export rawdisk0 rawdisk1 rawdisk2 rawtargets
|
||||
export vdisks sdisks
|
||||
|
||||
export UFSMP=$TESTDIR/testinuseufsdump
|
||||
export FS_SIZE=1g
|
||||
|
||||
@@ -60,27 +60,25 @@ log_assert "Ensure ZFS cannot use a device designated as a dump device"
|
||||
log_onexit cleanup
|
||||
|
||||
typeset dumpdev=""
|
||||
typeset diskslice=""
|
||||
|
||||
PREVDUMPDEV=`dumpadm | grep "Dump device" | awk '{print $3}'`
|
||||
|
||||
log_note "Zero $FS_DISK0 and place free space in to slice 0"
|
||||
log_note "Zero $FS_DISK0"
|
||||
log_must cleanup_devices $FS_DISK0
|
||||
|
||||
diskslice="${DEV_DSKDIR}/${FS_DISK0}${SLICE0}"
|
||||
log_note "Configuring $diskslice as dump device"
|
||||
log_must dumpadm -d $diskslice > /dev/null
|
||||
log_note "Configuring $rawdisk0 as dump device"
|
||||
log_must dumpadm -d $rawdisk0 > /dev/null
|
||||
|
||||
log_note "Confirm that dump device has been setup"
|
||||
dumpdev=`dumpadm | grep "Dump device" | awk '{print $3}'`
|
||||
[[ -z "$dumpdev" ]] && log_untested "No dump device has been configured"
|
||||
|
||||
[[ "$dumpdev" != "$diskslice" ]] && \
|
||||
log_untested "Dump device has not been configured to $diskslice"
|
||||
[[ "$dumpdev" != "$rawdisk0" ]] && \
|
||||
log_untested "Dump device has not been configured to $rawdisk0"
|
||||
|
||||
log_note "Attempt to zpool the dump device"
|
||||
unset NOINUSE_CHECK
|
||||
log_mustnot zpool create $TESTPOOL "$diskslice"
|
||||
log_mustnot zpool create $TESTPOOL "$rawdisk0"
|
||||
log_mustnot poolexists $TESTPOOL
|
||||
|
||||
log_pass "Unable to zpool a device in use by dumpadm"
|
||||
|
||||
@@ -94,15 +94,6 @@ typeset restored_files="${UFSMP}/restored_files"
|
||||
typeset -i dirnum=0
|
||||
typeset -i filenum=0
|
||||
typeset cwd=""
|
||||
typeset cyl=""
|
||||
|
||||
for num in 0 1 2; do
|
||||
eval typeset slice=\${FS_SIDE$num}
|
||||
disk=${slice%s*}
|
||||
slice=${slice##*${SLICE_PREFIX}}
|
||||
log_must set_partition $slice "$cyl" $FS_SIZE $disk
|
||||
cyl=$(get_endslice $disk $slice)
|
||||
done
|
||||
|
||||
log_note "Make a ufs filesystem on source $rawdisk1"
|
||||
new_fs $rawdisk1 > /dev/null 2>&1
|
||||
@@ -145,7 +136,7 @@ log_mustnot zpool create $TESTPOOL1 "$disk1"
|
||||
log_mustnot poolexists $TESTPOOL1
|
||||
|
||||
log_note "Attempt to take the source device in use by ufsdump as spare device"
|
||||
log_mustnot zpool create $TESTPOOL1 "$FS_SIDE2" spare "$disk1"
|
||||
log_mustnot zpool create $TESTPOOL1 "$FS_DISK2" spare "$disk1"
|
||||
log_mustnot poolexists $TESTPOOL1
|
||||
|
||||
wait $PIDUFSDUMP
|
||||
@@ -171,7 +162,7 @@ log_mustnot poolexists $TESTPOOL2
|
||||
|
||||
log_note "Attempt to take the restored device in use by ufsrestore as spare" \
|
||||
"device"
|
||||
log_mustnot zpool create -f $TESTPOOL2 "$FS_SIDE2" spare "$disk1"
|
||||
log_mustnot zpool create -f $TESTPOOL2 "$FS_DISK2" spare "$disk1"
|
||||
log_mustnot poolexists $TESTPOOL2
|
||||
|
||||
log_pass "Unable to zpool over a device in use by ufsdump or ufsrestore"
|
||||
|
||||
@@ -58,7 +58,7 @@ function cleanup
|
||||
cleanup_devices $vdisks $sdisks
|
||||
}
|
||||
|
||||
function verify_assertion #slices
|
||||
function verify_assertion #disks
|
||||
{
|
||||
typeset targets=$1
|
||||
|
||||
@@ -82,39 +82,11 @@ 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}*}
|
||||
[[ -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
|
||||
[[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
||||
done
|
||||
typeset spare="spare $sdisks"
|
||||
|
||||
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vslices spare $sslices
|
||||
verify_assertion "$rawtargets"
|
||||
destroy_pool $TESTPOOL1
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK2 ) && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK3 ) && ( ${vdevs[i]} == "raidz2" ) ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
|
||||
# If this is for raidz2, use 3 disks for the pool.
|
||||
[[ ${vdevs[i]} = "raidz2" ]] && spare="$sdisks"
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks $spare
|
||||
verify_assertion "$rawtargets"
|
||||
destroy_pool $TESTPOOL1
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ function cleanup
|
||||
cleanup_devices $vdisks $sdisks
|
||||
}
|
||||
|
||||
function verify_assertion #slices
|
||||
function verify_assertion # disks
|
||||
{
|
||||
typeset targets=$1
|
||||
|
||||
@@ -81,39 +81,11 @@ PREVDUMPDEV=`dumpadm | grep "Dump device" | awk '{print $3}'`
|
||||
|
||||
unset NOINUSE_CHECK
|
||||
while (( i < ${#vdevs[*]} )); do
|
||||
typeset spare="spare $sdisks"
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset disk=\${FS_DISK$num}
|
||||
zero_partitions $disk
|
||||
done
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset slice=\${FS_SIDE$num}
|
||||
disk=${slice%${SLICE_PREFIX}*}
|
||||
slice=${slice##*${SLICE_PREFIX}}
|
||||
log_must set_partition $slice "" $FS_SIZE $disk
|
||||
done
|
||||
|
||||
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vslices spare $sslices
|
||||
verify_assertion "$disktargets"
|
||||
destroy_pool $TESTPOOL1
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK2 ) && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK3 ) && ( ${vdevs[i]} == "raidz2" ) ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
|
||||
# If this is for raidz2, use 3 disks for the pool.
|
||||
[[ ${vdevs[i]} = "raidz2" ]] && spare="$sdisks"
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks $spare
|
||||
verify_assertion "$disktargets"
|
||||
destroy_pool $TESTPOOL1
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ function cleanup
|
||||
cleanup_devices $vdisks $sdisks
|
||||
}
|
||||
|
||||
function verify_assertion #slices
|
||||
function verify_assertion # disks
|
||||
{
|
||||
typeset targets=$1
|
||||
|
||||
@@ -85,41 +85,11 @@ typeset -i i=0
|
||||
PREVDUMPDEV=`dumpadm | grep "Dump device" | awk '{print $3}'`
|
||||
|
||||
while (( i < ${#vdevs[*]} )); do
|
||||
typeset spare="spare $sdisks"
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset disk=\${FS_DISK$num}
|
||||
zero_partitions $disk
|
||||
done
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset slice=\${FS_SIDE$num}
|
||||
disk=${slice%${SLICE_PREFIX}*}
|
||||
slice=${slice##*${SLICE_PREFIX}}
|
||||
log_must set_partition $slice "" $FS_SIZE $disk
|
||||
done
|
||||
|
||||
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vslices spare $sslices
|
||||
log_must zpool export $TESTPOOL1
|
||||
verify_assertion "$disktargets"
|
||||
log_must zpool import $TESTPOOL1
|
||||
destroy_pool $TESTPOOL1
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK2 ) && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK3 ) && ( ${vdevs[i]} == "raidz2" ) ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
|
||||
# If this is for raidz2, use 3 disks for the pool.
|
||||
[[ ${vdevs[i]} = "raidz2" ]] && spare="$sdisks"
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks $spare
|
||||
log_must zpool export $TESTPOOL1
|
||||
verify_assertion "$disktargets"
|
||||
log_must zpool import $TESTPOOL1
|
||||
|
||||
@@ -61,7 +61,7 @@ function cleanup
|
||||
cleanup_devices $vdisks $sdisks
|
||||
}
|
||||
|
||||
function verify_assertion #slices
|
||||
function verify_assertion # disks
|
||||
{
|
||||
typeset targets=$1
|
||||
|
||||
@@ -82,29 +82,12 @@ log_onexit cleanup
|
||||
set -A vdevs "" "mirror" "raidz" "raidz1" "raidz2"
|
||||
|
||||
typeset -i i=0
|
||||
typeset cyl=""
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset disk=\${FS_DISK$num}
|
||||
zero_partitions $disk
|
||||
done
|
||||
|
||||
for num in 0 1 2 3 ; do
|
||||
eval typeset slice=\${FS_SIDE$num}
|
||||
disk=${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
|
||||
[[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
||||
done
|
||||
|
||||
while (( i < ${#vdevs[*]} )); do
|
||||
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
typeset spare="spare $sdisks"
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vslices spare $sslices
|
||||
# If this is for raidz2, use 3 disks for the pool.
|
||||
[[ ${vdevs[i]} = "raidz2" ]] && spare="$sdisks"
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks $spare
|
||||
log_must zpool export $TESTPOOL1
|
||||
verify_assertion "$rawtargets"
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ function cleanup
|
||||
cleanup_devices $vdisks $sdisks
|
||||
}
|
||||
|
||||
function verify_assertion #disks
|
||||
function verify_assertion # disks
|
||||
{
|
||||
typeset targets=$1
|
||||
|
||||
@@ -79,44 +79,12 @@ log_onexit cleanup
|
||||
set -A vdevs "" "mirror" "raidz" "raidz1" "raidz2"
|
||||
|
||||
typeset -i i=0
|
||||
|
||||
while (( i < ${#vdevs[*]} )); do
|
||||
typeset spare="spare $sdisks"
|
||||
|
||||
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}*}
|
||||
[[ -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
|
||||
[[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
|
||||
done
|
||||
|
||||
if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vslices spare $sslices
|
||||
log_must zpool export $TESTPOOL1
|
||||
verify_assertion "$vdisks $sdisks"
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK2 ) && -n ${vdevs[i]} ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ ( $FS_DISK0 == $FS_DISK3 ) && ( ${vdevs[i]} == "raidz2" ) ]]; then
|
||||
(( i = i + 1 ))
|
||||
continue
|
||||
fi
|
||||
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
|
||||
# If this is for raidz2, use 3 disks for the pool.
|
||||
[[ ${vdevs[i]} = "raidz2" ]] && spare="$sdisks"
|
||||
create_pool $TESTPOOL1 ${vdevs[i]} $vdisks $spare
|
||||
log_must zpool export $TESTPOOL1
|
||||
verify_assertion "$vdisks $sdisks"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user