2 # Copyright (C) 2007 Red Hat, Inc. All rights reserved.
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.
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
12 # Test vgsplit operation, including different LV types
21 # FIXME: paramaterize lvm1 vs lvm2 metadata; most of these tests should run
22 # fine with lvm1 metadata as well; for now, just add disks 5 and 6 as lvm1
26 # vgsplit can be done into a new or existing VG
31 # We can have PVs or LVs on the cmdline
35 COMM "vgsplit correctly splits single linear LV into $i VG ($j args)"
36 vgcreate $vg1 $dev1 $dev2
37 if [ $i = existing ]; then
38 vgcreate $vg2 $dev3 $dev4
40 lvcreate -l 4 -n $lv1 $vg1 $dev1
43 vgsplit $vg1 $vg2 $dev1
45 vgsplit -n $lv1 $vg1 $vg2
47 vg_validate_pvlv_counts_ $vg1 1 0 0
48 if [ $i = existing ]; then
49 aux vg_validate_pvlv_counts_ $vg2 3 1 0
51 aux vg_validate_pvlv_counts_ $vg2 1 1 0
57 COMM "vgsplit correctly splits single striped LV into $i VG ($j args)"
58 vgcreate $vg1 $dev1 $dev2
59 if [ $i = existing ]; then
60 vgcreate $vg2 $dev3 $dev4
62 lvcreate -l 4 -i 2 -n $lv1 $vg1 $dev1 $dev2
65 vgsplit $vg1 $vg2 $dev1 $dev2
67 vgsplit -n $lv1 $vg1 $vg2
69 if [ $i = existing ]; then
70 aux vg_validate_pvlv_counts_ $vg2 4 1 0
72 aux vg_validate_pvlv_counts_ $vg2 2 1 0
77 COMM "vgsplit correctly splits mirror LV into $i VG ($j args)"
78 vgcreate $vg1 $dev1 $dev2 $dev3
79 if [ $i = existing ]; then
82 lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3
85 vgsplit $vg1 $vg2 $dev1 $dev2 $dev3
87 vgsplit -n $lv1 $vg1 $vg2
89 if [ $i = existing ]; then
90 aux vg_validate_pvlv_counts_ $vg2 4 1 0
92 aux vg_validate_pvlv_counts_ $vg2 3 1 0
97 COMM "vgsplit correctly splits origin and snapshot LV into $i VG ($j args)"
98 vgcreate $vg1 $dev1 $dev2
99 if [ $i = existing ]; then
100 vgcreate $vg2 $dev3 $dev4
102 lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2
103 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
106 vgsplit $vg1 $vg2 $dev1 $dev2
108 vgsplit -n $lv1 $vg1 $vg2
110 if [ $i = existing ]; then
111 aux vg_validate_pvlv_counts_ $vg2 4 2 1
113 aux vg_validate_pvlv_counts_ $vg2 2 2 1
115 lvremove -f $vg2/$lv2
116 lvremove -f $vg2/$lv1
119 COMM "vgsplit correctly splits linear LV but not snap+origin LV into $i VG ($j args)"
120 vgcreate $vg1 $dev1 $dev2
121 if [ $i = existing ]; then
124 lvcreate -l 64 -i 2 -n $lv1 $vg1
125 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
127 lvcreate -l 64 -n $lv3 $vg1 $dev4
130 vgsplit $vg1 $vg2 $dev4
132 vgsplit -n $lv3 $vg1 $vg2
134 if [ $i = existing ]; then
135 aux vg_validate_pvlv_counts_ $vg2 2 1 0
136 aux vg_validate_pvlv_counts_ $vg1 2 2 1
138 aux vg_validate_pvlv_counts_ $vg2 1 1 0
139 aux vg_validate_pvlv_counts_ $vg1 2 2 1
141 lvremove -f $vg1/$lv2
142 lvremove -f $vg1/$lv1
143 lvremove -f $vg2/$lv3
147 COMM "vgsplit correctly splits linear LV but not mirror LV into $i VG ($j args)"
148 vgcreate $vg1 $dev1 $dev2 $dev3
149 if [ $i = existing ]; then
152 lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3
154 lvcreate -l 64 -n $lv2 $vg1 $dev4
160 vgsplit $vg1 $vg2 $dev4
162 vgsplit -n $lv2 $vg1 $vg2
164 if [ $i = existing ]; then
165 aux vg_validate_pvlv_counts_ $vg1 3 1 0
166 aux vg_validate_pvlv_counts_ $vg2 2 1 0
171 aux vg_validate_pvlv_counts_ $vg1 3 1 0
172 aux vg_validate_pvlv_counts_ $vg2 1 1 0
174 lvremove -f $vg1/$lv1
175 lvremove -f $vg2/$lv2
183 # Test more complex setups where the code has to find associated PVs and
184 # LVs to split the VG correctly
186 COMM "vgsplit fails splitting 3 striped LVs into VG when only 1 LV specified"
187 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
188 lvcreate -l 4 -n $lv1 -i 2 $vg1 $dev1 $dev2
189 lvcreate -l 4 -n $lv2 -i 2 $vg1 $dev2 $dev3
190 lvcreate -l 4 -n $lv3 -i 2 $vg1 $dev3 $dev4
192 not vgsplit -n $lv1 $vg1 $vg2
195 COMM "vgsplit fails splitting one LV with 2 snapshots, only origin LV specified"
196 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
197 lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2
198 lvcreate -l 4 -n $lv2 -s $vg1/$lv1
199 lvcreate -l 4 -n $lv3 -s $vg1/$lv1
200 vg_validate_pvlv_counts_ $vg1 4 3 2
202 not vgsplit -n $lv1 $vg1 $vg2;
203 lvremove -f $vg1/$lv2
204 lvremove -f $vg1/$lv3
205 lvremove -f $vg1/$lv1
208 COMM "vgsplit fails splitting one LV with 2 snapshots, only snapshot LV specified"
209 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
210 lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2
211 lvcreate -l 4 -n $lv2 -s $vg1/$lv1
212 lvcreate -l 4 -n $lv3 -s $vg1/$lv1
213 vg_validate_pvlv_counts_ $vg1 4 3 2
215 not vgsplit -n $lv2 $vg1 $vg2
216 lvremove -f $vg1/$lv2
217 lvremove -f $vg1/$lv3
218 lvremove -f $vg1/$lv1
221 COMM "vgsplit fails splitting one mirror LV, only one PV specified"
222 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
223 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3
224 vg_validate_pvlv_counts_ $vg1 4 1 0
226 not vgsplit $vg1 $vg2 $dev2
229 COMM "vgsplit fails splitting 1 mirror + 1 striped LV, only striped LV specified"
230 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
231 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3
232 lvcreate -l 16 -n $lv2 -i 2 $vg1 $dev3 $dev4
233 vg_validate_pvlv_counts_ $vg1 4 2 0
235 not vgsplit -n $lv2 $vg1 $vg2 2>err
239 # Verify vgsplit rejects active LVs only when active LVs involved in split
241 COMM "vgsplit fails, active mirror involved in split"
242 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
243 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3
244 lvcreate -l 16 -n $lv2 $vg1 $dev4
245 lvchange -an $vg1/$lv2
246 vg_validate_pvlv_counts_ $vg1 4 2 0
247 not vgsplit -n $lv1 $vg1 $vg2;
248 vg_validate_pvlv_counts_ $vg1 4 2 0
251 COMM "vgsplit succeeds, active mirror not involved in split"
252 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
253 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3
254 lvcreate -l 16 -n $lv2 $vg1 $dev4
255 lvchange -an $vg1/$lv2
256 vg_validate_pvlv_counts_ $vg1 4 2 0
257 vgsplit -n $lv2 $vg1 $vg2
258 vg_validate_pvlv_counts_ $vg1 3 1 0
259 vg_validate_pvlv_counts_ $vg2 1 1 0
263 COMM "vgsplit fails, active snapshot involved in split"
264 vgcreate $vg1 $dev1 $dev2 $dev3 $dev4
265 lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2
266 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
267 lvcreate -l 64 -i 2 -n $lv3 $vg1 $dev3 $dev4
268 lvchange -an $vg1/$lv3
269 vg_validate_pvlv_counts_ $vg1 4 3 1
270 not vgsplit -n $lv2 $vg1 $vg2;
271 vg_validate_pvlv_counts_ $vg1 4 3 1
272 lvremove -f $vg1/$lv2
275 COMM "vgsplit succeeds, active snapshot not involved in split"
276 vgcreate $vg1 $dev1 $dev2 $dev3
277 lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2
278 lvcreate -l 4 -s -n $lv2 $vg1/$lv1
280 lvcreate -l 64 -n $lv3 $vg1 $dev4
281 lvchange -an $vg1/$lv3
282 vg_validate_pvlv_counts_ $vg1 4 3 1
283 vgsplit -n $lv3 $vg1 $vg2
284 vg_validate_pvlv_counts_ $vg1 3 2 1
285 vg_validate_pvlv_counts_ $vg2 1 1 0
287 lvremove -f $vg1/$lv2