xref: /dflybsd-src/contrib/lvm2/dist/test/t-vgcreate-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='Exercise some vgcreate diagnostics'
1386d7f5d3SJohn Marino
1486d7f5d3SJohn Marino. ./test-utils.sh
1586d7f5d3SJohn Marino
1686d7f5d3SJohn Marinoaux prepare_devs 3
1786d7f5d3SJohn Marinopvcreate $dev1 $dev2
1886d7f5d3SJohn Marinopvcreate --metadatacopies 0 $dev3
1986d7f5d3SJohn Marino
2086d7f5d3SJohn Marino#COMM 'vgcreate accepts 8.00m physicalextentsize for VG'
2186d7f5d3SJohn Marinovgcreate $vg --physicalextentsize 8.00m $dev1 $dev2
2286d7f5d3SJohn Marinocheck_vg_field_ $vg vg_extent_size 8.00m
2386d7f5d3SJohn Marinovgremove $vg
2486d7f5d3SJohn Marino# try vgck and to remove it again - should fail (but not segfault)
2586d7f5d3SJohn Marinonot vgremove $vg
2686d7f5d3SJohn Marinonot vgck $vg
2786d7f5d3SJohn Marino
2886d7f5d3SJohn Marino#COMM 'vgcreate accepts smaller (128) maxlogicalvolumes for VG'
2986d7f5d3SJohn Marinovgcreate $vg --maxlogicalvolumes 128 $dev1 $dev2
3086d7f5d3SJohn Marinocheck_vg_field_ $vg max_lv 128
3186d7f5d3SJohn Marinovgremove $vg
3286d7f5d3SJohn Marino
3386d7f5d3SJohn Marino#COMM 'vgcreate accepts smaller (128) maxphysicalvolumes for VG'
3486d7f5d3SJohn Marinovgcreate $vg --maxphysicalvolumes 128 $dev1 $dev2
3586d7f5d3SJohn Marinocheck_vg_field_ $vg max_pv 128
3686d7f5d3SJohn Marinovgremove $vg
3786d7f5d3SJohn Marino
3886d7f5d3SJohn Marino#COMM 'vgcreate rejects a zero physical extent size'
3986d7f5d3SJohn Marinonot vgcreate --physicalextentsize 0 $vg $dev1 $dev2 2>err
4086d7f5d3SJohn Marinogrep "^  Physical extent size may not be zero\$" err
4186d7f5d3SJohn Marino
4286d7f5d3SJohn Marino#COMM 'vgcreate rejects "inherit" allocation policy'
4386d7f5d3SJohn Marinonot vgcreate --alloc inherit $vg $dev1 $dev2 2>err
4486d7f5d3SJohn Marinogrep "^  Volume Group allocation policy cannot inherit from anything\$" err
4586d7f5d3SJohn Marino
4686d7f5d3SJohn Marino#COMM 'vgcreate rejects vgname "."'
4786d7f5d3SJohn Marinovginvalid=.;
4886d7f5d3SJohn Marinonot vgcreate $vginvalid $dev1 $dev2 2>err
4986d7f5d3SJohn Marinogrep "New volume group name \"$vginvalid\" is invalid\$" err
5086d7f5d3SJohn Marino
5186d7f5d3SJohn Marino#COMM 'vgcreate rejects vgname greater than 128 characters'
5286d7f5d3SJohn Marinovginvalid=thisnameisridiculouslylongtotestvalidationcodecheckingmaximumsizethisiswhathappenswhenprogrammersgetboredandorarenotcreativedonttrythisathome
5386d7f5d3SJohn Marinonot vgcreate $vginvalid $dev1 $dev2 2>err
5486d7f5d3SJohn Marinogrep "New volume group name \"$vginvalid\" is invalid\$" err
5586d7f5d3SJohn Marino
5686d7f5d3SJohn Marino#COMM 'vgcreate rejects already existing vgname "/tmp/$vg"'
5786d7f5d3SJohn Marino#touch /tmp/$vg
5886d7f5d3SJohn Marino#not vgcreate $vg $dev1 $dev2 2>err
5986d7f5d3SJohn Marino#grep "New volume group name \"$vg\" is invalid\$" err
6086d7f5d3SJohn Marino
6186d7f5d3SJohn Marino#COMM "vgcreate rejects repeated invocation (run 2 times) (bz178216)"
6286d7f5d3SJohn Marinovgcreate $vg $dev1 $dev2
6386d7f5d3SJohn Marinonot vgcreate $vg $dev1 $dev2
6486d7f5d3SJohn Marinovgremove -ff $vg
6586d7f5d3SJohn Marino
6686d7f5d3SJohn Marino#COMM 'vgcreate rejects MaxLogicalVolumes > 255'
6786d7f5d3SJohn Marinonot vgcreate --metadatatype 1 --maxlogicalvolumes 1024 $vg $dev1 $dev2 2>err
6886d7f5d3SJohn Marinogrep "^  Number of volumes may not exceed 255\$" err
6986d7f5d3SJohn Marino
7086d7f5d3SJohn Marino#COMM "vgcreate fails when the only pv has --metadatacopies 0"
7186d7f5d3SJohn Marinonot vgcreate $vg $dev3
7286d7f5d3SJohn Marino
7386d7f5d3SJohn Marino# Test default (4MB) vg_extent_size as well as limits of extent_size
7486d7f5d3SJohn Marinonot vgcreate --physicalextentsize 0k $vg $dev1 $dev2
7586d7f5d3SJohn Marinovgcreate --physicalextentsize 1k $vg $dev1 $dev2
7686d7f5d3SJohn Marinocheck_vg_field_ $vg vg_extent_size 1.00k
7786d7f5d3SJohn Marinovgremove -ff $vg
7886d7f5d3SJohn Marinonot vgcreate --physicalextentsize 3K $vg $dev1 $dev2
7986d7f5d3SJohn Marinonot vgcreate --physicalextentsize 1024t $vg $dev1 $dev2
8086d7f5d3SJohn Marino#not vgcreate --physicalextentsize 1T $vg $dev1 $dev2
8186d7f5d3SJohn Marino# FIXME: vgcreate allows physicalextentsize larger than pv size!
8286d7f5d3SJohn Marino
8386d7f5d3SJohn Marino# Test default max_lv, max_pv, extent_size, alloc_policy, clustered
8486d7f5d3SJohn Marinovgcreate $vg $dev1 $dev2
8586d7f5d3SJohn Marinocheck_vg_field_ $vg vg_extent_size 4.00m
8686d7f5d3SJohn Marinocheck_vg_field_ $vg max_lv 0
8786d7f5d3SJohn Marinocheck_vg_field_ $vg max_pv 0
8886d7f5d3SJohn Marinocheck_vg_field_ $vg vg_attr "wz--n-"
8986d7f5d3SJohn Marinovgremove -ff $vg
9086d7f5d3SJohn Marino
9186d7f5d3SJohn Marino# Implicit pvcreate tests, test pvcreate options on vgcreate
9286d7f5d3SJohn Marino# --force, --yes, --metadata{size|copies|type}, --zero
9386d7f5d3SJohn Marino# --dataalignment[offset]
9486d7f5d3SJohn Marinopvremove $dev1 $dev2
9586d7f5d3SJohn Marinovgcreate --force --yes --zero y $vg $dev1 $dev2
9686d7f5d3SJohn Marinovgremove -f $vg
9786d7f5d3SJohn Marinopvremove -f $dev1
9886d7f5d3SJohn Marino
9986d7f5d3SJohn Marinofor i in 0 1 2 3
10086d7f5d3SJohn Marinodo
10186d7f5d3SJohn Marino# vgcreate (lvm2) succeeds writing LVM label at sector $i
10286d7f5d3SJohn Marino    vgcreate --labelsector $i $vg $dev1
10386d7f5d3SJohn Marino    dd if=$dev1 bs=512 skip=$i count=1 2>/dev/null | strings | grep -q LABELONE;
10486d7f5d3SJohn Marino    vgremove -f $vg
10586d7f5d3SJohn Marino    pvremove -f $dev1
10686d7f5d3SJohn Marinodone
10786d7f5d3SJohn Marino
10886d7f5d3SJohn Marino# pvmetadatacopies
10986d7f5d3SJohn Marinofor i in 1 2
11086d7f5d3SJohn Marinodo
11186d7f5d3SJohn Marino    vgcreate --pvmetadatacopies $i $vg $dev1
11286d7f5d3SJohn Marino    check_pv_field_ $dev1 pv_mda_count $i
11386d7f5d3SJohn Marino    vgremove -f $vg
11486d7f5d3SJohn Marino    pvremove -f $dev1
11586d7f5d3SJohn Marinodone
11686d7f5d3SJohn Marinonot vgcreate --metadatacopies 0 $vg $dev1
11786d7f5d3SJohn Marinopvcreate --metadatacopies 1 $dev2
11886d7f5d3SJohn Marinovgcreate --pvmetadatacopies 0 $vg $dev1 $dev2
11986d7f5d3SJohn Marinocheck_pv_field_ $dev1 pv_mda_count 0
12086d7f5d3SJohn Marinocheck_pv_field_ $dev2 pv_mda_count 1
12186d7f5d3SJohn Marinovgremove -f $vg
12286d7f5d3SJohn Marinopvremove -f $dev1
12386d7f5d3SJohn Marino
12486d7f5d3SJohn Marino# metadatasize, dataalignment, dataalignmentoffset
12586d7f5d3SJohn Marino#COMM 'pvcreate sets data offset next to mda area'
12686d7f5d3SJohn Marinovgcreate --metadatasize 100k --dataalignment 100k $vg $dev1
12786d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start 200.00k
12886d7f5d3SJohn Marinovgremove -f $vg
12986d7f5d3SJohn Marinopvremove -f $dev1
13086d7f5d3SJohn Marino
13186d7f5d3SJohn Marino# data area is aligned to 64k by default,
13286d7f5d3SJohn Marino# data area start is shifted by the specified alignment_offset
13386d7f5d3SJohn Marinopv_align="195.50k"
13486d7f5d3SJohn Marinovgcreate --metadatasize 128k --dataalignmentoffset 7s $vg $dev1
13586d7f5d3SJohn Marinocheck_pv_field_ $dev1 pe_start $pv_align
13686d7f5d3SJohn Marinovgremove -f $vg
13786d7f5d3SJohn Marinopvremove -f $dev1
13886d7f5d3SJohn Marino
13986d7f5d3SJohn Marino# metadatatype
14086d7f5d3SJohn Marinofor i in 1 2
14186d7f5d3SJohn Marinodo
14286d7f5d3SJohn Marino    vgcreate -M $i $vg $dev1
14386d7f5d3SJohn Marino    check_vg_field_ $vg vg_fmt lvm$i
14486d7f5d3SJohn Marino    vgremove -f $vg
14586d7f5d3SJohn Marino    pvremove -f $dev1
14686d7f5d3SJohn Marinodone
14786d7f5d3SJohn Marino
14886d7f5d3SJohn Marino# vgcreate fails if pv belongs to existing vg
14986d7f5d3SJohn Marinovgcreate $vg1 $dev1 $dev2
15086d7f5d3SJohn Marinonot vgcreate $vg2 $dev2
15186d7f5d3SJohn Marinovgremove -f $vg1
15286d7f5d3SJohn Marinopvremove -f $dev1 $dev2
15386d7f5d3SJohn Marino
15486d7f5d3SJohn Marino# all PVs exist in the VG after created
15586d7f5d3SJohn Marinopvcreate $dev1
15686d7f5d3SJohn Marinovgcreate $vg1 $dev1 $dev2 $dev3
15786d7f5d3SJohn Marinocheck_pv_field_ $dev1 vg_name $vg1
15886d7f5d3SJohn Marinocheck_pv_field_ $dev2 vg_name $vg1
15986d7f5d3SJohn Marinocheck_pv_field_ $dev3 vg_name $vg1
16086d7f5d3SJohn Marinovgremove -f $vg1
16186d7f5d3SJohn Marinopvremove -f $dev1 $dev2 $dev3
162