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