1#!/bin/sh
2# Copyright (C) 2007-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 vgsplit command options for validity
13
14. ./test-utils.sh
15
16aux prepare_devs 5
17
18for mdatype in 1 2
19do
20
21pvcreate -M$mdatype $devs
22
23# ensure name order does not matter
24# NOTE: if we're using lvm1, we must use -M on vgsplit
25vgcreate -M$mdatype $vg1 $devs
26vgsplit -M$mdatype $vg1 $vg2 $dev1
27vgremove $vg1
28vgremove $vg2
29vgcreate -M$mdatype $vg2 $devs
30vgsplit -M$mdatype $vg2 $vg1 $dev1
31vgremove $vg1
32vgremove $vg2
33
34# vgsplit accepts new vg as destination of split
35# lvm1 -- bz244792
36vgcreate -M$mdatype $vg1 $devs
37vgsplit $vg1 $vg2 $dev1 1>err
38grep "New volume group \"$vg2\" successfully split from \"$vg1\"" err
39vgremove $vg1
40vgremove $vg2
41
42# vgsplit accepts existing vg as destination of split
43vgcreate -M$mdatype $vg1 $dev1 $dev2
44vgcreate -M$mdatype $vg2 $dev3 $dev4
45vgsplit $vg1 $vg2 $dev1 1>err
46grep "Existing volume group \"$vg2\" successfully split from \"$vg1\"" err
47vgremove $vg1
48vgremove $vg2
49
50# vgsplit accepts --maxphysicalvolumes 128 on new VG
51vgcreate -M$mdatype $vg1 $dev1 $dev2
52vgsplit --maxphysicalvolumes 128 $vg1 $vg2 $dev1
53check_vg_field_ $vg2 max_pv 128
54vgremove $vg1
55vgremove $vg2
56
57# vgsplit accepts --maxlogicalvolumes 128 on new VG
58vgcreate -M$mdatype $vg1 $dev1 $dev2
59vgsplit --maxlogicalvolumes 128 $vg1 $vg2 $dev1
60check_vg_field_ $vg2 max_lv 128
61vgremove $vg1
62vgremove $vg2
63
64# vgsplit rejects split because max_pv of destination would be exceeded
65vgcreate -M$mdatype --maxphysicalvolumes 2 $vg1 $dev1 $dev2
66vgcreate -M$mdatype --maxphysicalvolumes 2 $vg2 $dev3 $dev4
67not vgsplit $vg1 $vg2 $dev1 2>err;
68grep "^  Maximum number of physical volumes (2) exceeded" err
69vgremove $vg2
70vgremove $vg1
71
72# vgsplit rejects split because maxphysicalvolumes given with existing vg
73vgcreate -M$mdatype --maxphysicalvolumes 2 $vg1 $dev1 $dev2
74vgcreate -M$mdatype --maxphysicalvolumes 2 $vg2 $dev3 $dev4
75not vgsplit --maxphysicalvolumes 2 $vg1 $vg2 $dev1 2>err;
76grep "^  Volume group \"$vg2\" exists, but new VG option specified" err
77vgremove $vg2
78vgremove $vg1
79
80# vgsplit rejects split because maxlogicalvolumes given with existing vg
81vgcreate -M$mdatype --maxlogicalvolumes 2 $vg1 $dev1 $dev2
82vgcreate -M$mdatype --maxlogicalvolumes 2 $vg2 $dev3 $dev4
83not vgsplit --maxlogicalvolumes 2 $vg1 $vg2 $dev1 2>err
84grep "^  Volume group \"$vg2\" exists, but new VG option specified" err
85vgremove $vg2
86vgremove $vg1
87
88# vgsplit rejects split because alloc given with existing vg
89vgcreate -M$mdatype --alloc cling $vg1 $dev1 $dev2
90vgcreate -M$mdatype --alloc cling $vg2 $dev3 $dev4
91not vgsplit --alloc cling $vg1 $vg2 $dev1 2>err;
92grep "^  Volume group \"$vg2\" exists, but new VG option specified" err
93vgremove $vg2
94vgremove $vg1
95
96# vgsplit rejects split because clustered given with existing vg
97vgcreate -M$mdatype --clustered n $vg1 $dev1 $dev2
98vgcreate -M$mdatype --clustered n $vg2 $dev3 $dev4
99not vgsplit --clustered n $vg1 $vg2 $dev1 2>err
100grep "^  Volume group \"$vg2\" exists, but new VG option specified" err
101vgremove $vg2
102vgremove $vg1
103
104# vgsplit rejects vg with active lv
105pvcreate -M$mdatype -ff $dev3 $dev4
106vgcreate -M$mdatype $vg1 $dev1 $dev2
107vgcreate -M$mdatype $vg2 $dev3 $dev4
108lvcreate -l 4 -n $lv1 $vg1
109not vgsplit $vg1 $vg2 $dev1 2>err;
110grep "^  Logical volumes in \"$vg1\" must be inactive\$" err
111vgremove -f $vg2
112vgremove -f $vg1
113
114# vgsplit rejects split because max_lv is exceeded
115vgcreate -M$mdatype --maxlogicalvolumes 2 $vg1 $dev1 $dev2
116vgcreate -M$mdatype --maxlogicalvolumes 2 $vg2 $dev3 $dev4
117lvcreate -l 4 -n $lv1 $vg1
118lvcreate -l 4 -n $lv2 $vg1
119lvcreate -l 4 -n $lv3 $vg2
120vgchange -an $vg1
121vgchange -an $vg2
122not vgsplit $vg1 $vg2 $dev1 2>err;
123grep "^  Maximum number of logical volumes (2) exceeded" err
124vgremove -f $vg2
125vgremove -f $vg1
126
127# vgsplit verify default - max_lv attribute from new VG is same as source VG" \
128vgcreate -M$mdatype $vg1 $dev1 $dev2
129lvcreate -l 4 -n $lv1 $vg1
130vgchange -an $vg1
131vgsplit $vg1 $vg2 $dev1
132compare_vg_field_ $vg1 $vg2 max_lv
133vgremove -f $vg2
134vgremove -f $vg1
135
136# vgsplit verify default - max_pv attribute from new VG is same as source VG" \
137vgcreate -M$mdatype $vg1 $dev1 $dev2
138lvcreate -l 4 -n $lv1 $vg1
139vgchange -an $vg1
140vgsplit $vg1 $vg2 $dev1
141compare_vg_field_ $vg1 $vg2 max_pv
142vgremove -f $vg2
143vgremove -f $vg1
144
145# vgsplit verify default - vg_fmt attribute from new VG is same as source VG" \
146vgcreate -M$mdatype $vg1 $dev1 $dev2
147lvcreate -l 4 -n $lv1 $vg1
148vgchange -an $vg1
149vgsplit $vg1 $vg2 $dev1
150compare_vg_field_ $vg1 $vg2 vg_fmt
151vgremove -f $vg2
152vgremove -f $vg1
153
154# vgsplit rejects split because PV not in VG
155vgcreate -M$mdatype $vg1 $dev1 $dev2
156vgcreate -M$mdatype $vg2 $dev3 $dev4
157lvcreate -l 4 -n $lv1 $vg1
158lvcreate -l 4 -n $lv2 $vg1
159vgchange -an $vg1
160not vgsplit $vg1 $vg2 $dev3 2>err;
161vgremove -f $vg2
162vgremove -f $vg1
163done
164
165# ONLY LVM2 metadata
166# setup PVs" '
167pvcreate --metadatacopies 0 $dev5
168
169# vgsplit rejects to give away pv with the last mda copy
170vgcreate $vg1 $dev5 $dev2
171lvcreate -l 10 -n $lv1  $vg1
172lvchange -an $vg1/$lv1
173vg_validate_pvlv_counts_ $vg1 2 1 0
174not vgsplit  $vg1 $vg2 $dev5;
175vg_validate_pvlv_counts_ $vg1 2 1 0
176vgremove -ff $vg1
177
178# vgsplit rejects split because metadata types differ
179pvcreate -ff -M1 $dev3 $dev4
180pvcreate -ff $dev1 $dev2
181vgcreate -M1 $vg1 $dev3 $dev4
182vgcreate $vg2 $dev1 $dev2
183not vgsplit $vg1 $vg2 $dev3 2>err;
184grep "^  Metadata types differ" err
185vgremove $vg2
186vgremove $vg1
187
188