2008-07-17 01:32:38 +04:00
#!/bin/sh
2008-10-06 20:47:07 +04:00
# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
2008-07-17 01:32:38 +04:00
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
test_description = 'Test pvcreate option values'
2009-06-06 20:40:39 +04:00
PAGESIZE = $( getconf PAGESIZE)
2008-07-17 01:32:38 +04:00
2011-01-05 03:16:18 +03:00
. lib/test
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
aux prepare_devs 4
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects negative setphysicalvolumesize'
2012-03-16 17:00:05 +04:00
not pvcreate --setphysicalvolumesize -1024 " $dev1 "
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects negative metadatasize'
2012-03-16 17:00:05 +04:00
not pvcreate --metadatasize -1024 " $dev1 "
2008-07-17 01:32:38 +04:00
# x. metadatasize 0, defaults to 255
# FIXME: unable to check default value, not in reporting cmds
# should default to 255 according to code
2011-01-05 03:16:18 +03:00
# check pv_field pv_mda_size 255
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate accepts metadatasize 0'
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 0 " $dev1 "
pvremove " $dev1 "
2008-07-17 01:32:38 +04:00
2009-05-08 10:10:45 +04:00
#Verify vg_mda_size is smaller pv_mda_size
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 512k " $dev1 "
pvcreate --metadatasize 96k " $dev2 "
vgcreate $vg " $dev1 " " $dev2 "
check compare_fields vgs $vg vg_mda_size pvs " $dev2 " pv_mda_size
vgremove $vg
2009-05-08 10:10:45 +04:00
2008-07-17 01:32:38 +04:00
# x. metadatasize too large
# For some reason we allow this, even though there's no room for data?
2008-10-06 20:47:07 +04:00
##COMM 'pvcreate rejects metadatasize too large'
2012-03-16 17:00:05 +04:00
#not pvcreate --metadatasize 100000000000000 "$dev1"
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects metadatacopies < 0'
2012-03-16 17:00:05 +04:00
not pvcreate --metadatacopies -1 " $dev1 "
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate accepts metadatacopies = 0, 1, 2'
2009-10-06 00:55:56 +04:00
for j in metadatacopies pvmetadatacopies
do
2012-03-16 17:00:05 +04:00
pvcreate --$j 0 " $dev1 "
pvcreate --$j 1 " $dev2 "
pvcreate --$j 2 " $dev3 "
check pv_field " $dev1 " pv_mda_count 0
check pv_field " $dev2 " pv_mda_count 1
check pv_field " $dev3 " pv_mda_count 2
pvremove " $dev1 " " $dev2 " " $dev3 "
2009-10-06 00:55:56 +04:00
done
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects metadatacopies > 2'
2012-03-16 17:00:05 +04:00
not pvcreate --metadatacopies 3 " $dev1 "
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects invalid device'
2012-03-16 17:00:05 +04:00
not pvcreate " $dev1 " bogus
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects labelsector < 0'
2012-03-16 17:00:05 +04:00
not pvcreate --labelsector -1 " $dev1 "
2008-07-17 01:32:38 +04:00
2008-10-06 20:47:07 +04:00
#COMM 'pvcreate rejects labelsector > 1000000000000'
2012-03-16 17:00:05 +04:00
not pvcreate --labelsector 1000000000000 " $dev1 "
2008-07-17 01:32:38 +04:00
# other possibilites based on code inspection (not sure how hard)
# x. device too small (min of 512 * 1024 KB)
# x. device filtered out
# x. unable to open /dev/urandom RDONLY
# x. device too large (pe_count > UINT32_MAX)
# x. device read-only
# x. unable to open device readonly
# x. BLKGETSIZE64 fails
# x. set size to value inconsistent with device / PE size
2009-02-22 22:00:26 +03:00
#COMM 'pvcreate basic dataalignment sanity checks'
2012-03-16 17:00:05 +04:00
not pvcreate --dataalignment -1 " $dev1 "
not pvcreate -M 1 --dataalignment 1 " $dev1 "
not pvcreate --dataalignment 1e " $dev1 "
2009-02-22 22:00:26 +03:00
#COMM 'pvcreate always rounded up to page size for start of device'
2012-03-16 17:00:05 +04:00
#pvcreate --metadatacopies 0 --dataalignment 1 "$dev1"
2009-02-22 22:00:26 +03:00
# amuse shell experts
2012-03-16 17:00:05 +04:00
#check pv_field "$dev1" pe_start $(($(getconf PAGESIZE)/1024))".00k"
2009-02-22 22:00:26 +03:00
#COMM 'pvcreate sets data offset directly'
2012-03-16 17:00:05 +04:00
pvcreate --dataalignment 512k " $dev1 "
check pv_field " $dev1 " pe_start "512.00k"
2009-02-22 22:00:26 +03:00
#COMM 'vgcreate/vgremove do not modify data offset of existing PV'
2012-03-16 17:00:05 +04:00
vgcreate $vg " $dev1 " --config 'devices { data_alignment = 1024 }'
check pv_field " $dev1 " pe_start "512.00k"
2009-02-22 22:00:26 +03:00
vgremove $vg --config 'devices { data_alignment = 1024 }'
2012-03-16 17:00:05 +04:00
check pv_field " $dev1 " pe_start "512.00k"
2009-02-22 22:00:26 +03:00
#COMM 'pvcreate sets data offset next to mda area'
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 100k --dataalignment 100k " $dev1 "
check pv_field " $dev1 " pe_start "200.00k"
2009-02-22 22:00:26 +03:00
2009-06-06 20:40:39 +04:00
# metadata area start is aligned according to pagesize
2012-03-16 17:00:05 +04:00
case " $PAGESIZE " in
65536) pv_align = "192.50k" ; ;
8192) pv_align = "136.50k" ; ;
*) pv_align = "133.00k" ; ;
esac
2009-06-06 20:40:39 +04:00
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 128k --dataalignment 3.5k " $dev1 "
check pv_field " $dev1 " pe_start $pv_align
2009-05-07 16:11:50 +04:00
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 128k --metadatacopies 2 --dataalignment 3.5k " $dev1 "
check pv_field " $dev1 " pe_start $pv_align
2009-05-07 16:11:50 +04:00
2010-08-12 08:11:48 +04:00
# data area is aligned to 1M by default,
2009-08-04 20:02:39 +04:00
# data area start is shifted by the specified alignment_offset
2012-03-16 17:00:05 +04:00
pv_align = 1052160B # 1048576 + (7*512)
pvcreate --metadatasize 128k --dataalignmentoffset 7s " $dev1 "
check pv_field " $dev1 " pe_start $pv_align --units b
2009-08-04 20:02:39 +04:00
# 2nd metadata area is created without problems when
# data area start is shifted by the specified alignment_offset
2012-03-16 17:00:05 +04:00
pvcreate --metadatasize 128k --metadatacopies 2 --dataalignmentoffset 7s " $dev1 "
check pv_field " $dev1 " pv_mda_count 2
2009-08-04 20:02:39 +04:00
# FIXME: compare start of 2nd mda with and without --dataalignmentoffset
2009-02-22 22:00:26 +03:00
#COMM 'pv with LVM1 compatible data alignment can be convereted'
#compatible == LVM1_PE_ALIGN == 64k
2012-03-16 17:00:05 +04:00
pvcreate --dataalignment 256k " $dev1 "
vgcreate -s 1m $vg " $dev1 "
2011-02-25 17:12:14 +03:00
vgconvert -M1 $vg
vgconvert -M2 $vg
2012-03-16 17:00:05 +04:00
check pv_field " $dev1 " pe_start 256.00k
2011-02-25 17:12:14 +03:00
vgremove $vg
2009-02-22 22:00:26 +03:00
#COMM 'pv with LVM1 incompatible data alignment cannot be convereted'
2012-03-16 17:00:05 +04:00
pvcreate --dataalignment 10k " $dev1 "
vgcreate -s 1m $vg " $dev1 "
2009-02-22 22:00:26 +03:00
not vgconvert -M1 $vg
2011-02-25 17:12:14 +03:00
vgremove $vg
2009-02-22 22:00:26 +03:00
#COMM 'vgcfgrestore allows pe_start=0'
#basically it produces nonsense, but it tests vgcfgrestore,
#not that final cfg is usable...
2012-03-16 17:00:05 +04:00
pvcreate --metadatacopies 0 " $dev1 "
pvcreate " $dev2 "
vgcreate $vg " $dev1 " " $dev2 "
vgcfgbackup -f backup.$$ $vg
sed 's/pe_start = [0-9]*/pe_start = 0/' backup.$$ > backup.$$ 1
vgcfgrestore -f backup.$$ 1 $vg
check pv_field " $dev1 " pe_start "0"
check pv_field " $dev2 " pe_start "0"
2009-02-22 22:00:26 +03:00
vgremove $vg
2010-06-30 16:17:55 +04:00
2012-03-16 17:00:05 +04:00
echo "test pvcreate --metadataignore"
2010-06-30 16:17:55 +04:00
for pv_in_vg in 1 0; do
for mdacp in 1 2; do
for ignore in y n; do
2012-03-16 17:00:05 +04:00
echo "pvcreate --metadataignore has proper mda_count and mda_used_count"
pvcreate --metadatacopies $mdacp --metadataignore $ignore " $dev1 " " $dev2 "
check pv_field " $dev1 " pv_mda_count " $mdacp "
check pv_field " $dev2 " pv_mda_count " $mdacp "
2010-06-30 16:17:55 +04:00
if [ $ignore = y ] ; then
2012-03-16 17:00:05 +04:00
check pv_field " $dev1 " pv_mda_used_count "0"
check pv_field " $dev2 " pv_mda_used_count "0"
2010-06-30 16:17:55 +04:00
else
2012-03-16 17:00:05 +04:00
check pv_field " $dev1 " pv_mda_used_count " $mdacp "
check pv_field " $dev2 " pv_mda_used_count " $mdacp "
2010-06-30 16:17:55 +04:00
fi
2012-03-16 17:00:05 +04:00
echo "vgcreate has proper vg_mda_count and vg_mda_used_count"
2010-06-30 16:17:55 +04:00
if [ $pv_in_vg = 1 ] ; then
2012-03-16 17:00:05 +04:00
vgcreate -c n $vg " $dev1 " " $dev2 "
check vg_field $vg vg_mda_count " $(( $mdacp * 2 )) "
2010-06-30 16:17:55 +04:00
if [ $ignore = y ] ; then
2012-03-16 17:00:05 +04:00
check vg_field $vg vg_mda_used_count "1"
2010-06-30 16:17:55 +04:00
else
2012-03-16 17:00:05 +04:00
check vg_field $vg vg_mda_used_count " $(( $mdacp * 2 )) "
2010-06-30 16:17:55 +04:00
fi
2012-03-16 17:00:05 +04:00
check vg_field $vg vg_mda_copies "unmanaged"
2010-06-30 16:17:55 +04:00
vgremove $vg
fi
done
done
done