1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-16 10:50:46 +03:00

More test conversions, all of these are by jstava.

This commit is contained in:
Petr Rockai 2008-09-30 17:47:34 +00:00
parent 786e33d7d5
commit 28db8d6c7c
5 changed files with 185 additions and 272 deletions

View File

@ -1,5 +1,5 @@
#!/bin/sh
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
# Copyright (C) 2008 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
@ -9,82 +9,46 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
test_description='Exercise some lvcreate diagnostics'
privileges_required_=1
# 'Exercise some lvcreate diagnostics'
. ./test-lib.sh
. ./test-utils.sh
cleanup_()
{
test -n "$vg" && {
vgchange -an "$vg"
lvremove -ff "$vg"
vgremove "$vg"
} > "$test_dir_/cleanup.log"
test -n "$d1" && losetup -d "$d1"
test -n "$d2" && losetup -d "$d2"
rm -f "$f1" "$f2"
}
aux prepare_vg 2
test_expect_success \
'set up temp files, loopback devices, PVs, and a VG' \
'f1=$(pwd)/1 && d1=$(loop_setup_ "$f1") &&
f2=$(pwd)/2 && d2=$(loop_setup_ "$f2") &&
pvcreate $d1 $d2 &&
vg=$(this_test_)-test-vg-$$ &&
vgcreate $vg $d1 $d2'
# "lvcreate rejects repeated invocation (run 2 times)"
lvcreate -n $lv -l 4 $vg
not lvcreate -n $lv -l 4 $vg
lvremove -ff $vg/$lv
lv=lvcreate-usage-$$
# "lvcreate rejects a negative stripe_size"
not lvcreate -L 64M -n $lv -i2 --stripesize -4 $vg 2>err;
grep "^ Negative stripesize is invalid\$" err
test_expect_success \
"lvcreate rejects repeated invocation (run 2 times)" '
lvcreate -n $lv -l 4 $vg &&
{ lvcreate -n $lv -l 4 $vg;
status=$?; echo status=$status; test $status = 5 &&
lvremove -ff $vg/$lv
}
'
# 'lvcreate rejects a too-large stripesize'
not lvcreate -L 64M -n $lv -i2 --stripesize 4294967291 $vg 2>err
grep "^ Stripe size cannot be larger than 512.00 GB\$" err
test_expect_success \
'lvcreate rejects a negative stripe_size' \
'lvcreate -L 64M -n $lv -i2 --stripesize -4 $vg 2>err;
status=$?; echo status=$status; test $status = 3 &&
grep "^ Negative stripesize is invalid\$" err'
# 'lvcreate w/single stripe succeeds with diagnostics to stdout'
lvcreate -L 64M -n $lv -i1 --stripesize 4 $vg >out 2>err
grep "^ Redundant stripes argument: default is 1\$" out
grep "^ Ignoring stripesize argument with single stripe\$" out
lvdisplay $vg
lvremove -ff $vg
test_expect_success \
'lvcreate rejects a too-large stripesize' \
'lvcreate -L 64M -n $lv -i2 --stripesize 4294967291 $vg 2>err; test $? = 3 &&
grep "^ Stripe size cannot be larger than 512.00 GB\$" err'
# 'lvcreate w/default (64KB) stripe size succeeds with diagnostics to stdout'
lvcreate -L 64M -n $lv -i2 $vg > out
grep "^ Using default stripesize" out
lvdisplay $vg
check_lv_field_ $vg/$lv stripesize "64.00K"
lvremove -ff $vg
test_expect_success \
'lvcreate w/single stripe succeeds with diagnostics to stdout' \
'lvcreate -L 64M -n $lv -i1 --stripesize 4 $vg >out 2>err &&
grep "^ Redundant stripes argument: default is 1\$" out &&
grep "^ Ignoring stripesize argument with single stripe\$" out &&
lvdisplay $vg &&
lvremove -ff $vg'
test_expect_success \
'lvcreate w/default (64KB) stripe size succeeds with diagnostics to stdout' \
'lvcreate -L 64M -n $lv -i2 $vg > out &&
grep "^ Using default stripesize" out &&
lvdisplay $vg &&
check_lv_field_ $vg/$lv stripesize "64.00K" &&
lvremove -ff $vg'
test_expect_success \
'lvcreate rejects an invalid number of stripes' \
'lvcreate -L 64M -n $lv -i129 $vg 2>err; test $? = 3 &&
grep "^ Number of stripes (129) must be between 1 and 128\$" err'
# 'lvcreate rejects an invalid number of stripes'
not lvcreate -L 64M -n $lv -i129 $vg 2>err
grep "^ Number of stripes (129) must be between 1 and 128\$" err
# The case on lvdisplay output is to verify that the LV was not created.
test_expect_success \
'lvcreate rejects an invalid stripe size' \
'lvcreate -L 64M -n $lv -i2 --stripesize 3 $vg 2>err; test $? = 3 &&
grep "^ Invalid stripe size 3\.00 KB\$" err &&
case $(lvdisplay $vg) in "") true ;; *) false ;; esac'
# 'lvcreate rejects an invalid stripe size'
not lvcreate -L 64M -n $lv -i2 --stripesize 3 $vg 2>err
grep "^ Invalid stripe size 3\.00 KB\$" err
case $(lvdisplay $vg) in "") true ;; *) false ;; esac'
test_done
# Local Variables:
# indent-tabs-mode: nil
# End:

