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