mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
ea4c0ea34f
In those places where mirrors were being created while assuming a default segment type of "mirror", we include the '--type mirror' argument to explicitly set the segment type. This will preserve the mirror testing that is performed even though the default mirroring segment type is now "raid1".
285 lines
8.3 KiB
Bash
285 lines
8.3 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions
|
|
# of the GNU General Public License v.2.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
# Test vgsplit operation, including different LV types
|
|
|
|
. lib/test
|
|
|
|
COMM() {
|
|
LAST_TEST="$@"
|
|
}
|
|
|
|
create_vg_() {
|
|
vgcreate -s 64k "$@"
|
|
}
|
|
|
|
aux prepare_pvs 5 10
|
|
# FIXME: paramaterize lvm1 vs lvm2 metadata; most of these tests should run
|
|
# fine with lvm1 metadata as well; for now, just add disks 5 and 6 as lvm1
|
|
# metadata
|
|
|
|
#
|
|
# vgsplit can be done into a new or existing VG
|
|
#
|
|
for i in new existing
|
|
do
|
|
#
|
|
# We can have PVs or LVs on the cmdline
|
|
#
|
|
for j in PV LV
|
|
do
|
|
COMM "vgsplit correctly splits single linear LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2"
|
|
test $i = existing && create_vg_ $vg2 "$dev3" "$dev4"
|
|
|
|
lvcreate -an -Zn -l 4 -n $lv1 $vg1 "$dev1"
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev1"
|
|
else
|
|
vgsplit -n $lv1 $vg1 $vg2
|
|
fi
|
|
check pvlv_counts $vg1 1 0 0
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 3 1 0
|
|
else
|
|
check pvlv_counts $vg2 1 1 0
|
|
fi
|
|
lvremove -f $vg2/$lv1
|
|
vgremove -f $vg2 $vg1
|
|
|
|
COMM "vgsplit correctly splits single striped LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2"
|
|
test $i = existing && create_vg_ $vg2 "$dev3" "$dev4"
|
|
|
|
lvcreate -an -Zn -l 4 -i 2 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev1" "$dev2"
|
|
else
|
|
vgsplit -n $lv1 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 4 1 0
|
|
else
|
|
check pvlv_counts $vg2 2 1 0
|
|
fi
|
|
lvremove -f $vg2/$lv1
|
|
vgremove -f $vg2
|
|
|
|
COMM "vgsplit correctly splits mirror LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3"
|
|
test $i = existing && create_vg_ $vg2 "$dev4"
|
|
|
|
lvcreate -an -Zn -l 64 --type mirror -m1 -n $lv1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev1" "$dev2" "$dev3"
|
|
else
|
|
vgsplit -n $lv1 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 4 1 0
|
|
else
|
|
check pvlv_counts $vg2 3 1 0
|
|
fi
|
|
lvremove -f $vg2/$lv1
|
|
vgremove -f $vg2
|
|
# FIXME: ensure split /doesn't/ work when not all devs of mirror specified
|
|
|
|
COMM "vgsplit correctly splits mirror LV with mirrored log into $i VG ($j args)"
|
|
create_vg_ -c n $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
test $i = existing && create_vg_ -c n $vg2 "$dev5"
|
|
|
|
lvcreate -an -Zn -l 64 --mirrorlog mirrored --type mirror -m1 -n $lv1 $vg1 \
|
|
"$dev1" "$dev2" "$dev3" "$dev4"
|
|
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
else
|
|
vgsplit -n $lv1 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 5 1 0
|
|
else
|
|
check pvlv_counts $vg2 4 1 0
|
|
fi
|
|
lvremove -f $vg2/$lv1
|
|
vgremove -f $vg2
|
|
# FIXME: ensure split /doesn't/ work when not all devs of mirror specified
|
|
|
|
COMM "vgsplit correctly splits origin and snapshot LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2"
|
|
test $i = existing && create_vg_ $vg2 "$dev3" "$dev4"
|
|
|
|
lvcreate -aey -l 64 -i 2 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
|
|
vgchange -an $vg1
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev1" "$dev2"
|
|
else
|
|
vgsplit -n $lv1 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 4 2 1
|
|
else
|
|
check pvlv_counts $vg2 2 2 1
|
|
fi
|
|
lvremove -f $vg2/$lv2
|
|
lvremove -f $vg2/$lv1
|
|
vgremove -f $vg2
|
|
|
|
COMM "vgsplit correctly splits linear LV but not snap+origin LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2"
|
|
test $i = existing && create_vg_ $vg2 "$dev3"
|
|
|
|
lvcreate -aey -l 64 -i 2 -n $lv1 $vg1
|
|
lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
|
|
vgextend $vg1 "$dev4"
|
|
lvcreate -l 64 -n $lv3 $vg1 "$dev4"
|
|
vgchange -an $vg1
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev4"
|
|
else
|
|
vgsplit -n $lv3 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg2 2 1 0
|
|
check pvlv_counts $vg1 2 2 1
|
|
else
|
|
check pvlv_counts $vg2 1 1 0
|
|
check pvlv_counts $vg1 2 2 1
|
|
fi
|
|
lvremove -f $vg1/$lv2
|
|
lvremove -f $vg1/$lv1 $vg2/$lv3
|
|
vgremove -f $vg1 $vg2
|
|
|
|
COMM "vgsplit correctly splits linear LV but not mirror LV into $i VG ($j args)"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3"
|
|
test $i = existing && create_vg_ $vg2 "$dev5"
|
|
|
|
lvcreate -an -Zn -l 64 --type mirror -m1 -n $lv1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
vgextend $vg1 "$dev4"
|
|
lvcreate -an -Zn -l 64 -n $lv2 $vg1 "$dev4"
|
|
if [ $j = PV ]; then
|
|
vgsplit $vg1 $vg2 "$dev4"
|
|
else
|
|
vgsplit -n $lv2 $vg1 $vg2
|
|
fi
|
|
if [ $i = existing ]; then
|
|
check pvlv_counts $vg1 3 1 0
|
|
check pvlv_counts $vg2 2 1 0
|
|
else
|
|
check pvlv_counts $vg1 3 1 0
|
|
check pvlv_counts $vg2 1 1 0
|
|
fi
|
|
vgremove -f $vg1 $vg2
|
|
|
|
done
|
|
done
|
|
|
|
#
|
|
# Test more complex setups where the code has to find associated PVs and
|
|
# LVs to split the VG correctly
|
|
#
|
|
COMM "vgsplit fails splitting 3 striped LVs into VG when only 1 LV specified"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -an -Zn -l 4 -n $lv1 -i 2 $vg1 "$dev1" "$dev2"
|
|
lvcreate -an -Zn -l 4 -n $lv2 -i 2 $vg1 "$dev2" "$dev3"
|
|
lvcreate -an -Zn -l 4 -n $lv3 -i 2 $vg1 "$dev3" "$dev4"
|
|
not vgsplit -n $lv1 $vg1 $vg2
|
|
vgremove -f $vg1
|
|
|
|
COMM "vgsplit fails splitting one LV with 2 snapshots, only origin LV specified"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -aey -l 16 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
lvcreate -l 4 -n $lv2 -s $vg1/$lv1 "$dev3"
|
|
lvcreate -l 4 -n $lv3 -s $vg1/$lv1 "$dev4"
|
|
check pvlv_counts $vg1 4 3 2
|
|
vgchange -an $vg1
|
|
not vgsplit -n $lv1 $vg1 $vg2;
|
|
lvremove -f $vg1/$lv2 $vg1/$lv3
|
|
lvremove -f $vg1/$lv1
|
|
vgremove -f $vg1
|
|
|
|
COMM "vgsplit fails splitting one LV with 2 snapshots, only snapshot LV specified"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -aey -l 16 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
lvcreate -l 4 -n $lv2 -s $vg1/$lv1 "$dev3"
|
|
lvcreate -l 4 -n $lv3 -s $vg1/$lv1 "$dev4"
|
|
check pvlv_counts $vg1 4 3 2
|
|
vgchange -an $vg1
|
|
not vgsplit -n $lv2 $vg1 $vg2
|
|
lvremove -f $vg1/$lv2 $vg1/$lv3
|
|
lvremove -f $vg1/$lv1
|
|
vgremove -f $vg1
|
|
|
|
COMM "vgsplit fails splitting one mirror LV, only one PV specified"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -an -Zn -l 16 -n $lv1 --type mirror -m1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
check pvlv_counts $vg1 4 1 0
|
|
not vgsplit $vg1 $vg2 "$dev2"
|
|
vgremove -ff $vg1
|
|
|
|
COMM "vgsplit fails splitting 1 mirror + 1 striped LV, only striped LV specified"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -an -Zn -l 16 -n $lv1 --type mirror -m1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
lvcreate -an -Zn -l 16 -n $lv2 -i 2 $vg1 "$dev3" "$dev4"
|
|
check pvlv_counts $vg1 4 2 0
|
|
not vgsplit -n $lv2 $vg1 $vg2 2>err
|
|
vgremove -f $vg1
|
|
|
|
#
|
|
# Verify vgsplit rejects active LVs only when active LVs involved in split
|
|
#
|
|
COMM "vgsplit fails, active mirror involved in split"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -aey -l 16 -n $lv1 --type mirror -m1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
lvcreate -l 16 -n $lv2 $vg1 "$dev4"
|
|
lvchange -an $vg1/$lv2
|
|
check pvlv_counts $vg1 4 2 0
|
|
not vgsplit -n $lv1 $vg1 $vg2;
|
|
check pvlv_counts $vg1 4 2 0
|
|
vgremove -f $vg1
|
|
|
|
COMM "vgsplit succeeds, active mirror not involved in split"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -aey -l 16 -n $lv1 --type mirror -m1 $vg1 "$dev1" "$dev2" "$dev3"
|
|
lvcreate -l 16 -n $lv2 $vg1 "$dev4"
|
|
lvchange -an $vg1/$lv2
|
|
check pvlv_counts $vg1 4 2 0
|
|
vgsplit -n $lv2 $vg1 $vg2
|
|
check pvlv_counts $vg1 3 1 0
|
|
check pvlv_counts $vg2 1 1 0
|
|
vgremove -f $vg1 $vg2
|
|
|
|
COMM "vgsplit fails, active snapshot involved in split"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3" "$dev4"
|
|
lvcreate -aey -l 64 -i 2 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1
|
|
lvcreate -an -Zn -l 64 -i 2 -n $lv3 $vg1 "$dev3" "$dev4"
|
|
check pvlv_counts $vg1 4 3 1
|
|
not vgsplit -n $lv2 $vg1 $vg2;
|
|
check pvlv_counts $vg1 4 3 1
|
|
lvremove -f $vg1/$lv2
|
|
vgremove -f $vg1
|
|
|
|
COMM "vgsplit succeeds, active snapshot not involved in split"
|
|
create_vg_ $vg1 "$dev1" "$dev2" "$dev3"
|
|
lvcreate -aey -l 64 -i 2 -n $lv1 $vg1 "$dev1" "$dev2"
|
|
lvcreate -l 4 -s -n $lv2 $vg1/$lv1
|
|
vgextend $vg1 "$dev4"
|
|
lvcreate -an -Zn -l 64 -n $lv3 $vg1 "$dev4"
|
|
check pvlv_counts $vg1 4 3 1
|
|
vgsplit -n $lv3 $vg1 $vg2
|
|
check pvlv_counts $vg1 3 2 1
|
|
check pvlv_counts $vg2 1 1 0
|
|
vgchange -an $vg1
|
|
lvremove -f $vg1/$lv2
|
|
vgremove -f $vg1 $vg2
|