View File

@ -1,5 +1,5 @@
#!/bin/sh
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
# Copyright (C) 2008 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
@ -9,60 +9,36 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
test_description='Check extents percentage arguments'
privileges_required_=1
# 'Check extents percentage arguments'
. ./test-lib.sh
. ./test-utils.sh
cleanup_()
{
test -n "$vg" && {
vgchange -an "$vg"
lvremove -ff "$vg"
vgremove -f "$vg"
} > "$test_dir_/cleanup.log"
test -n "$d1" && losetup -d "$d1"
test -n "$d2" && losetup -d "$d2"
rm -f "$f1" "$f2"
}
aux prepare_vg 2 128
test_expect_success \
'set up temp files, loopback devices, PVs, and a VG' \
'f1=$(pwd)/1 && d1=$(loop_setup_ "$f1") &&
f2=$(pwd)/2 && d2=$(loop_setup_ "$f2") &&
pvcreate $d1 $d2 &&
vg=$(this_test_)-test-vg-$$ &&
vgcreate $vg $d1 $d2 &&
lv=$(this_test_)-test-lv-$$ &&
lvcreate -L 64M -n $lv $vg'
lvcreate -L 64M -n $lv $vg
test_expect_success \
'lvextend rejects both size and extents without PVs' \
'lvextend -l 10 -L 64M $vg/$lv 2>err; test $? = 3 &&
grep "^ Please specify either size or extents but not both.\$" err'
# 'lvextend rejects both size and extents without PVs'
not lvextend -l 10 -L 64M $vg/$lv 2>err
grep "^ Please specify either size or extents but not both.\$" err
test_expect_success \
'lvextend rejects both size and extents with PVs' \
'lvextend -l 10 -L 64M $vg/$lv $d1 2>err; test $? = 3 &&
grep "^ Please specify either size or extents but not both.\$" err'
# 'lvextend rejects both size and extents with PVs'
not lvextend -l 10 -L 64M $vg/$lv $dev1 2>err
grep "^ Please specify either size or extents but not both.\$" err
test_expect_success \
'lvextend accepts no size or extents but one PV - bz154691' \
'lvextend $vg/$lv $d1 >out; test $? = 0 &&
grep "^ Logical volume $lv successfully resized\$" out &&
check_pv_field_ $d1 pv_free "0"'
# 'lvextend accepts no size or extents but one PV - bz154691'
lvextend $vg/$lv $dev1 >out
grep "^ Logical volume $lv successfully resized\$" out
check_pv_field_ $dev1 pv_free "0"
test_expect_success \
'Reset LV to original size' \
'lvremove -f $vg/$lv; test $? = 0 &&
lvcreate -L 64M -n $lv $vg; test $? = 0'
# 'Reset LV to original size'
lvremove -f $vg/$lv
lvcreate -L 64M -n $lv $vg
test_expect_success \
'lvextend accepts no size but extents 100%PVS and two PVs - bz154691' \
'lvextend -l +100%PVS $vg/$lv $d1 $d2 >out; test $? = 0 &&
grep "^ Logical volume $lv successfully resized\$" out &&
check_pv_field_ $d1 pv_free "0" &&
check_pv_field_ $d2 pv_free "0"'
# 'lvextend accepts no size but extents 100%PVS and two PVs - bz154691'
lvextend -l +100%PVS $vg/$lv $dev1 $dev2 >out
grep "^ Logical volume $lv successfully resized\$" out
check_pv_field_ $dev1 pv_free "0"
check_pv_field_ $dev2 pv_free "0"
# Exercise the range overlap code. Allocate every 2 extents.
#
@ -84,22 +60,15 @@ test_expect_success \
# Total number of extents should be 12 + overlap = 12 + 6 = 18.
# Thus, total size for the LV should be 18 * 4M = 72M
#
test_expect_success \
'Reset LV to 12 extents, allocate every other 2 extents' \
'create_pvs=`for i in $(seq 0 4 20); do echo -n "\$d1:$i-$(($i + 1)) "; done` &&
lvremove -f $vg/$lv; test $? = 0 &&
lvcreate -l 12 -n $lv $vg $create_pvs; test $? = 0 &&
check_lv_field_ $vg/$lv lv_size "48.00M"'
# 'Reset LV to 12 extents, allocate every other 2 extents'
create_pvs=`for i in $(seq 0 4 20); do echo -n "\$dev1:$i-$(($i + 1)) "; done`
lvremove -f $vg/$lv
lvcreate -l 12 -n $lv $vg $create_pvs
check_lv_field_ $vg/$lv lv_size "48.00M"
test_expect_success \
'lvextend with partially allocated PVs and extents 100%PVS with PE ranges' \
'extend_pvs=`for i in $(seq 0 6 18); do echo -n "\$d1:$i-$(($i + 2)) "; done` &&
lvextend -l +100%PVS $vg/$lv $extend_pvs >out; test $? = 0 &&
grep "^ Logical volume $lv successfully resized\$" out &&
check_lv_field_ $vg/$lv lv_size "72.00M"'
# 'lvextend with partially allocated PVs and extents 100%PVS with PE ranges'
extend_pvs=`for i in $(seq 0 6 18); do echo -n "\$dev1:$i-$(($i + 2)) "; done`
lvextend -l +100%PVS $vg/$lv $extend_pvs >out
grep "^ Logical volume $lv successfully resized\$" out
check_lv_field_ $vg/$lv lv_size "72.00M"
test_done
# Local Variables:
# indent-tabs-mode: nil
# End:

