1#!/bin/sh 2# Copyright (C) 2008 Red Hat, Inc. All rights reserved. 3# 4# This copyrighted material is made available to anyone wishing to use, 5# modify, copy, or redistribute it subject to the terms and conditions 6# of the GNU General Public License v.2. 7# 8# You should have received a copy of the GNU General Public License 9# along with this program; if not, write to the Free Software Foundation, 10# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 11 12test_description='Exercise some vgcreate diagnostics' 13 14. ./test-utils.sh 15 16aux prepare_devs 3 17pvcreate $dev1 $dev2 18pvcreate --metadatacopies 0 $dev3 19 20#COMM 'vgcreate accepts 8.00m physicalextentsize for VG' 21vgcreate $vg --physicalextentsize 8.00m $dev1 $dev2 22check_vg_field_ $vg vg_extent_size 8.00m 23vgremove $vg 24# try vgck and to remove it again - should fail (but not segfault) 25not vgremove $vg 26not vgck $vg 27 28#COMM 'vgcreate accepts smaller (128) maxlogicalvolumes for VG' 29vgcreate $vg --maxlogicalvolumes 128 $dev1 $dev2 30check_vg_field_ $vg max_lv 128 31vgremove $vg 32 33#COMM 'vgcreate accepts smaller (128) maxphysicalvolumes for VG' 34vgcreate $vg --maxphysicalvolumes 128 $dev1 $dev2 35check_vg_field_ $vg max_pv 128 36vgremove $vg 37 38#COMM 'vgcreate rejects a zero physical extent size' 39not vgcreate --physicalextentsize 0 $vg $dev1 $dev2 2>err 40grep "^ Physical extent size may not be zero\$" err 41 42#COMM 'vgcreate rejects "inherit" allocation policy' 43not vgcreate --alloc inherit $vg $dev1 $dev2 2>err 44grep "^ Volume Group allocation policy cannot inherit from anything\$" err 45 46#COMM 'vgcreate rejects vgname "."' 47vginvalid=.; 48not vgcreate $vginvalid $dev1 $dev2 2>err 49grep "New volume group name \"$vginvalid\" is invalid\$" err 50 51#COMM 'vgcreate rejects vgname greater than 128 characters' 52vginvalid=thisnameisridiculouslylongtotestvalidationcodecheckingmaximumsizethisiswhathappenswhenprogrammersgetboredandorarenotcreativedonttrythisathome 53not vgcreate $vginvalid $dev1 $dev2 2>err 54grep "New volume group name \"$vginvalid\" is invalid\$" err 55 56#COMM 'vgcreate rejects already existing vgname "/tmp/$vg"' 57#touch /tmp/$vg 58#not vgcreate $vg $dev1 $dev2 2>err 59#grep "New volume group name \"$vg\" is invalid\$" err 60 61#COMM "vgcreate rejects repeated invocation (run 2 times) (bz178216)" 62vgcreate $vg $dev1 $dev2 63not vgcreate $vg $dev1 $dev2 64vgremove -ff $vg 65 66#COMM 'vgcreate rejects MaxLogicalVolumes > 255' 67not vgcreate --metadatatype 1 --maxlogicalvolumes 1024 $vg $dev1 $dev2 2>err 68grep "^ Number of volumes may not exceed 255\$" err 69 70#COMM "vgcreate fails when the only pv has --metadatacopies 0" 71not vgcreate $vg $dev3 72 73# Test default (4MB) vg_extent_size as well as limits of extent_size 74not vgcreate --physicalextentsize 0k $vg $dev1 $dev2 75vgcreate --physicalextentsize 1k $vg $dev1 $dev2 76check_vg_field_ $vg vg_extent_size 1.00k 77vgremove -ff $vg 78not vgcreate --physicalextentsize 3K $vg $dev1 $dev2 79not vgcreate --physicalextentsize 1024t $vg $dev1 $dev2 80#not vgcreate --physicalextentsize 1T $vg $dev1 $dev2 81# FIXME: vgcreate allows physicalextentsize larger than pv size! 82 83# Test default max_lv, max_pv, extent_size, alloc_policy, clustered 84vgcreate $vg $dev1 $dev2 85check_vg_field_ $vg vg_extent_size 4.00m 86check_vg_field_ $vg max_lv 0 87check_vg_field_ $vg max_pv 0 88check_vg_field_ $vg vg_attr "wz--n-" 89vgremove -ff $vg 90 91# Implicit pvcreate tests, test pvcreate options on vgcreate 92# --force, --yes, --metadata{size|copies|type}, --zero 93# --dataalignment[offset] 94pvremove $dev1 $dev2 95vgcreate --force --yes --zero y $vg $dev1 $dev2 96vgremove -f $vg 97pvremove -f $dev1 98 99for i in 0 1 2 3 100do 101# vgcreate (lvm2) succeeds writing LVM label at sector $i 102 vgcreate --labelsector $i $vg $dev1 103 dd if=$dev1 bs=512 skip=$i count=1 2>/dev/null | strings | grep -q LABELONE; 104 vgremove -f $vg 105 pvremove -f $dev1 106done 107 108# pvmetadatacopies 109for i in 1 2 110do 111 vgcreate --pvmetadatacopies $i $vg $dev1 112 check_pv_field_ $dev1 pv_mda_count $i 113 vgremove -f $vg 114 pvremove -f $dev1 115done 116not vgcreate --metadatacopies 0 $vg $dev1 117pvcreate --metadatacopies 1 $dev2 118vgcreate --pvmetadatacopies 0 $vg $dev1 $dev2 119check_pv_field_ $dev1 pv_mda_count 0 120check_pv_field_ $dev2 pv_mda_count 1 121vgremove -f $vg 122pvremove -f $dev1 123 124# metadatasize, dataalignment, dataalignmentoffset 125#COMM 'pvcreate sets data offset next to mda area' 126vgcreate --metadatasize 100k --dataalignment 100k $vg $dev1 127check_pv_field_ $dev1 pe_start 200.00k 128vgremove -f $vg 129pvremove -f $dev1 130 131# data area is aligned to 64k by default, 132# data area start is shifted by the specified alignment_offset 133pv_align="195.50k" 134vgcreate --metadatasize 128k --dataalignmentoffset 7s $vg $dev1 135check_pv_field_ $dev1 pe_start $pv_align 136vgremove -f $vg 137pvremove -f $dev1 138 139# metadatatype 140for i in 1 2 141do 142 vgcreate -M $i $vg $dev1 143 check_vg_field_ $vg vg_fmt lvm$i 144 vgremove -f $vg 145 pvremove -f $dev1 146done 147 148# vgcreate fails if pv belongs to existing vg 149vgcreate $vg1 $dev1 $dev2 150not vgcreate $vg2 $dev2 151vgremove -f $vg1 152pvremove -f $dev1 $dev2 153 154# all PVs exist in the VG after created 155pvcreate $dev1 156vgcreate $vg1 $dev1 $dev2 $dev3 157check_pv_field_ $dev1 vg_name $vg1 158check_pv_field_ $dev2 vg_name $vg1 159check_pv_field_ $dev3 vg_name $vg1 160vgremove -f $vg1 161pvremove -f $dev1 $dev2 $dev3 162