186d7f5d3SJohn Marino#!/bin/sh 286d7f5d3SJohn Marino# Copyright (C) 2008 Red Hat, Inc. All rights reserved. 386d7f5d3SJohn Marino# 486d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use, 586d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions 686d7f5d3SJohn Marino# of the GNU General Public License v.2. 786d7f5d3SJohn Marino# 886d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License 986d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation, 1086d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1186d7f5d3SJohn Marino 1286d7f5d3SJohn Marinotest_description='Test pvcreate option values' 1386d7f5d3SJohn MarinoPAGESIZE=$(getconf PAGESIZE) 1486d7f5d3SJohn Marino 1586d7f5d3SJohn Marino. ./test-utils.sh 1686d7f5d3SJohn Marino 1786d7f5d3SJohn Marinoaux prepare_devs 4 1886d7f5d3SJohn Marino 1986d7f5d3SJohn Marino#COMM 'pvcreate rejects negative setphysicalvolumesize' 2086d7f5d3SJohn Marinonot pvcreate --setphysicalvolumesize -1024 $dev1 2186d7f5d3SJohn Marino 2286d7f5d3SJohn Marino#COMM 'pvcreate rejects negative metadatasize' 2386d7f5d3SJohn Marinonot pvcreate --metadatasize -1024 $dev1 2486d7f5d3SJohn Marino 2586d7f5d3SJohn Marino# x. metadatasize 0, defaults to 255 2686d7f5d3SJohn Marino# FIXME: unable to check default value, not in reporting cmds 2786d7f5d3SJohn Marino# should default to 255 according to code 2886d7f5d3SJohn Marino# check_pv_field_ pv_mda_size 255 2986d7f5d3SJohn Marino#COMM 'pvcreate accepts metadatasize 0' 3086d7f5d3SJohn Marinopvcreate --metadatasize 0 $dev1 3186d7f5d3SJohn Marinopvremove $dev1 3286d7f5d3SJohn Marino 3386d7f5d3SJohn Marino#Verify vg_mda_size is smaller pv_mda_size 3486d7f5d3SJohn Marinopvcreate --metadatasize 512k $dev1 3586d7f5d3SJohn Marinopvcreate --metadatasize 96k $dev2 3686d7f5d3SJohn Marinovgcreate $vg $dev1 $dev2 3786d7f5d3SJohn Marinocompare_two_fields_ vgs $vg vg_mda_size pvs $dev2 pv_mda_size 3886d7f5d3SJohn Marinovgremove -ff $vg 3986d7f5d3SJohn Marino 4086d7f5d3SJohn Marino# x. metadatasize too large 4186d7f5d3SJohn Marino# For some reason we allow this, even though there's no room for data? 4286d7f5d3SJohn Marino##COMM 'pvcreate rejects metadatasize too large' 4386d7f5d3SJohn Marino#not pvcreate --metadatasize 100000000000000 $dev1 4486d7f5d3SJohn Marino 4586d7f5d3SJohn Marino#COMM 'pvcreate rejects metadatacopies < 0' 4686d7f5d3SJohn Marinonot pvcreate --metadatacopies -1 $dev1 4786d7f5d3SJohn Marino 4886d7f5d3SJohn Marino#COMM 'pvcreate accepts metadatacopies = 0, 1, 2' 4986d7f5d3SJohn Marinofor j in metadatacopies pvmetadatacopies 5086d7f5d3SJohn Marinodo 5186d7f5d3SJohn Marinopvcreate --$j 0 $dev1 5286d7f5d3SJohn Marinopvcreate --$j 1 $dev2 5386d7f5d3SJohn Marinopvcreate --$j 2 $dev3 5486d7f5d3SJohn Marinocheck_pv_field_ $dev1 pv_mda_count 0 5586d7f5d3SJohn Marinocheck_pv_field_ $dev2 pv_mda_count 1 5686d7f5d3SJohn Marinocheck_pv_field_ $dev3 pv_mda_count 2 5786d7f5d3SJohn Marinopvremove $dev1 5886d7f5d3SJohn Marinopvremove $dev2 5986d7f5d3SJohn Marinopvremove $dev3 6086d7f5d3SJohn Marinodone 6186d7f5d3SJohn Marino 6286d7f5d3SJohn Marino#COMM 'pvcreate rejects metadatacopies > 2' 6386d7f5d3SJohn Marinonot pvcreate --metadatacopies 3 $dev1 6486d7f5d3SJohn Marino 6586d7f5d3SJohn Marino#COMM 'pvcreate rejects invalid device' 6686d7f5d3SJohn Marinonot pvcreate $dev1bogus 6786d7f5d3SJohn Marino 6886d7f5d3SJohn Marino#COMM 'pvcreate rejects labelsector < 0' 6986d7f5d3SJohn Marinonot pvcreate --labelsector -1 $dev1 7086d7f5d3SJohn Marino 7186d7f5d3SJohn Marino#COMM 'pvcreate rejects labelsector > 1000000000000' 7286d7f5d3SJohn Marinonot pvcreate --labelsector 1000000000000 $dev1 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marino# other possibilites based on code inspection (not sure how hard) 7586d7f5d3SJohn Marino# x. device too small (min of 512 * 1024 KB) 7686d7f5d3SJohn Marino# x. device filtered out 7786d7f5d3SJohn Marino# x. unable to open /dev/urandom RDONLY 7886d7f5d3SJohn Marino# x. device too large (pe_count > UINT32_MAX) 7986d7f5d3SJohn Marino# x. device read-only 8086d7f5d3SJohn Marino# x. unable to open device readonly 8186d7f5d3SJohn Marino# x. BLKGETSIZE64 fails 8286d7f5d3SJohn Marino# x. set size to value inconsistent with device / PE size 8386d7f5d3SJohn Marino 8486d7f5d3SJohn Marino#COMM 'pvcreate basic dataalignment sanity checks' 8586d7f5d3SJohn Marinonot pvcreate --dataalignment -1 $dev1 8686d7f5d3SJohn Marinonot pvcreate -M 1 --dataalignment 1 $dev1 8786d7f5d3SJohn Marinonot pvcreate --dataalignment 1e $dev1 8886d7f5d3SJohn Marino 8986d7f5d3SJohn Marino#COMM 'pvcreate always rounded up to page size for start of device' 9086d7f5d3SJohn Marino#pvcreate --metadatacopies 0 --dataalignment 1 $dev1 9186d7f5d3SJohn Marino# amuse shell experts 9286d7f5d3SJohn Marino#check_pv_field_ $dev1 pe_start $(($(getconf PAGESIZE)/1024))".00k" 9386d7f5d3SJohn Marino 9486d7f5d3SJohn Marino#COMM 'pvcreate sets data offset directly' 9586d7f5d3SJohn Marinopvcreate --dataalignment 512k $dev1 9686d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 512.00k 9786d7f5d3SJohn Marino 9886d7f5d3SJohn Marino#COMM 'vgcreate/vgremove do not modify data offset of existing PV' 9986d7f5d3SJohn Marinovgcreate $vg $dev1 --config 'devices { data_alignment = 1024 }' 10086d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 512.00k 10186d7f5d3SJohn Marinovgremove $vg --config 'devices { data_alignment = 1024 }' 10286d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 512.00k 10386d7f5d3SJohn Marino 10486d7f5d3SJohn Marino#COMM 'pvcreate sets data offset next to mda area' 10586d7f5d3SJohn Marinopvcreate --metadatasize 100k --dataalignment 100k $dev1 10686d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 200.00k 10786d7f5d3SJohn Marino 10886d7f5d3SJohn Marino# metadata area start is aligned according to pagesize 10986d7f5d3SJohn Marino# pagesize should be 64k or 4k ... 11086d7f5d3SJohn Marinoif [ $PAGESIZE -eq 65536 ] ; then 11186d7f5d3SJohn Marino pv_align="192.50k" 11286d7f5d3SJohn Marinoelse 11386d7f5d3SJohn Marino pv_align="133.00k" 11486d7f5d3SJohn Marinofi 11586d7f5d3SJohn Marino 11686d7f5d3SJohn Marinopvcreate --metadatasize 128k --dataalignment 3.5k $dev1 11786d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start $pv_align 11886d7f5d3SJohn Marino 11986d7f5d3SJohn Marinopvcreate --metadatasize 128k --metadatacopies 2 --dataalignment 3.5k $dev1 12086d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start $pv_align 12186d7f5d3SJohn Marino 12286d7f5d3SJohn Marino# data area is aligned to 64k by default, 12386d7f5d3SJohn Marino# data area start is shifted by the specified alignment_offset 12486d7f5d3SJohn Marinopv_align="195.50k" 12586d7f5d3SJohn Marinopvcreate --metadatasize 128k --dataalignmentoffset 7s $dev1 12686d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start $pv_align 12786d7f5d3SJohn Marino 12886d7f5d3SJohn Marino# 2nd metadata area is created without problems when 12986d7f5d3SJohn Marino# data area start is shifted by the specified alignment_offset 13086d7f5d3SJohn Marinopvcreate --metadatasize 128k --metadatacopies 2 --dataalignmentoffset 7s $dev1 13186d7f5d3SJohn Marinocheck_pv_field_ $dev1 pv_mda_count 2 13286d7f5d3SJohn Marino# FIXME: compare start of 2nd mda with and without --dataalignmentoffset 13386d7f5d3SJohn Marino 13486d7f5d3SJohn Marino#COMM 'pv with LVM1 compatible data alignment can be convereted' 13586d7f5d3SJohn Marino#compatible == LVM1_PE_ALIGN == 64k 13686d7f5d3SJohn Marinopvcreate --dataalignment 256k $dev1 13786d7f5d3SJohn Marinovgcreate -s 1m $vg $dev1 13886d7f5d3SJohn Marinovgconvert -M1 $vg 13986d7f5d3SJohn Marinovgconvert -M2 $vg 14086d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 256.00k 14186d7f5d3SJohn Marinovgremove $vg 14286d7f5d3SJohn Marino 14386d7f5d3SJohn Marino#COMM 'pv with LVM1 incompatible data alignment cannot be convereted' 14486d7f5d3SJohn Marinopvcreate --dataalignment 10k $dev1 14586d7f5d3SJohn Marinovgcreate -s 1m $vg $dev1 14686d7f5d3SJohn Marinonot vgconvert -M1 $vg 14786d7f5d3SJohn Marinovgremove $vg 14886d7f5d3SJohn Marino 14986d7f5d3SJohn Marino#COMM 'vgcfgrestore allows pe_start=0' 15086d7f5d3SJohn Marino#basically it produces nonsense, but it tests vgcfgrestore, 15186d7f5d3SJohn Marino#not that final cfg is usable... 15286d7f5d3SJohn Marinopvcreate --metadatacopies 0 $dev1 15386d7f5d3SJohn Marinopvcreate $dev2 15486d7f5d3SJohn Marinovgcreate $vg $dev1 $dev2 15586d7f5d3SJohn Marinovgcfgbackup -f "$(pwd)/backup.$$" $vg 15686d7f5d3SJohn Marinosed 's/pe_start = [0-9]*/pe_start = 0/' "$(pwd)/backup.$$" > "$(pwd)/backup.$$1" 15786d7f5d3SJohn Marinovgcfgrestore -f "$(pwd)/backup.$$1" $vg 15886d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 0 15986d7f5d3SJohn Marinocheck_pv_field_ $dev2 pe_start 0 16086d7f5d3SJohn Marinovgremove $vg 161