View File

@ -9,43 +9,25 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
test_description='Test for proper escaping of strings in metadata (bz431474)'
privileges_required_=1
# 'Test for proper escaping of strings in metadata (bz431474)'
. ./test-lib.sh
. ./test-utils.sh
cleanup_()
{
test -n "$vg" && {
vgchange -an "$vg"
vgremove "$vg"
} > "$test_dir_/cleanup.log"
test -n "$d1" && losetup -d "$d1"
rm -f "$f1"
}
aux prepare_devs 1
pv_suffix="__\"!@#\$%^&*()'\\\"__"
test_expect_success \
'set up temp files, loopback devices' \
'f1=$(pwd)/1 && d1=$(loop_setup_ "$f1") &&
mv "$d1" "$d1$pv_suffix" &&
d1=$d1$pv_suffix'
# 'set up temp files, loopback devices'
name=$(basename "$dev1")
dmsetup rename "$name" "$name$pv_suffix"
dev1=$(dirname "$dev1")/$name$pv_suffix
test_expect_success \
'pvcreate, vgcreate on filename with backslashed chars' \
'pvcreate "$d1" &&
vg=$(this_test_)-test-vg-$$ &&
vgcreate $vg $d1'
test_expect_success \
'no parse errors and VG really exists' \
'vgs 2>err &&
grep "Parse error" err;
status=$?; echo status=$status; test $status -ne 0 &&
vgs $vg'
# 'pvcreate, vgcreate on filename with backslashed chars'
pvcreate "$dev1"
vgcreate $vg "$dev1"
# 'no parse errors and VG really exists'
vgs 2>err
not grep "Parse error" err;
vgs $vg
test_done
# Local Variables:
# indent-tabs-mode: nil
# End:

View File

