diff options
Diffstat (limited to 'test/shell/vgimportclone.sh')
-rw-r--r-- | test/shell/vgimportclone.sh | 134 |
1 files changed, 121 insertions, 13 deletions
diff --git a/test/shell/vgimportclone.sh b/test/shell/vgimportclone.sh index 9b1c121..13924c3 100644 --- a/test/shell/vgimportclone.sh +++ b/test/shell/vgimportclone.sh @@ -1,5 +1,6 @@ -#!/bin/sh -# Copyright (C) 2010-2011 Red Hat, Inc. All rights reserved. +#!/usr/bin/env bash + +# Copyright (C) 2010-2014 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 @@ -7,33 +8,140 @@ # # 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 +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +SKIP_WITH_LVMPOLLD=1 -. lib/test +. lib/inittest -aux prepare_devs 2 +aux prepare_devs 3 -vgcreate -c n --metadatasize 128k $vg1 "$dev1" +vgcreate $SHARED --metadatasize 128k $vg1 "$dev1" lvcreate -l100%FREE -n $lv1 $vg1 +# Test plain vgexport vgimport tools + +# Argument is needed +invalid vgexport +invalid vgimport +# Cannot combine -a and VG name +invalid vgexport -a $vg +invalid vgimport -a $vg1 +# Cannot export unknonw VG +fail vgexport ${vg1}-non +fail vgimport ${vg1}-non +# Cannot export VG with active volumes +fail vgexport $vg1 + +vgchange -an $vg1 +vgexport $vg1 +# Already exported +fail vgexport $vg1 + +vgimport $vg1 +# Already imported +fail vgimport $vg1 +vgchange -ay $vg1 + +# Since the devices file is using devnames as ids, +# it will not automatically know that dev2 is a +# duplicate after the dd, so we need to remove dev2 +# from df, then add it again after the dd. +if lvmdevices; then + lvmdevices --deldev "$dev2" +fi + # Clone the LUN dd if="$dev1" of="$dev2" bs=256K count=1 -aux notify_lvmetad "$dev2" + +# Requires -y to confirm prompt about adding +# a duplicate pvid. +if lvmdevices; then + lvmdevices -y --adddev "$dev2" +fi # Verify pvs works on each device to give us vgname +aux hide_dev "$dev2" check pv_field "$dev1" vg_name $vg1 +aux unhide_dev "$dev2" + +aux hide_dev "$dev1" check pv_field "$dev2" vg_name $vg1 +aux unhide_dev "$dev1" + +lvmdevices || true +pvs -a -o+uuid # Import the cloned PV to a new VG vgimportclone --basevgname $vg2 "$dev2" -# We need to re-scan *both* $dev1 and $dev2 since a PV, as far as lvmetad is -# concerned, can only live on a single device. With the last pvscan, we told it -# that PV from $dev1 now lives on $dev2, but in fact this is not true anymore, -# since we wrote a different PV over $dev2. -aux notify_lvmetad "$dev2" -aux notify_lvmetad "$dev1" +lvmdevices || true +pvs -a -o+uuid +vgs # Verify we can activate / deactivate the LV from both VGs lvchange -ay $vg1/$lv1 $vg2/$lv1 vgchange -an $vg1 $vg2 + +vgremove -ff $vg1 $vg2 + +pvremove "$dev1" +pvremove "$dev2" + +# Test vgimportclone with incomplete list of devs, and with nomda PV. +vgcreate $SHARED --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3" +lvcreate -l1 -an $vg1 +not vgimportclone -n newvgname "$dev1" +not vgimportclone -n newvgname "$dev2" +not vgimportclone -n newvgname "$dev3" +not vgimportclone -n newvgname "$dev1" "$dev2" +not vgimportclone -n newvgname "$dev1" "$dev3" +not vgimportclone -n newvgname "$dev2" "$dev3" +vgimportclone -n ${vg1}new "$dev1" "$dev2" "$dev3" +lvs ${vg1}new +vgremove -y ${vg1}new +pvremove "$dev1" +pvremove "$dev2" +pvremove "$dev3" + +# Test importing a non-duplicate pv using the existing vg name +vgcreate $vg1 "$dev1" +vgimportclone -n $vg1 "$dev1" +vgs ${vg1}1 +not vgs $vg1 +vgremove ${vg1}1 + +# Test importing a non-duplicate pv using the existing vg name +# Another existing VG is using the initial generated vgname with +# the "1" suffix, so "2" is used. +vgcreate $vg1 "$dev1" +vgcreate ${vg1}1 "$dev2" +vgimportclone -n $vg1 "$dev1" +vgs ${vg1}1 +vgs ${vg1}2 +vgremove ${vg1}1 +vgremove ${vg1}2 +pvremove "$dev1" +pvremove "$dev2" + +# Verify that if we provide the -n|--basevgname, +# the number suffix is not added unnecessarily. +vgcreate $SHARED --metadatasize 128k A${vg1}B "$dev1" + +# vg1B is not the same as Avg1B - we don't need number suffix +dd if="$dev1" of="$dev2" bs=256K count=1 +vgimportclone -n ${vg1}B "$dev2" +check pv_field "$dev2" vg_name ${vg1}B + +# Avg1 is not the same as Avg1B - we don't need number suffix +dd if="$dev1" of="$dev2" bs=256K count=1 +vgimportclone -n A${vg1} "$dev2" +check pv_field "$dev2" vg_name A${vg1} + +# Avg1B is the same as Avg1B - we need to add the number suffix +dd if="$dev1" of="$dev2" bs=256K count=1 +vgimportclone -n A${vg1}B "$dev2" +aux vgs +check pv_field "$dev2" vg_name A${vg1}B1 + +vgremove -ff A${vg1}B A${vg1}B1 |