2 # Copyright (C) 2010 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
14 # convert from linear to 2-way mirror
16 lvcreate -l2 -n $lv1 $vg $dev1
17 lvconvert -i1 -m+1 $vg/$lv1 $dev2 $dev3:0-1
18 check mirror $vg $lv1 $dev3
20 # convert from 2-way mirror to linear
22 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
23 lvconvert -m-1 $vg/$lv1
26 # and now try removing a specific leg (bz453643)
27 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
28 lvconvert -m0 $vg/$lv1 $dev2
29 check lv_on $vg $lv1 $dev1
32 # convert from disklog to corelog, active
34 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
35 lvconvert -f --mirrorlog core $vg/$lv1
36 check mirror $vg $lv1 core
39 # convert from corelog to disklog, active
41 lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
42 lvconvert --mirrorlog disk $vg/$lv1 $dev3:0-1
43 check mirror $vg $lv1 $dev3
46 # bz192865: lvconvert log of an inactive mirror lv
47 # convert from disklog to corelog, inactive
49 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
51 echo y | lvconvert -f --mirrorlog core $vg/$lv1
52 check mirror $vg $lv1 core
55 # convert from corelog to disklog, inactive
57 lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
59 lvconvert --mirrorlog disk $vg/$lv1 $dev3:0-1
60 check mirror $vg $lv1 $dev3
63 # convert linear to 2-way mirror with 1 PV
65 lvcreate -l2 -n $lv1 $vg $dev1
66 not lvconvert -m+1 --mirrorlog core $vg/$lv1 $dev1
69 # Start w/ 3-way mirror
70 # Test pulling primary image before mirror in-sync (should fail)
71 # Test pulling primary image after mirror in-sync (should work)
72 # Test that the correct devices remain in the mirror
73 lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev4 $dev3:0
75 # This is somewhat timing dependent - sync /could/ finish before
76 # we get a chance to have this command fail
77 should not lvconvert -m-1 $vg/$lv1 $dev1
79 lvconvert $vg/$lv1 # wait
80 lvconvert -m2 $vg/$lv1 $dev1 $dev2 $dev4 $dev3:0 # If the above "should" failed...
82 lvconvert -m-1 $vg/$lv1 $dev1
83 check mirror_images_on $lv1 $dev2 $dev4
84 lvconvert -m-1 $vg/$lv1 $dev2
86 check lv_on $vg $lv1 $dev4
88 # No parallel lvconverts on a single LV please
91 lvcreate -l5 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
93 check mirror_legs $vg $lv1 2
94 lvconvert -m+1 -b $vg/$lv1 $dev4
96 # Next convert should fail b/c we can't have 2 at once
97 should not lvconvert -m+1 $vg/$lv1 $dev5
98 lvconvert $vg/$lv1 # wait
99 lvconvert -m2 $vg/$lv1 # In case the above "should" actually failed
101 check mirror $vg $lv1 $dev3
102 check mirror_no_temporaries $vg $lv1
103 check mirror_legs $vg $lv1 3
105 # add 1 mirror to core log mirror, but
106 # implicitly keep log as 'core'
108 lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
109 lvconvert -m +1 -i1 $vg/$lv1
111 check mirror $vg $lv1 core
112 check mirror_no_temporaries $vg $lv1
113 check mirror_legs $vg $lv1 3
115 # remove 1 mirror from corelog'ed mirror; should retain 'core' log type
117 lvcreate -l2 -m2 --corelog -n $lv1 $vg
118 lvconvert -m -1 -i1 $vg/$lv1
120 check mirror $vg $lv1 core
121 check mirror_no_temporaries $vg $lv1
122 check mirror_legs $vg $lv1 2
124 # add 1 mirror then add 1 more mirror during conversion
125 # FIXME this has been explicitly forbidden?
127 #lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
128 #lvconvert -m+1 -b $vg/$lv1 $dev4
129 #lvconvert -m+1 $vg/$lv1 $dev5
131 #check mirror $vg $lv1 $dev3
132 #check mirror_no_temporaries $vg $lv1
133 #check mirror_legs $vg $lv1 4
135 # Linear to mirror with mirrored log using --alloc anywhere
137 lvcreate -l2 -n $lv1 $vg $dev1
138 lvconvert -m +1 --mirrorlog mirrored $vg/$lv1 $dev1 $dev2 --alloc anywhere
139 should check mirror $vg $lv1
141 # convert inactive mirror and start polling
143 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
144 lvchange -an $vg/$lv1
145 lvconvert -m+1 $vg/$lv1 $dev4
146 lvchange -ay $vg/$lv1
147 lvconvert $vg/$lv1 # wait
148 check mirror $vg $lv1 $dev3
149 check mirror_no_temporaries $vg $lv1
151 # ---------------------------------------------------------------------
152 # removal during conversion
154 # "remove newly added mirror"
156 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
157 lvconvert -m+1 -b $vg/$lv1 $dev4
158 lvconvert -m-1 $vg/$lv1 $dev4
159 lvconvert $vg/$lv1 # wait
161 check mirror $vg $lv1 $dev3
162 check mirror_no_temporaries $vg $lv1
163 check mirror_legs $vg $lv1 2
165 # "remove one of newly added mirrors"
167 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
168 lvconvert -m+2 -b $vg/$lv1 $dev4 $dev5
169 lvconvert -m-1 $vg/$lv1 $dev4
170 lvconvert $vg/$lv1 # wait
172 check mirror $vg $lv1 $dev3
173 check mirror_no_temporaries $vg $lv1
174 check mirror_legs $vg $lv1 3
176 # "remove from original mirror (the original is still mirror)"
178 lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev5 $dev3:0
179 lvconvert -m+1 -b $vg/$lv1 $dev4
180 lvconvert -m-1 $vg/$lv1 $dev2
183 check mirror $vg $lv1 $dev3
184 check mirror_no_temporaries $vg $lv1
185 check mirror_legs $vg $lv1 3
187 # "remove from original mirror (the original becomes linear)"
189 lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
190 lvconvert -m+1 -b $vg/$lv1 $dev4
191 lvconvert -m-1 $vg/$lv1 $dev2
194 check mirror $vg $lv1 $dev3
195 check mirror_no_temporaries $vg $lv1
196 check mirror_legs $vg $lv1 2
198 # ---------------------------------------------------------------------
200 # "rhbz440405: lvconvert -m0 incorrectly fails if all PEs allocated"
202 lvcreate -l`pvs --noheadings -ope_count $dev1` -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
203 while [ `lvs --noheadings -o copy_percent $vg/$lv1` != "100.00" ]; do sleep 1; done
204 lvconvert -m0 $vg/$lv1 $dev1
205 check linear $vg $lv1
207 # "rhbz264241: lvm mirror doesn't lose it's "M" --nosync attribute after being down and the up converted"
209 lvcreate -l2 -m1 -n$lv1 --nosync $vg
210 lvconvert -m0 $vg/$lv1
211 lvconvert -m1 $vg/$lv1
212 lvs --noheadings -o attr $vg/$lv1 | grep '^ *m'
214 # lvconvert from linear (on multiple PVs) to mirror
216 lvcreate -l 8 -n $lv1 $vg $dev1:0-3 $dev2:0-3
217 lvconvert -m1 $vg/$lv1
219 should check mirror $vg $lv1
220 check mirror_legs $vg $lv1 2
222 # BZ 463272: disk log mirror convert option is lost if downconvert option is also given
224 lvcreate -l1 -m2 --corelog -n $lv1 $vg $dev1 $dev2 $dev3
225 while [ `lvs --noheadings -o copy_percent $vg/$lv1` != "100.00" ]; do sleep 1; done
226 lvconvert -m1 --mirrorlog disk $vg/$lv1
227 check mirror $vg $lv1
228 not check mirror $vg $lv1 core
231 # add mirror and disk log
233 # "add 1 mirror and disk log"
235 lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
237 # FIXME on next line, specifying $dev3:0 $dev4 (i.e log device first) fails (!)
238 lvconvert -m+1 --mirrorlog disk -i1 $vg/$lv1 $dev4 $dev3:0
240 check mirror $vg $lv1 $dev3
241 check mirror_no_temporaries $vg $lv1
242 check mirror_legs $vg $lv1 3