1 1.1 haad #!/bin/sh 2 1.1 haad # Copyright (C) 2008 Red Hat, Inc. All rights reserved. 3 1.1 haad # 4 1.1 haad # This copyrighted material is made available to anyone wishing to use, 5 1.1 haad # modify, copy, or redistribute it subject to the terms and conditions 6 1.1 haad # of the GNU General Public License v.2. 7 1.1 haad # 8 1.1 haad # You should have received a copy of the GNU General Public License 9 1.1 haad # along with this program; if not, write to the Free Software Foundation, 10 1.1 haad # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 11 1.1 haad 12 1.1 haad test_description='Test pvcreate option values' 13 1.1.1.2 haad PAGESIZE=$(getconf PAGESIZE) 14 1.1 haad 15 1.1 haad . ./test-utils.sh 16 1.1 haad 17 1.1 haad aux prepare_devs 4 18 1.1 haad 19 1.1 haad #COMM 'pvcreate rejects negative setphysicalvolumesize' 20 1.1 haad not pvcreate --setphysicalvolumesize -1024 $dev1 21 1.1 haad 22 1.1 haad #COMM 'pvcreate rejects negative metadatasize' 23 1.1 haad not pvcreate --metadatasize -1024 $dev1 24 1.1 haad 25 1.1 haad # x. metadatasize 0, defaults to 255 26 1.1 haad # FIXME: unable to check default value, not in reporting cmds 27 1.1 haad # should default to 255 according to code 28 1.1 haad # check_pv_field_ pv_mda_size 255 29 1.1 haad #COMM 'pvcreate accepts metadatasize 0' 30 1.1 haad pvcreate --metadatasize 0 $dev1 31 1.1 haad pvremove $dev1 32 1.1 haad 33 1.1.1.2 haad #Verify vg_mda_size is smaller pv_mda_size 34 1.1.1.2 haad pvcreate --metadatasize 512k $dev1 35 1.1.1.2 haad pvcreate --metadatasize 96k $dev2 36 1.1.1.2 haad vgcreate $vg $dev1 $dev2 37 1.1.1.2 haad compare_two_fields_ vgs $vg vg_mda_size pvs $dev2 pv_mda_size 38 1.1.1.2 haad vgremove -ff $vg 39 1.1.1.2 haad 40 1.1 haad # x. metadatasize too large 41 1.1 haad # For some reason we allow this, even though there's no room for data? 42 1.1 haad ##COMM 'pvcreate rejects metadatasize too large' 43 1.1 haad #not pvcreate --metadatasize 100000000000000 $dev1 44 1.1 haad 45 1.1 haad #COMM 'pvcreate rejects metadatacopies < 0' 46 1.1 haad not pvcreate --metadatacopies -1 $dev1 47 1.1 haad 48 1.1 haad #COMM 'pvcreate accepts metadatacopies = 0, 1, 2' 49 1.1.1.2 haad for j in metadatacopies pvmetadatacopies 50 1.1.1.2 haad do 51 1.1.1.2 haad pvcreate --$j 0 $dev1 52 1.1.1.2 haad pvcreate --$j 1 $dev2 53 1.1.1.2 haad pvcreate --$j 2 $dev3 54 1.1.1.2 haad check_pv_field_ $dev1 pv_mda_count 0 55 1.1.1.2 haad check_pv_field_ $dev2 pv_mda_count 1 56 1.1.1.2 haad check_pv_field_ $dev3 pv_mda_count 2 57 1.1 haad pvremove $dev1 58 1.1 haad pvremove $dev2 59 1.1 haad pvremove $dev3 60 1.1.1.2 haad done 61 1.1 haad 62 1.1 haad #COMM 'pvcreate rejects metadatacopies > 2' 63 1.1 haad not pvcreate --metadatacopies 3 $dev1 64 1.1 haad 65 1.1 haad #COMM 'pvcreate rejects invalid device' 66 1.1 haad not pvcreate $dev1bogus 67 1.1 haad 68 1.1 haad #COMM 'pvcreate rejects labelsector < 0' 69 1.1 haad not pvcreate --labelsector -1 $dev1 70 1.1 haad 71 1.1 haad #COMM 'pvcreate rejects labelsector > 1000000000000' 72 1.1 haad not pvcreate --labelsector 1000000000000 $dev1 73 1.1 haad 74 1.1 haad # other possibilites based on code inspection (not sure how hard) 75 1.1 haad # x. device too small (min of 512 * 1024 KB) 76 1.1 haad # x. device filtered out 77 1.1 haad # x. unable to open /dev/urandom RDONLY 78 1.1 haad # x. device too large (pe_count > UINT32_MAX) 79 1.1 haad # x. device read-only 80 1.1 haad # x. unable to open device readonly 81 1.1 haad # x. BLKGETSIZE64 fails 82 1.1 haad # x. set size to value inconsistent with device / PE size 83 1.1 haad 84 1.1.1.2 haad #COMM 'pvcreate basic dataalignment sanity checks' 85 1.1.1.2 haad not pvcreate --dataalignment -1 $dev1 86 1.1.1.2 haad not pvcreate -M 1 --dataalignment 1 $dev1 87 1.1.1.2 haad not pvcreate --dataalignment 1e $dev1 88 1.1.1.2 haad 89 1.1.1.2 haad #COMM 'pvcreate always rounded up to page size for start of device' 90 1.1.1.2 haad #pvcreate --metadatacopies 0 --dataalignment 1 $dev1 91 1.1.1.2 haad # amuse shell experts 92 1.1.1.2 haad #check_pv_field_ $dev1 pe_start $(($(getconf PAGESIZE)/1024))".00k" 93 1.1.1.2 haad 94 1.1.1.2 haad #COMM 'pvcreate sets data offset directly' 95 1.1.1.2 haad pvcreate --dataalignment 512k $dev1 96 1.1.1.2 haad check_pv_field_ $dev1 pe_start 512.00k 97 1.1.1.2 haad 98 1.1.1.2 haad #COMM 'vgcreate/vgremove do not modify data offset of existing PV' 99 1.1.1.2 haad vgcreate $vg $dev1 --config 'devices { data_alignment = 1024 }' 100 1.1.1.2 haad check_pv_field_ $dev1 pe_start 512.00k 101 1.1.1.2 haad vgremove $vg --config 'devices { data_alignment = 1024 }' 102 1.1.1.2 haad check_pv_field_ $dev1 pe_start 512.00k 103 1.1.1.2 haad 104 1.1.1.2 haad #COMM 'pvcreate sets data offset next to mda area' 105 1.1.1.2 haad pvcreate --metadatasize 100k --dataalignment 100k $dev1 106 1.1.1.2 haad check_pv_field_ $dev1 pe_start 200.00k 107 1.1.1.2 haad 108 1.1.1.2 haad # metadata area start is aligned according to pagesize 109 1.1.1.2 haad # pagesize should be 64k or 4k ... 110 1.1.1.2 haad if [ $PAGESIZE -eq 65536 ] ; then 111 1.1.1.2 haad pv_align="192.50k" 112 1.1.1.2 haad else 113 1.1.1.2 haad pv_align="133.00k" 114 1.1.1.2 haad fi 115 1.1.1.2 haad 116 1.1.1.2 haad pvcreate --metadatasize 128k --dataalignment 3.5k $dev1 117 1.1.1.2 haad check_pv_field_ $dev1 pe_start $pv_align 118 1.1.1.2 haad 119 1.1.1.2 haad pvcreate --metadatasize 128k --metadatacopies 2 --dataalignment 3.5k $dev1 120 1.1.1.2 haad check_pv_field_ $dev1 pe_start $pv_align 121 1.1.1.2 haad 122 1.1.1.2 haad # data area is aligned to 64k by default, 123 1.1.1.2 haad # data area start is shifted by the specified alignment_offset 124 1.1.1.2 haad pv_align="195.50k" 125 1.1.1.2 haad pvcreate --metadatasize 128k --dataalignmentoffset 7s $dev1 126 1.1.1.2 haad check_pv_field_ $dev1 pe_start $pv_align 127 1.1.1.2 haad 128 1.1.1.2 haad # 2nd metadata area is created without problems when 129 1.1.1.2 haad # data area start is shifted by the specified alignment_offset 130 1.1.1.2 haad pvcreate --metadatasize 128k --metadatacopies 2 --dataalignmentoffset 7s $dev1 131 1.1.1.2 haad check_pv_field_ $dev1 pv_mda_count 2 132 1.1.1.2 haad # FIXME: compare start of 2nd mda with and without --dataalignmentoffset 133 1.1.1.2 haad 134 1.1.1.2 haad #COMM 'pv with LVM1 compatible data alignment can be convereted' 135 1.1.1.2 haad #compatible == LVM1_PE_ALIGN == 64k 136 1.1.1.2 haad pvcreate --dataalignment 256k $dev1 137 1.1.1.2 haad vgcreate -s 1m $vg $dev1 138 1.1.1.2 haad vgconvert -M1 $vg 139 1.1.1.2 haad vgconvert -M2 $vg 140 1.1.1.2 haad check_pv_field_ $dev1 pe_start 256.00k 141 1.1.1.2 haad vgremove $vg 142 1.1.1.2 haad 143 1.1.1.2 haad #COMM 'pv with LVM1 incompatible data alignment cannot be convereted' 144 1.1.1.2 haad pvcreate --dataalignment 10k $dev1 145 1.1.1.2 haad vgcreate -s 1m $vg $dev1 146 1.1.1.2 haad not vgconvert -M1 $vg 147 1.1.1.2 haad vgremove $vg 148 1.1.1.2 haad 149 1.1.1.2 haad #COMM 'vgcfgrestore allows pe_start=0' 150 1.1.1.2 haad #basically it produces nonsense, but it tests vgcfgrestore, 151 1.1.1.2 haad #not that final cfg is usable... 152 1.1.1.2 haad pvcreate --metadatacopies 0 $dev1 153 1.1.1.2 haad pvcreate $dev2 154 1.1.1.2 haad vgcreate $vg $dev1 $dev2 155 1.1.1.2 haad vgcfgbackup -f "$(pwd)/backup.$$" $vg 156 1.1.1.2 haad sed 's/pe_start = [0-9]*/pe_start = 0/' "$(pwd)/backup.$$" > "$(pwd)/backup.$$1" 157 1.1.1.2 haad vgcfgrestore -f "$(pwd)/backup.$$1" $vg 158 1.1.1.2 haad check_pv_field_ $dev1 pe_start 0 159 1.1.1.2 haad check_pv_field_ $dev2 pe_start 0 160 1.1.1.2 haad vgremove $vg 161