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