xref: /dflybsd-src/contrib/lvm2/dist/test/t-mirror-vgreduce-removemissing.sh (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
286d7f5d3SJohn Marino# Copyright (C) 2007 NEC Corporation
386d7f5d3SJohn Marino#
486d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use,
586d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions
686d7f5d3SJohn Marino# of the GNU General Public License v.2.
786d7f5d3SJohn Marino#
886d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License
986d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation,
1086d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1186d7f5d3SJohn Marino
1286d7f5d3SJohn Marinotest_description="ensure that 'vgreduce --removemissing' works on mirrored LV"
1386d7f5d3SJohn Marino
1486d7f5d3SJohn Marino. ./test-utils.sh
1586d7f5d3SJohn Marino
1686d7f5d3SJohn Marinodmsetup_has_dm_devdir_support_ || exit 200
1786d7f5d3SJohn Marino
1886d7f5d3SJohn Marinolv_is_on_ ()
1986d7f5d3SJohn Marino{
2086d7f5d3SJohn Marino	local lv=$vg/$1
2186d7f5d3SJohn Marino	shift
2286d7f5d3SJohn Marino	local pvs=$*
2386d7f5d3SJohn Marino
2486d7f5d3SJohn Marino	echo "Check if $lv is exactly on PVs $pvs"
2586d7f5d3SJohn Marino	rm -f out1 out2
2686d7f5d3SJohn Marino	echo $pvs | sed 's/ /\n/g' | sort | uniq > out1
2786d7f5d3SJohn Marino
2886d7f5d3SJohn Marino	lvs -a -odevices --noheadings $lv | \
2986d7f5d3SJohn Marino	sed 's/([^)]*)//g; s/[ ,]/\n/g' | sort | uniq > out2
3086d7f5d3SJohn Marino
3186d7f5d3SJohn Marino	diff --ignore-blank-lines out1 out2
3286d7f5d3SJohn Marino}
3386d7f5d3SJohn Marino
3486d7f5d3SJohn Marinomimages_are_on_ ()
3586d7f5d3SJohn Marino{
3686d7f5d3SJohn Marino	local lv=$1
3786d7f5d3SJohn Marino	shift
3886d7f5d3SJohn Marino	local pvs="$*"
3986d7f5d3SJohn Marino	local mimages
4086d7f5d3SJohn Marino	local i
4186d7f5d3SJohn Marino
4286d7f5d3SJohn Marino	echo "Check if mirror images of $lv are on PVs $pvs"
4386d7f5d3SJohn Marino	rm -f out1 out2
4486d7f5d3SJohn Marino	echo $pvs | sed 's/ /\n/g' | sort | uniq > out1
4586d7f5d3SJohn Marino
4686d7f5d3SJohn Marino	mimages=$(lvs --noheadings -a -o lv_name $vg | grep "${lv}_mimage_" | \
4786d7f5d3SJohn Marino		sed 's/\[//g; s/\]//g')
4886d7f5d3SJohn Marino	for i in $mimages; do
4986d7f5d3SJohn Marino		echo "Checking $vg/$i"
5086d7f5d3SJohn Marino		lvs -a -odevices --noheadings $vg/$i | \
5186d7f5d3SJohn Marino			sed 's/([^)]*)//g; s/ //g; s/,/ /g' | sort | uniq >> out2
5286d7f5d3SJohn Marino	done
5386d7f5d3SJohn Marino
5486d7f5d3SJohn Marino	diff --ignore-blank-lines out1 out2
5586d7f5d3SJohn Marino}
5686d7f5d3SJohn Marino
5786d7f5d3SJohn Marinomirrorlog_is_on_()
5886d7f5d3SJohn Marino{
5986d7f5d3SJohn Marino	local lv="$1"_mlog
6086d7f5d3SJohn Marino	shift
6186d7f5d3SJohn Marino	lv_is_on_ $lv $*
6286d7f5d3SJohn Marino}
6386d7f5d3SJohn Marino
6486d7f5d3SJohn Marinolv_is_linear_()
6586d7f5d3SJohn Marino{
6686d7f5d3SJohn Marino	echo "Check if $1 is linear LV (i.e. not a mirror)"
6786d7f5d3SJohn Marino	lvs -o stripes,attr --noheadings $vg/$1 | sed 's/ //g'
6886d7f5d3SJohn Marino	lvs -o stripes,attr --noheadings $vg/$1 | sed 's/ //g' | grep -q '^1-'
6986d7f5d3SJohn Marino}
7086d7f5d3SJohn Marino
7186d7f5d3SJohn Marinorest_pvs_()
7286d7f5d3SJohn Marino{
7386d7f5d3SJohn Marino	local index=$1
7486d7f5d3SJohn Marino	local num=$2
7586d7f5d3SJohn Marino	local rem=""
7686d7f5d3SJohn Marino	local n
7786d7f5d3SJohn Marino
7886d7f5d3SJohn Marino	for n in $(seq 1 $(($index - 1))) $(seq $(($index + 1)) $num); do
7986d7f5d3SJohn Marino		eval local dev=$\dev$n
8086d7f5d3SJohn Marino		rem="$rem $dev"
8186d7f5d3SJohn Marino	done
8286d7f5d3SJohn Marino
8386d7f5d3SJohn Marino	echo "$rem"
8486d7f5d3SJohn Marino}
8586d7f5d3SJohn Marino
8686d7f5d3SJohn Marino# ---------------------------------------------------------------------
8786d7f5d3SJohn Marino# Initialize PVs and VGs
8886d7f5d3SJohn Marino
8986d7f5d3SJohn Marinoprepare_vg 5
9086d7f5d3SJohn Marino
9186d7f5d3SJohn Marino# ---------------------------------------------------------------------
9286d7f5d3SJohn Marino# Common environment setup/cleanup for each sub testcases
9386d7f5d3SJohn Marino
9486d7f5d3SJohn Marinoprepare_lvs_()
9586d7f5d3SJohn Marino{
9686d7f5d3SJohn Marino	lvremove -ff $vg;
9786d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
9886d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
9986d7f5d3SJohn Marino		return 1
10086d7f5d3SJohn Marino	fi
10186d7f5d3SJohn Marino	:
10286d7f5d3SJohn Marino}
10386d7f5d3SJohn Marino
10486d7f5d3SJohn Marinocheck_and_cleanup_lvs_()
10586d7f5d3SJohn Marino{
10686d7f5d3SJohn Marino	lvs -a -o+devices $vg
10786d7f5d3SJohn Marino	lvremove -ff $vg
10886d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
10986d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
11086d7f5d3SJohn Marino		return 1
11186d7f5d3SJohn Marino	fi
11286d7f5d3SJohn Marino}
11386d7f5d3SJohn Marino
11486d7f5d3SJohn Marinorecover_vg_()
11586d7f5d3SJohn Marino{
11686d7f5d3SJohn Marino	enable_dev $*
11786d7f5d3SJohn Marino	pvcreate -ff $*
11886d7f5d3SJohn Marino	vgextend $vg $*
11986d7f5d3SJohn Marino	check_and_cleanup_lvs_
12086d7f5d3SJohn Marino}
12186d7f5d3SJohn Marino
12286d7f5d3SJohn Marino#COMM "check environment setup/cleanup"
12386d7f5d3SJohn Marinoprepare_lvs_
12486d7f5d3SJohn Marinocheck_and_cleanup_lvs_
12586d7f5d3SJohn Marino
12686d7f5d3SJohn Marino# ---------------------------------------------------------------------
12786d7f5d3SJohn Marino# one of mirror images has failed
12886d7f5d3SJohn Marino
12986d7f5d3SJohn Marino#COMM "basic: fail the 2nd mirror image of 2-way mirrored LV"
13086d7f5d3SJohn Marinoprepare_lvs_
13186d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
13286d7f5d3SJohn Marinolvchange -an $vg/$lv1
13386d7f5d3SJohn Marinoaux mimages_are_on_ $lv1 $dev1 $dev2
13486d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev3
13586d7f5d3SJohn Marinodisable_dev $dev2
13686d7f5d3SJohn Marinovgreduce --removemissing --force $vg
13786d7f5d3SJohn Marinolv_is_linear_ $lv1
13886d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1
13986d7f5d3SJohn Marino
14086d7f5d3SJohn Marino# "cleanup"
14186d7f5d3SJohn Marinorecover_vg_ $dev2
14286d7f5d3SJohn Marino
14386d7f5d3SJohn Marino# ---------------------------------------------------------------------
14486d7f5d3SJohn Marino# LV has 3 images in flat,
14586d7f5d3SJohn Marino# 1 out of 3 images fails
14686d7f5d3SJohn Marino
14786d7f5d3SJohn Marino#COMM test_3way_mirror_fail_1_ <PV# to fail>
14886d7f5d3SJohn Marinotest_3way_mirror_fail_1_()
14986d7f5d3SJohn Marino{
15086d7f5d3SJohn Marino	local index=$1
15186d7f5d3SJohn Marino
15286d7f5d3SJohn Marino	lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev4:0-1
15386d7f5d3SJohn Marino	lvchange -an $vg/$lv1
15486d7f5d3SJohn Marino	aux mimages_are_on_ $lv1 $dev1 $dev2 $dev3
15586d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev4
15686d7f5d3SJohn Marino	eval disable_dev \$dev$index
15786d7f5d3SJohn Marino	vgreduce --removemissing --force $vg
15886d7f5d3SJohn Marino	lvs -a -o+devices $vg
15986d7f5d3SJohn Marino	mimages_are_on_ $lv1 $(rest_pvs_ $index 3)
16086d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev4
16186d7f5d3SJohn Marino}
16286d7f5d3SJohn Marino
16386d7f5d3SJohn Marinofor n in $(seq 1 3); do
16486d7f5d3SJohn Marino	#COMM fail mirror image $(($n - 1)) of 3-way mirrored LV"
16586d7f5d3SJohn Marino	prepare_lvs_
16686d7f5d3SJohn Marino	test_3way_mirror_fail_1_ $n
16786d7f5d3SJohn Marino	eval recover_vg_ \$dev$n
16886d7f5d3SJohn Marinodone
16986d7f5d3SJohn Marino
17086d7f5d3SJohn Marino# ---------------------------------------------------------------------
17186d7f5d3SJohn Marino# LV has 3 images in flat,
17286d7f5d3SJohn Marino# 2 out of 3 images fail
17386d7f5d3SJohn Marino
17486d7f5d3SJohn Marino#COMM test_3way_mirror_fail_2_ <PV# NOT to fail>
17586d7f5d3SJohn Marinotest_3way_mirror_fail_2_()
17686d7f5d3SJohn Marino{
17786d7f5d3SJohn Marino	local index=$1
17886d7f5d3SJohn Marino
17986d7f5d3SJohn Marino	lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev4:0-1
18086d7f5d3SJohn Marino	lvchange -an $vg/$lv1
18186d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev1 $dev2 $dev3
18286d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev4
18386d7f5d3SJohn Marino	rest_pvs_ $index 3
18486d7f5d3SJohn Marino	disable_dev $(rest_pvs_ $index 3)
18586d7f5d3SJohn Marino	vgreduce --force --removemissing $vg
18686d7f5d3SJohn Marino	lvs -a -o+devices $vg
18786d7f5d3SJohn Marino	aux lv_is_linear_ $lv1
18886d7f5d3SJohn Marino	eval lv_is_on_ $lv1 \$dev$n
18986d7f5d3SJohn Marino}
19086d7f5d3SJohn Marino
19186d7f5d3SJohn Marinofor n in $(seq 1 3); do
19286d7f5d3SJohn Marino	#COMM fail mirror images other than mirror image $(($n - 1)) of 3-way mirrored LV
19386d7f5d3SJohn Marino	prepare_lvs_
19486d7f5d3SJohn Marino	test_3way_mirror_fail_2_ $n
19586d7f5d3SJohn Marino	recover_vg_ $(rest_pvs_ $n 3)
19686d7f5d3SJohn Marinodone
19786d7f5d3SJohn Marino
19886d7f5d3SJohn Marino# ---------------------------------------------------------------------
19986d7f5d3SJohn Marino# LV has 4 images, 1 of them is in the temporary mirror for syncing.
20086d7f5d3SJohn Marino# 1 out of 4 images fails
20186d7f5d3SJohn Marino
20286d7f5d3SJohn Marino#COMM test_3way_mirror_plus_1_fail_1_ <PV# to fail>
20386d7f5d3SJohn Marinotest_3way_mirror_plus_1_fail_1_()
20486d7f5d3SJohn Marino{
20586d7f5d3SJohn Marino	local index=$1
20686d7f5d3SJohn Marino
20786d7f5d3SJohn Marino	lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev5:0-1
20886d7f5d3SJohn Marino	lvchange -an $vg/$lv1
20986d7f5d3SJohn Marino	lvconvert -m+1 $vg/$lv1 $dev4
21086d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4
21186d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
21286d7f5d3SJohn Marino	eval disable_dev \$dev$n
21386d7f5d3SJohn Marino	vgreduce --removemissing --force $vg
21486d7f5d3SJohn Marino	lvs -a -o+devices $vg
21586d7f5d3SJohn Marino	mimages_are_on_ $lv1 $(rest_pvs_ $index 4)
21686d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
21786d7f5d3SJohn Marino}
21886d7f5d3SJohn Marino
21986d7f5d3SJohn Marinofor n in $(seq 1 4); do
22086d7f5d3SJohn Marino	#COMM "fail mirror image $(($n - 1)) of 4-way (1 converting) mirrored LV"
22186d7f5d3SJohn Marino	prepare_lvs_
22286d7f5d3SJohn Marino	test_3way_mirror_plus_1_fail_1_ $n
22386d7f5d3SJohn Marino	eval recover_vg_ \$dev$n
22486d7f5d3SJohn Marinodone
22586d7f5d3SJohn Marino
22686d7f5d3SJohn Marino# ---------------------------------------------------------------------
22786d7f5d3SJohn Marino# LV has 4 images, 1 of them is in the temporary mirror for syncing.
22886d7f5d3SJohn Marino# 3 out of 4 images fail
22986d7f5d3SJohn Marino
23086d7f5d3SJohn Marino#COMM test_3way_mirror_plus_1_fail_3_ <PV# NOT to fail>
23186d7f5d3SJohn Marinotest_3way_mirror_plus_1_fail_3_()
23286d7f5d3SJohn Marino{
23386d7f5d3SJohn Marino	local index=$1
23486d7f5d3SJohn Marino
23586d7f5d3SJohn Marino	lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev5:0-1
23686d7f5d3SJohn Marino	lvchange -an $vg/$lv1
23786d7f5d3SJohn Marino	lvconvert -m+1 $vg/$lv1 $dev4
23886d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4
23986d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
24086d7f5d3SJohn Marino	disable_dev $(rest_pvs_ $index 4)
24186d7f5d3SJohn Marino	vgreduce --removemissing --force $vg
24286d7f5d3SJohn Marino	lvs -a -o+devices $vg
24386d7f5d3SJohn Marino	eval local dev=\$dev$n
24486d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev || lv_is_on_ $lv1 $dev
24586d7f5d3SJohn Marino	not mirrorlog_is_on_ $lv1 $dev5
24686d7f5d3SJohn Marino}
24786d7f5d3SJohn Marino
24886d7f5d3SJohn Marinofor n in $(seq 1 4); do
24986d7f5d3SJohn Marino	#COMM "fail mirror images other than mirror image $(($n - 1)) of 4-way (1 converting) mirrored LV"
25086d7f5d3SJohn Marino	prepare_lvs_
25186d7f5d3SJohn Marino	test_3way_mirror_plus_1_fail_3_ $n
25286d7f5d3SJohn Marino	recover_vg_ $(rest_pvs_ $n 4)
25386d7f5d3SJohn Marinodone
25486d7f5d3SJohn Marino
25586d7f5d3SJohn Marino# ---------------------------------------------------------------------
25686d7f5d3SJohn Marino# LV has 4 images, 2 of them are in the temporary mirror for syncing.
25786d7f5d3SJohn Marino# 1 out of 4 images fail
25886d7f5d3SJohn Marino
25986d7f5d3SJohn Marino# test_2way_mirror_plus_2_fail_1_ <PV# to fail>
26086d7f5d3SJohn Marinotest_2way_mirror_plus_2_fail_1_()
26186d7f5d3SJohn Marino{
26286d7f5d3SJohn Marino	local index=$1
26386d7f5d3SJohn Marino
26486d7f5d3SJohn Marino	lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
26586d7f5d3SJohn Marino	lvchange -an $vg/$lv1
26686d7f5d3SJohn Marino	lvconvert -m+2 $vg/$lv1 $dev3 $dev4
26786d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4
26886d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
26986d7f5d3SJohn Marino	eval disable_dev \$dev$n
27086d7f5d3SJohn Marino	vgreduce --removemissing --force $vg
27186d7f5d3SJohn Marino	lvs -a -o+devices $vg
27286d7f5d3SJohn Marino	mimages_are_on_ $lv1 $(rest_pvs_ $index 4)
27386d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
27486d7f5d3SJohn Marino}
27586d7f5d3SJohn Marino
27686d7f5d3SJohn Marinofor n in $(seq 1 4); do
27786d7f5d3SJohn Marino	#COMM "fail mirror image $(($n - 1)) of 4-way (2 converting) mirrored LV"
27886d7f5d3SJohn Marino	prepare_lvs_
27986d7f5d3SJohn Marino	test_2way_mirror_plus_2_fail_1_ $n
28086d7f5d3SJohn Marino	eval recover_vg_ \$dev$n
28186d7f5d3SJohn Marinodone
28286d7f5d3SJohn Marino
28386d7f5d3SJohn Marino# ---------------------------------------------------------------------
28486d7f5d3SJohn Marino# LV has 4 images, 2 of them are in the temporary mirror for syncing.
28586d7f5d3SJohn Marino# 3 out of 4 images fail
28686d7f5d3SJohn Marino
28786d7f5d3SJohn Marino# test_2way_mirror_plus_2_fail_3_ <PV# NOT to fail>
28886d7f5d3SJohn Marinotest_2way_mirror_plus_2_fail_3_()
28986d7f5d3SJohn Marino{
29086d7f5d3SJohn Marino	local index=$1
29186d7f5d3SJohn Marino
29286d7f5d3SJohn Marino	lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
29386d7f5d3SJohn Marino	lvchange -an $vg/$lv1
29486d7f5d3SJohn Marino	lvconvert -m+2 $vg/$lv1 $dev3 $dev4
29586d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4
29686d7f5d3SJohn Marino	mirrorlog_is_on_ $lv1 $dev5
29786d7f5d3SJohn Marino	disable_dev $(rest_pvs_ $index 4)
29886d7f5d3SJohn Marino	vgreduce --removemissing --force $vg
29986d7f5d3SJohn Marino	lvs -a -o+devices $vg
30086d7f5d3SJohn Marino	eval local dev=\$dev$n
30186d7f5d3SJohn Marino	mimages_are_on_ $lv1 $dev || lv_is_on_ $lv1 $dev
30286d7f5d3SJohn Marino	not mirrorlog_is_on_ $lv1 $dev5
30386d7f5d3SJohn Marino}
30486d7f5d3SJohn Marino
30586d7f5d3SJohn Marinofor n in $(seq 1 4); do
30686d7f5d3SJohn Marino	#COMM "fail mirror images other than mirror image $(($n - 1)) of 4-way (2 converting) mirrored LV"
30786d7f5d3SJohn Marino	prepare_lvs_
30886d7f5d3SJohn Marino	test_2way_mirror_plus_2_fail_3_ $n
30986d7f5d3SJohn Marino	recover_vg_ $(rest_pvs_ $n 4)
31086d7f5d3SJohn Marinodone
31186d7f5d3SJohn Marino
31286d7f5d3SJohn Marino# ---------------------------------------------------------------------
31386d7f5d3SJohn Marino# log device is gone (flat mirror and stacked mirror)
31486d7f5d3SJohn Marino
31586d7f5d3SJohn Marino#COMM "fail mirror log of 2-way mirrored LV"
31686d7f5d3SJohn Marinoprepare_lvs_
31786d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
31886d7f5d3SJohn Marinolvchange -an $vg/$lv1
31986d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
32086d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
32186d7f5d3SJohn Marinodisable_dev $dev5
32286d7f5d3SJohn Marinovgreduce --removemissing --force $vg
32386d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
32486d7f5d3SJohn Marinonot mirrorlog_is_on_ $lv1 $dev5
32586d7f5d3SJohn Marinorecover_vg_ $dev5
32686d7f5d3SJohn Marino
32786d7f5d3SJohn Marino#COMM "fail mirror log of 3-way (1 converting) mirrored LV"
32886d7f5d3SJohn Marinoprepare_lvs_
32986d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
33086d7f5d3SJohn Marinolvchange -an $vg/$lv1
33186d7f5d3SJohn Marinolvconvert -m+1 $vg/$lv1 $dev3
33286d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3
33386d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
33486d7f5d3SJohn Marinodisable_dev $dev5
33586d7f5d3SJohn Marinovgreduce --removemissing --force $vg
33686d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3
33786d7f5d3SJohn Marinonot mirrorlog_is_on_ $lv1 $dev5
33886d7f5d3SJohn Marinorecover_vg_ $dev5
33986d7f5d3SJohn Marino
34086d7f5d3SJohn Marino# ---------------------------------------------------------------------
34186d7f5d3SJohn Marino# all images are gone (flat mirror and stacked mirror)
34286d7f5d3SJohn Marino
34386d7f5d3SJohn Marino#COMM "fail all mirror images of 2-way mirrored LV"
34486d7f5d3SJohn Marinoprepare_lvs_
34586d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
34686d7f5d3SJohn Marinolvchange -an $vg/$lv1
34786d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
34886d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
34986d7f5d3SJohn Marinodisable_dev $dev1 $dev2
35086d7f5d3SJohn Marinovgreduce --removemissing --force $vg
35186d7f5d3SJohn Marinonot lvs $vg/$lv1
35286d7f5d3SJohn Marinorecover_vg_ $dev1 $dev2
35386d7f5d3SJohn Marino
35486d7f5d3SJohn Marino#COMM "fail all mirror images of 3-way (1 converting) mirrored LV"
35586d7f5d3SJohn Marinoprepare_lvs_
35686d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
35786d7f5d3SJohn Marinolvchange -an $vg/$lv1
35886d7f5d3SJohn Marinolvconvert -m+1 $vg/$lv1 $dev3
35986d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3
36086d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
36186d7f5d3SJohn Marinodisable_dev $dev1 $dev2 $dev3
36286d7f5d3SJohn Marinovgreduce --removemissing --force $vg
36386d7f5d3SJohn Marinonot lvs $vg/$lv1
36486d7f5d3SJohn Marinorecover_vg_ $dev1 $dev2 $dev3
36586d7f5d3SJohn Marino
36686d7f5d3SJohn Marino# ---------------------------------------------------------------------
36786d7f5d3SJohn Marino# Multiple LVs
36886d7f5d3SJohn Marino
36986d7f5d3SJohn Marino#COMM "fail a mirror image of one of mirrored LV"
37086d7f5d3SJohn Marinoprepare_lvs_
37186d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
37286d7f5d3SJohn Marinolvchange -an $vg/$lv1
37386d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv2 $vg $dev3 $dev4 $dev5:1-1
37486d7f5d3SJohn Marinolvchange -an $vg/$lv2
37586d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
37686d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4
37786d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
37886d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5
37986d7f5d3SJohn Marinodisable_dev $dev2
38086d7f5d3SJohn Marinovgreduce --removemissing --force $vg
38186d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4
38286d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5
38386d7f5d3SJohn Marinolv_is_linear_ $lv1
38486d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1
38586d7f5d3SJohn Marinorecover_vg_ $dev2
38686d7f5d3SJohn Marino
38786d7f5d3SJohn Marino#COMM "fail mirror images, one for each mirrored LV"
38886d7f5d3SJohn Marinoprepare_lvs_
38986d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
39086d7f5d3SJohn Marinolvchange -an $vg/$lv1
39186d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv2 $vg $dev3 $dev4 $dev5:1-1
39286d7f5d3SJohn Marinolvchange -an $vg/$lv2
39386d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
39486d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4
39586d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
39686d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5
39786d7f5d3SJohn Marinodisable_dev $dev2
39886d7f5d3SJohn Marinodisable_dev $dev4
39986d7f5d3SJohn Marinovgreduce --removemissing --force $vg
40086d7f5d3SJohn Marinolv_is_linear_ $lv1
40186d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1
40286d7f5d3SJohn Marinolv_is_linear_ $lv2
40386d7f5d3SJohn Marinolv_is_on_ $lv2 $dev3
40486d7f5d3SJohn Marinorecover_vg_ $dev2 $dev4
40586d7f5d3SJohn Marino
40686d7f5d3SJohn Marino# ---------------------------------------------------------------------
40786d7f5d3SJohn Marino# no failure
40886d7f5d3SJohn Marino
40986d7f5d3SJohn Marino#COMM "no failures"
41086d7f5d3SJohn Marinoprepare_lvs_
41186d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1
41286d7f5d3SJohn Marinolvchange -an $vg/$lv1
41386d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
41486d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
41586d7f5d3SJohn Marinovgreduce --removemissing --force $vg
41686d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2
41786d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5
41886d7f5d3SJohn Marinocheck_and_cleanup_lvs_
41986d7f5d3SJohn Marino
42086d7f5d3SJohn Marino# ---------------------------------------------------------------------
42186d7f5d3SJohn Marino
422