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