@ -1,4 +1,4 @@
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
# Copyright (C) 2007 NEC Corporation
#
# This copyrighted material is made available to anyone wishing to use,
@ -156,25 +156,25 @@ check_and_cleanup_lvs_
prepare_lvs_
lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
check_mirror_count_ $vg/$lv1 2
!(check_mirror_log_ $vg/$lv1)
lvconvert -m+1 -i1 --mirrorlog core $vg/$lv1 $dev4 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 3 &&
!(check_mirror_log_ $vg/$lv1) &&
mimages_are_redundant_ $vg $lv1 &&
not check_mirror_log_ $vg/$lv1
lvconvert -m+1 -i1 --mirrorlog core $vg/$lv1 $dev4
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 3
not check_mirror_log_ $vg/$lv1
mimages_are_redundant_ $vg $lv1
check_and_cleanup_lvs_
test_expect_success "add 2 mirrors to core log mirror" \
'prepare_lvs_ &&
lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2 &&
check_mirror_count_ $vg/$lv1 2 &&
!(check_mirror_log_ $vg/$lv1) &&
lvconvert -m+2 -i1 --mirrorlog core $vg/$lv1 $dev4 $dev5 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 4 &&
!(check_mirror_log_ $vg/$lv1) &&
mimages_are_redundant_ $vg $lv1 &&
check_and_cleanup_lvs_'
# add 2 mirrors to core log mirror"
prepare_lvs_
lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
check_mirror_count_ $vg/$lv1 2
not check_mirror_log_ $vg/$lv1
lvconvert -m+2 -i1 --mirrorlog core $vg/$lv1 $dev4 $dev5
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 4
not check_mirror_log_ $vg/$lv1
mimages_are_redundant_ $vg $lv1
check_and_cleanup_lvs_
# ---
# add to converting mirror
@ -195,18 +195,18 @@ check_and_cleanup_lvs_
# ---
# add mirror and disk log
test_expect_success "add 1 mirror and disk log" \
'prepare_lvs_ &&
lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2 &&
check_mirror_count_ $vg/$lv1 2 &&
!(check_mirror_log_ $vg/$lv1) &&
lvconvert -m+1 --mirrorlog disk -i1 $vg/$lv1 $dev4 $dev3:0-1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 3 &&
check_mirror_log_ $vg/$lv1 &&
mimages_are_redundant_ $vg $lv1 &&
mirrorlog_is_on_ $vg/$lv1 $dev3 &&
check_and_cleanup_lvs_'
# "add 1 mirror and disk log"
prepare_lvs_
lvcreate -l2 -m1 --mirrorlog core -n $lv1 $vg $dev1 $dev2
check_mirror_count_ $vg/$lv1 2
not check_mirror_log_ $vg/$lv1
lvconvert -m+1 --mirrorlog disk -i1 $vg/$lv1 $dev4 $dev3:0-1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 3
check_mirror_log_ $vg/$lv1
mimages_are_redundant_ $vg $lv1
mirrorlog_is_on_ $vg/$lv1 $dev3
check_and_cleanup_lvs_
# ---
# check polldaemon restarts
@ -226,75 +226,74 @@ check_and_cleanup_lvs_
# ---------------------------------------------------------------------
# removal during conversion
test_expect_success "remove newly added mirror" \
'prepare_lvs_ &&
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1 &&
check_mirror_count_ $vg/$lv1 2 &&
check_mirror_log_ $vg/$lv1 &&
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4 &&
lvconvert -m-1 $vg/$lv1 $dev4 &&
wait_conversion_ $vg/$lv1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 2 &&
mimages_are_redundant_ $vg $lv1 &&
mirrorlog_is_on_ $vg/$lv1 $dev3 &&
check_and_cleanup_lvs_'
# "remove newly added mirror"
prepare_lvs_
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
check_mirror_count_ $vg/$lv1 2
check_mirror_log_ $vg/$lv1
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4
lvconvert -m-1 $vg/$lv1 $dev4
wait_conversion_ $vg/$lv1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 2
mimages_are_redundant_ $vg $lv1
mirrorlog_is_on_ $vg/$lv1 $dev3
check_and_cleanup_lvs_
test_expect_success "remove one of newly added mirrors" \
'prepare_lvs_ &&
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1 &&
check_mirror_count_ $vg/$lv1 2 &&
check_mirror_log_ $vg/$lv1 &&
lvconvert -m+2 -b -i100 $vg/$lv1 $dev4 $dev5 &&
lvconvert -m-1 $vg/$lv1 $dev4 &&
lvconvert -i1 $vg/$lv1 &&
wait_conversion_ $vg/$lv1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 3 &&
mimages_are_redundant_ $vg $lv1 &&
mirrorlog_is_on_ $vg/$lv1 $dev3 &&
check_and_cleanup_lvs_'
# "remove one of newly added mirrors"
prepare_lvs_
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
check_mirror_count_ $vg/$lv1 2
check_mirror_log_ $vg/$lv1
lvconvert -m+2 -b -i100 $vg/$lv1 $dev4 $dev5
lvconvert -m-1 $vg/$lv1 $dev4
lvconvert -i1 $vg/$lv1
wait_conversion_ $vg/$lv1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 3
mimages_are_redundant_ $vg $lv1
mirrorlog_is_on_ $vg/$lv1 $dev3
check_and_cleanup_lvs_
test_expect_success "remove from original mirror (the original is still mirror)" \
'prepare_lvs_ &&
lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev5 $dev3:0-1 &&
check_mirror_count_ $vg/$lv1 3 &&
check_mirror_log_ $vg/$lv1 &&
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4 &&
lvconvert -m-1 $vg/$lv1 $dev2 &&
lvconvert -i1 $vg/$lv1 &&
wait_conversion_ $vg/$lv1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 3 &&
mimages_are_redundant_ $vg $lv1 &&
mirrorlog_is_on_ $vg/$lv1 $dev3 &&
check_and_cleanup_lvs_'
# "remove from original mirror (the original is still mirror)"
prepare_lvs_
lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev5 $dev3:0-1
check_mirror_count_ $vg/$lv1 3
check_mirror_log_ $vg/$lv1
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4
lvconvert -m-1 $vg/$lv1 $dev2
lvconvert -i1 $vg/$lv1
wait_conversion_ $vg/$lv1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 3
mimages_are_redundant_ $vg $lv1
mirrorlog_is_on_ $vg/$lv1 $dev3
check_and_cleanup_lvs_
test_expect_success "remove from original mirror (the original becomes linear)" \
'prepare_lvs_ &&
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1 &&
check_mirror_count_ $vg/$lv1 2 &&
check_mirror_log_ $vg/$lv1 &&
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4 &&
lvconvert -m-1 $vg/$lv1 $dev2 &&
lvconvert -i1 $vg/$lv1 &&
wait_conversion_ $vg/$lv1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 2 &&
mimages_are_redundant_ $vg $lv1 &&
mirrorlog_is_on_ $vg/$lv1 $dev3 &&
check_and_cleanup_lvs_'
# "remove from original mirror (the original becomes linear)"
prepare_lvs_
lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
check_mirror_count_ $vg/$lv1 2
check_mirror_log_ $vg/$lv1
lvconvert -m+1 -b -i100 $vg/$lv1 $dev4
lvconvert -m-1 $vg/$lv1 $dev2
lvconvert -i1 $vg/$lv1
wait_conversion_ $vg/$lv1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 2
mimages_are_redundant_ $vg $lv1
mirrorlog_is_on_ $vg/$lv1 $dev3
check_and_cleanup_lvs_
test_expect_success "rhbz440405: lvconvert -m0 incorrectly fails if all PEs allocated" \
'prepare_lvs_ &&
lvcreate -l`pvs --noheadings -ope_count $dev1` -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0 &&
check_mirror_count_ $vg/$lv1 2 &&
check_mirror_log_ $vg/$lv1 &&
lvconvert -m0 $vg/$lv1 $dev1 &&
check_no_tmplvs_ $vg/$lv1 &&
check_mirror_count_ $vg/$lv1 1 &&
check_and_cleanup_lvs_'
# "rhbz440405: lvconvert -m0 incorrectly fails if all PEs allocated"
prepare_lvs_
lvcreate -l`pvs --noheadings -ope_count $dev1` -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
check_mirror_count_ $vg/$lv1 2
check_mirror_log_ $vg/$lv1
lvconvert -m0 $vg/$lv1 $dev1
check_no_tmplvs_ $vg/$lv1
check_mirror_count_ $vg/$lv1 1
check_and_cleanup_lvs_
# ---------------------------------------------------------------------
test_done

View File

@ -60,18 +60,17 @@ vgremove -f $vg1
pvremove -f $dev2
pvremove -f $dev1
test_expect_success \
'pvcreate (lvm2) succeeds with -ff when PV with metadatacopies=0 belongs to VG' \
'pvcreate --metadatacopies 0 $dev1 &&
pvcreate --metadatacopies 1 $dev2 &&
vgcreate $vg1 $dev1 $dev2 &&
pvcreate -ff -y $dev1 &&
vgreduce --removemissing $vg1 &&
vgremove -ff $vg1 &&
pvremove -f $dev2 &&
pvremove -f $dev1'
# pvcreate (lvm2) succeeds with -ff when PV with metadatacopies=0 belongs to VG
pvcreate --metadatacopies 0 $dev1
pvcreate --metadatacopies 1 $dev2
vgcreate $vg1 $dev1 $dev2
pvcreate -ff -y $dev1
vgreduce --removemissing $vg1
vgremove -ff $vg1
pvremove -f $dev2
pvremove -f $dev1
for i in 0 1 2 3
for i in 0 1 2 3
do
# pvcreate (lvm2) succeeds writing LVM label at sector $i
pvcreate --labelsector $i $dev1