diff options
author | Karol Lewandowski <k.lewandowsk@samsung.com> | 2024-01-23 12:58:00 +0100 |
---|---|---|
committer | Karol Lewandowski <k.lewandowsk@samsung.com> | 2024-01-23 12:58:00 +0100 |
commit | cbab226a74fbaaa43220dee80e8435555c6506ce (patch) | |
tree | 1bbd14ec625ea85d0bcc32232d51c1f71e2604d2 /test/shell/pvmove-basic.sh | |
parent | 44a3c2255bc480c82f34db156553a595606d8a0b (diff) | |
download | device-mapper-sandbox/klewandowski/upstream_2.03.22.tar.gz device-mapper-sandbox/klewandowski/upstream_2.03.22.tar.bz2 device-mapper-sandbox/klewandowski/upstream_2.03.22.zip |
Imported Upstream version 2.03.22upstream/libdevmapper-1.02.196upstream/2.03.22upstreamsandbox/klewandowski/upstream_2.03.22
Diffstat (limited to 'test/shell/pvmove-basic.sh')
-rw-r--r-- | test/shell/pvmove-basic.sh | 402 |
1 files changed, 191 insertions, 211 deletions
diff --git a/test/shell/pvmove-basic.sh b/test/shell/pvmove-basic.sh index e95fc36..c02354d 100644 --- a/test/shell/pvmove-basic.sh +++ b/test/shell/pvmove-basic.sh @@ -1,5 +1,6 @@ -#!/bin/sh -# Copyright (C) 2008-2012 Red Hat, Inc. All rights reserved. +#!/usr/bin/env bash + +# Copyright (C) 2008-2013 Red Hat, Inc. All rights reserved. # Copyright (C) 2007 NEC Corporation # # This copyrighted material is made available to anyone wishing to use, @@ -8,94 +9,84 @@ # # 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 test_description="ensure that pvmove works with basic options" -. lib/test +SKIP_WITH_LVMLOCKD=1 + +. lib/inittest -which mkfs.ext2 || skip which md5sum || skip # --------------------------------------------------------------------- # Utilities -lvdev_() { - echo "$DM_DEV_DIR/$1/$2" +create_vg_() { + vgcreate -s 128k "$vg" "${DEVICES[@]}" } -lv_is_on_() { - local lv=$1 #allready vg/lv - shift 1 - lvs -a -odevices --noheadings $lv | sed 's/,/\n/g' > out -#is on all specified devs - for d in $*; do grep "$d(" out; done -#isn't on any other dev (we are set -e remember) - for d in $*; do ! grep -v "$d(" out; done - return 0 +# --------------------------------------------------------------------- +# Common environment setup/cleanup for each sub testcases +prepare_lvs_() { + lvcreate -aey -l2 -n $lv1 $vg "$dev1" + check lv_on $vg $lv1 "$dev1" + lvcreate -aey -l9 -i3 -n $lv2 $vg "$dev2" "$dev3" "$dev4" + check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" + lvextend -l+2 $vg/$lv1 "$dev2" + check lv_on $vg $lv1 "$dev1" "$dev2" + lvextend -l+2 $vg/$lv1 "$dev3" + lvextend -l+2 $vg/$lv1 "$dev1" + check lv_on $vg $lv1 "$dev1" "$dev2" "$dev3" + lvcreate -aey -l1 -n $lv3 $vg "$dev2" + check lv_on $vg $lv3 "$dev2" + aux mkdev_md5sum $vg $lv1 + aux mkdev_md5sum $vg $lv2 + aux mkdev_md5sum $vg $lv3 + get lv_devices "$vg/$lv1" > "${lv1}_devs" + get lv_devices "$vg/$lv2" > "${lv2}_devs" + get lv_devices "$vg/$lv3" > "${lv3}_devs" + lvs -a -o name,size,seg_pe_ranges $vg + vgcfgbackup -f bak-$$ $vg } -save_dev_sum_() { - mkfs.ext2 $1 > /dev/null && md5sum $1 > md5.$(basename $1) +# Restore metadata content, since data are pvmove-ed +# original content should be preserved +restore_lvs_() { + vgcfgrestore -f bak-$$ $vg + vgchange -aey $vg } -check_dev_sum_() { - md5sum -c md5.$(basename $1) +lvs_not_changed_() { + for i in "${@}"; do + get lv_devices "$vg/$i" | tee out + diff "${i}_devs" out || \ + (cat "${i}_devs"; die "Devices for LV $vg/$i differs!") + done } -create_vg_() { - vgcreate -c n -s 128k $vg $(cat DEVICES) +check_and_cleanup_lvs_() { + check dev_md5sum $vg $lv1 + check dev_md5sum $vg $lv2 + check dev_md5sum $vg $lv3 + get lv_field $vg name -a >out + not grep "^\[pvmove" out + vgchange -an $vg + lvremove -ff $vg + (dm_table | not grep $vg) || \ + die "ERROR: lvremove did leave some mappings in DM behind!" } + # --------------------------------------------------------------------- # Initialize PVs and VGs -#aux prepare_vg 5 30 aux prepare_pvs 5 5 -create_vg_ - -# --------------------------------------------------------------------- -# Common environment setup/cleanup for each sub testcases -FIRST="" +get_devs -prepare_lvs_() { - lvcreate -l2 -n $lv1 $vg "$dev1" - test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" - lvcreate -l9 -i3 -n $lv2 $vg "$dev2" "$dev3" "$dev4" - test -z "$FIRST" && lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev4" - lvextend -l+2 $vg/$lv1 "$dev2" - test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2" - lvextend -l+2 $vg/$lv1 "$dev3" - test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev3" - lvextend -l+2 $vg/$lv1 "$dev1" - test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev3" "$dev1" - lvcreate -l1 -n $lv3 $vg "$dev2" - test -z "$FIRST" && lv_is_on_ $vg/$lv3 "$dev2" - save_dev_sum_ $(lvdev_ $vg $lv1) - save_dev_sum_ $(lvdev_ $vg $lv2) - save_dev_sum_ $(lvdev_ $vg $lv3) - if test -z "$FIRST" ; then - get lv_field $vg/$lv1 devices > ${lv1}_devs - get lv_field $vg/$lv2 devices > ${lv2}_devs - get lv_field $vg/$lv3 devices > ${lv3}_devs - fi - FIRST=done -} - -lv_not_changed_() { - get lv_field $1 devices > out - diff $(basename $1)_devs out -} +create_vg_ -check_and_cleanup_lvs_() { - lvs -a -o+devices $vg - check_dev_sum_ $(lvdev_ $vg $lv1) - check_dev_sum_ $(lvdev_ $vg $lv2) - check_dev_sum_ $(lvdev_ $vg $lv3) - lvs -a -o name $vg > out && ! grep ^pvmove out - lvremove -ff $vg - (dm_table | not grep $vg) || \ - die "ERROR: lvremove did leave some some mappings in DM behind!" -} +for mode in "--atomic" "" +do #COMM "check environment setup/cleanup" prepare_lvs_ @@ -108,276 +99,265 @@ check_and_cleanup_lvs_ # filter by LV #COMM "only specified LV is moved: from pv2 to pv5 only for lv1" -prepare_lvs_ -pvmove -i1 -n $vg/$lv1 "$dev2" "$dev5" -lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3" "$dev1" -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i1 -n $vg/$lv1 "$dev2" "$dev5" +check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3" +lvs_not_changed_ $lv2 $lv3 check_and_cleanup_lvs_ # --- # segments in a LV #COMM "the 1st seg of 3-segs LV is moved: from pv1 of lv1 to pv4" -prepare_lvs_ -pvmove -i0 -n $vg/$lv1 "$dev1" "$dev4" -lv_is_on_ $vg/$lv1 "$dev4" "$dev2" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv1 "$dev1" "$dev4" +check lv_on $vg $lv1 "$dev4" "$dev2" "$dev3" +lvs_not_changed_ $lv2 $lv3 check_and_cleanup_lvs_ #COMM "the 2nd seg of 3-segs LV is moved: from pv2 of lv1 to pv4" -prepare_lvs_ -pvmove -i0 -n $vg/$lv1 "$dev2" "$dev4" -lv_is_on_ $vg/$lv1 "$dev1" "$dev4" "$dev3" "$dev1" -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv1 "$dev2" "$dev4" +check lv_on $vg $lv1 "$dev1" "$dev4" "$dev3" +lvs_not_changed_ $lv2 $lv3 check_and_cleanup_lvs_ #COMM "the 3rd seg of 3-segs LV is moved: from pv3 of lv1 to pv4" -prepare_lvs_ -pvmove -i0 -n $vg/$lv1 "$dev3" "$dev4" -lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev4" "$dev1" -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv1 "$dev3" "$dev4" +check lv_on $vg $lv1 "$dev1" "$dev2" "$dev4" +lvs_not_changed_ $lv2 $lv3 check_and_cleanup_lvs_ # --- # multiple LVs matching #COMM "1 out of 3 LVs is moved: from pv4 to pv5" -prepare_lvs_ -pvmove -i0 "$dev4" "$dev5" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev5" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev4" "$dev5" +check lv_on $vg $lv2 "$dev2" "$dev3" "$dev5" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "2 out of 3 LVs are moved: from pv3 to pv5" -prepare_lvs_ -pvmove -i0 "$dev3" "$dev5" -lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev5" "$dev1" -lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev3" "$dev5" +check lv_on $vg $lv1 "$dev1" "$dev2" "$dev5" +check lv_on $vg $lv2 "$dev2" "$dev5" "$dev4" +lvs_not_changed_ $lv3 check_and_cleanup_lvs_ #COMM "3 out of 3 LVs are moved: from pv2 to pv5" -prepare_lvs_ -pvmove -i0 "$dev2" "$dev5" -lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3" "$dev1" -lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4" -lv_is_on_ $vg/$lv3 "$dev5" +restore_lvs_ +pvmove $mode -i0 "$dev2" "$dev5" +check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3" +check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4" +check lv_on $vg $lv3 "$dev5" check_and_cleanup_lvs_ # --- # areas of striping #COMM "move the 1st stripe: from pv2 of lv2 to pv1" -prepare_lvs_ -pvmove -i0 -n $vg/$lv2 "$dev2" "$dev1" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev1" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv2 "$dev2" "$dev1" +check lv_on $vg $lv2 "$dev1" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "move the 2nd stripe: from pv3 of lv2 to pv1" -prepare_lvs_ -pvmove -i0 -n $vg/$lv2 "$dev3" "$dev1" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev1" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv2 "$dev3" "$dev1" +check lv_on $vg $lv2 "$dev2" "$dev1" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "move the 3rd stripe: from pv4 of lv2 to pv1" -prepare_lvs_ -pvmove -i0 -n $vg/$lv2 "$dev4" "$dev1" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev1" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 -n $vg/$lv2 "$dev4" "$dev1" +check lv_on $vg $lv2 "$dev2" "$dev3" "$dev1" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ # --- # partial segment match (source segment splitted) #COMM "match to the start of segment:from pv2:0-0 to pv5" -prepare_lvs_ -pvmove -i0 "$dev2":0-0 "$dev5" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev5" "$dev2" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev2":0-0 "$dev5" +check lv_on $vg $lv2 "$dev5" "$dev2" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ - +#exit 0 #COMM "match to the middle of segment: from pv2:1-1 to pv5" -prepare_lvs_ -pvmove -i0 "$dev2":1-1 "$dev5" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev2" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev2":1-1 "$dev5" +check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" "$dev5" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "match to the end of segment: from pv2:2-2 to pv5" -prepare_lvs_ -pvmove -i0 "$dev2":2-2 "$dev5" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev2":2-2 "$dev5" +check lv_on $vg $lv2 "$dev2" "$dev5" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ # --- # destination segment splitted #COMM "no destination split: from pv2:0-2 to pv5" -prepare_lvs_ -pvmove -i0 "$dev2":0-2 "$dev5" -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev2":0-2 "$dev5" +check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "destination split into 2: from pv2:0-2 to pv5:5-5 and pv4:5-6" -prepare_lvs_ -pvmove -i0 --alloc anywhere "$dev2":0-2 "$dev5":5-5 "$dev4":5-6 -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev5" "$dev4" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 --alloc anywhere "$dev2":0-2 "$dev5":5-5 "$dev4":5-6 +check lv_on $vg $lv2 "$dev5" "$dev4" "$dev3" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "destination split into 3: from pv2:0-2 to {pv3,4,5}:5-5" -prepare_lvs_ -pvmove -i0 --alloc anywhere "$dev2":0-2 "$dev3":5-5 "$dev4":5-5 "$dev5":5-5 -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev3" "$dev4" "$dev5" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 --alloc anywhere "$dev2":0-2 "$dev3":5-5 "$dev4":5-5 "$dev5":5-5 +check lv_on $vg $lv2 "$dev3" "$dev4" "$dev5" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ # --- # alloc policy (anywhere, contiguous) with both success and failure cases #COMM "alloc normal on same PV for source and destination: from pv3:0-2 to pv3:5-7" -prepare_lvs_ -not pvmove -i0 "$dev3":0-2 "$dev3":5-7 +restore_lvs_ +not pvmove $mode -i0 "$dev3":0-2 "$dev3":5-7 # "(cleanup previous test)" -lv_not_changed_ $vg/$lv1 -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +lvs_not_changed_ $lv1 $lv2 $lv3 check_and_cleanup_lvs_ #COMM "alloc anywhere on same PV for source and destination: from pv3:0-2 to pv3:5-7" -prepare_lvs_ -pvmove -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 +check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "alloc anywhere but better area available: from pv3:0-2 to pv3:5-7 or pv5:5-6,pv4:5-5" -prepare_lvs_ -pvmove -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 "$dev5":5-6 "$dev4":5-5 -lv_not_changed_ $vg/$lv1 -#lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +#lvs -a -o name,size,seg_pe_ranges $vg +#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:0-2 @TESTDIR@/dev/mapper/@PREFIX@pv3:0-2 @TESTDIR@/dev/mapper/@PREFIX@pv4:0-2 + +pvmove $mode -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 "$dev5":5-6 "$dev4":5-5 + +#lvs -a -o name,size,seg_pe_ranges $vg +# Hmm is this correct ? - why pv2 is split +#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:0-1 @TESTDIR@/dev/mapper/@PREFIX@pv5:5-6 @TESTDIR@/dev/mapper/@PREFIX@pv4:0-1 +#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:2-2 @TESTDIR@/dev/mapper/@PREFIX@pv3:5-5 @TESTDIR@/dev/mapper/@PREFIX@pv4:2-2 +check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" "$dev5" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ #COMM "alloc contiguous but area not available: from pv2:0-2 to pv5:5-5 and pv4:5-6" -prepare_lvs_ -not pvmove -i0 --alloc contiguous "$dev2":0-2 "$dev5":5-5 "$dev4":5-6 +restore_lvs_ +not pvmove $mode -i0 --alloc contiguous "$dev2":0-2 "$dev5":5-5 "$dev4":5-6 # "(cleanup previous test)" -lv_not_changed_ $vg/$lv1 -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +lvs_not_changed_ $lv1 $lv2 $lv3 check_and_cleanup_lvs_ #COMM "alloc contiguous and contiguous area available: from pv2:0-2 to pv5:0-0,pv5:3-5 and pv4:5-6" -prepare_lvs_ -pvmove -i0 --alloc contiguous "$dev2":0-2 "$dev5":0-0 "$dev5":3-5 "$dev4":5-6 -lv_not_changed_ $vg/$lv1 -lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 --alloc contiguous "$dev2":0-2 "$dev5":0-0 "$dev5":3-5 "$dev4":5-6 +check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4" +lvs_not_changed_ $lv1 $lv3 check_and_cleanup_lvs_ # --- # multiple segments in a LV #COMM "multiple source LVs: from pv3 to pv5" -prepare_lvs_ -pvmove -i0 "$dev3" "$dev5" -lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev5" -lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4" -lv_not_changed_ $vg/$lv3 +restore_lvs_ +pvmove $mode -i0 "$dev3" "$dev5" +check lv_on $vg $lv1 "$dev1" "$dev2" "$dev5" +check lv_on $vg $lv2 "$dev2" "$dev5" "$dev4" +lvs_not_changed_ $lv3 check_and_cleanup_lvs_ # --- # move inactive LV #COMM "move inactive LV: from pv2 to pv5" -prepare_lvs_ +restore_lvs_ lvchange -an $vg/$lv1 lvchange -an $vg/$lv3 -pvmove -i0 "$dev2" "$dev5" -lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3" -lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4" -lv_is_on_ $vg/$lv3 "$dev5" +pvmove $mode -i0 "$dev2" "$dev5" +check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3" +check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4" +check lv_on $vg $lv3 "$dev5" check_and_cleanup_lvs_ # --- # other failure cases #COMM "no PEs to move: from pv3 to pv1" -prepare_lvs_ -pvmove -i0 "$dev3" "$dev1" -not pvmove -i0 "$dev3" "$dev1" +restore_lvs_ +pvmove $mode -i0 "$dev3" "$dev1" +not pvmove $mode -i0 "$dev3" "$dev1" # "(cleanup previous test)" -lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev1" -lv_is_on_ $vg/$lv2 "$dev2" "$dev1" "$dev4" -lv_not_changed_ $vg/$lv3 +check lv_on $vg $lv1 "$dev1" "$dev2" "$dev1" +check lv_on $vg $lv2 "$dev2" "$dev1" "$dev4" +lvs_not_changed_ $lv3 check_and_cleanup_lvs_ #COMM "no space available: from pv2:0-0 to pv1:0-0" -prepare_lvs_ -not pvmove -i0 "$dev2":0-0 "$dev1":0-0 +restore_lvs_ +not pvmove $mode -i0 "$dev2":0-0 "$dev1":0-0 # "(cleanup previous test)" -lv_not_changed_ $vg/$lv1 -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +lvs_not_changed_ $lv1 $lv2 $lv3 check_and_cleanup_lvs_ #COMM 'same source and destination: from pv1 to pv1' -prepare_lvs_ -not pvmove -i0 "$dev1" "$dev1" +restore_lvs_ +not pvmove $mode -i0 "$dev1" "$dev1" #"(cleanup previous test)" -lv_not_changed_ $vg/$lv1 -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +lvs_not_changed_ $lv1 $lv2 $lv3 check_and_cleanup_lvs_ #COMM "sum of specified destination PEs is large enough, but it includes source PEs and the free PEs are not enough" -prepare_lvs_ -not pvmove --alloc anywhere "$dev1":0-2 "$dev1":0-2 "$dev5":0-0 2> err +restore_lvs_ +not pvmove $mode --alloc anywhere "$dev1":0-2 "$dev1":0-2 "$dev5":0-0 2> err #"(cleanup previous test)" grep "Insufficient free space" err -lv_not_changed_ $vg/$lv1 -lv_not_changed_ $vg/$lv2 -lv_not_changed_ $vg/$lv3 +lvs_not_changed_ $lv1 $lv2 $lv3 check_and_cleanup_lvs_ # --------------------------------------------------------------------- #COMM "pvmove abort" -prepare_lvs_ -pvmove -i100 -b "$dev1" "$dev3" +restore_lvs_ +LVM_TEST_TAG="kill_me_$PREFIX" pvmove $mode -i100 -b "$dev1" "$dev3" pvmove --abort check_and_cleanup_lvs_ #COMM "pvmove out of --metadatacopies 0 PV (bz252150)" vgremove -ff $vg -pvcreate $(cat DEVICES) +pvcreate "${DEVICES[@]}" pvcreate --metadatacopies 0 "$dev1" "$dev2" create_vg_ -lvcreate -l4 -n $lv1 $vg "$dev1" -pvmove "$dev1" +lvcreate -aey -l4 -n $lv1 $vg "$dev1" +pvmove $mode "$dev1" #COMM "pvmove fails activating mirror, properly restores state before pvmove" dmsetup create $vg-pvmove0 --notable -not pvmove -i 1 "$dev2" -test $(dmsetup info --noheadings -c -o suspended $vg-$lv1) = "Active" -dmsetup remove $vg-pvmove0 +not pvmove $mode -i 1 "$dev2" +dmsetup info --noheadings -c -o suspended $vg-$lv1 +test "$(dmsetup info --noheadings -c -o suspended "$vg-$lv1")" = "Active" +if dmsetup info $vg-pvmove0_mimage_0 > /dev/null; then + dmsetup remove $vg-pvmove0 $vg-pvmove0_mimage_0 $vg-pvmove0_mimage_1 +else + dmsetup remove $vg-pvmove0 +fi + +lvremove -ff $vg +done |