2017-07-02 22:38:32 +03:00
#!/usr/bin/env bash
2014-03-31 00:45:02 +04:00
# Copyright (C) 2010-2014 Red Hat, Inc. All rights reserved.
2011-04-21 21:03:38 +04:00
#
# 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,
2016-01-21 13:49:46 +03:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2011-04-21 21:03:38 +04:00
2015-10-27 17:10:06 +03:00
SKIP_WITH_LVMPOLLD = 1
2011-04-21 21:03:38 +04:00
2015-10-27 17:10:06 +03:00
. lib/inittest
2015-05-09 02:59:18 +03:00
2023-01-05 23:47:49 +03:00
aux prepare_devs 3
2011-04-21 21:03:38 +04:00
2018-05-25 23:26:30 +03:00
vgcreate $SHARED --metadatasize 128k $vg1 " $dev1 "
2011-04-21 21:03:38 +04:00
lvcreate -l100%FREE -n $lv1 $vg1
2014-03-24 12:58:29 +04:00
# Test plain vgexport vgimport tools
2014-03-31 00:45:02 +04:00
# 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
2014-03-24 12:58:29 +04:00
vgchange -an $vg1
vgexport $vg1
2014-03-31 00:45:02 +04:00
# Already exported
fail vgexport $vg1
2014-03-24 12:58:29 +04:00
vgimport $vg1
2014-03-31 00:45:02 +04:00
# Already imported
fail vgimport $vg1
2014-03-24 12:58:29 +04:00
vgchange -ay $vg1
2021-08-20 23:06:33 +03:00
# 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
2011-04-21 21:03:38 +04:00
# Clone the LUN
2012-03-16 17:00:05 +04:00
dd if = " $dev1 " of = " $dev2 " bs = 256K count = 1
2011-04-21 21:03:38 +04:00
2021-08-20 23:06:33 +03:00
# Requires -y to confirm prompt about adding
# a duplicate pvid.
if lvmdevices; then
lvmdevices -y --adddev " $dev2 "
fi
2011-04-21 21:03:38 +04:00
# Verify pvs works on each device to give us vgname
2014-03-20 02:32:25 +04:00
aux hide_dev " $dev2 "
2012-03-16 17:00:05 +04:00
check pv_field " $dev1 " vg_name $vg1
2014-03-20 02:32:25 +04:00
aux unhide_dev " $dev2 "
2013-05-27 16:48:45 +04:00
2014-03-20 02:32:25 +04:00
aux hide_dev " $dev1 "
2012-03-16 17:00:05 +04:00
check pv_field " $dev2 " vg_name $vg1
2014-03-20 02:32:25 +04:00
aux unhide_dev " $dev1 "
2011-04-21 21:03:38 +04:00
2021-08-20 23:06:33 +03:00
lvmdevices || true
pvs -a -o+uuid
2011-04-21 21:03:38 +04:00
# Import the cloned PV to a new VG
2012-03-16 17:00:05 +04:00
vgimportclone --basevgname $vg2 " $dev2 "
2011-04-21 21:03:38 +04:00
2021-08-20 23:06:33 +03:00
lvmdevices || true
pvs -a -o+uuid
vgs
2011-04-21 21:03:38 +04:00
# Verify we can activate / deactivate the LV from both VGs
2011-09-07 12:31:16 +04:00
lvchange -ay $vg1 /$lv1 $vg2 /$lv1
vgchange -an $vg1 $vg2
2014-02-27 02:25:30 +04:00
vgremove -ff $vg1 $vg2
2015-10-12 13:54:35 +03:00
2023-01-05 23:47:49 +03:00
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 "
2023-02-10 02:14:19 +03:00
# 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 "
2015-10-12 13:54:35 +03:00
# Verify that if we provide the -n|--basevgname,
# the number suffix is not added unnecessarily.
2018-05-25 23:26:30 +03:00
vgcreate $SHARED --metadatasize 128k A${ vg1 } B " $dev1 "
2015-10-12 13:54:35 +03:00
# 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