xref: /dflybsd-src/contrib/lvm2/dist/test/t-pvcreate-usage.sh (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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