1*86d7f5d3SJohn Marino# Copyright (C) 2008 Red Hat, Inc. All rights reserved. 2*86d7f5d3SJohn Marino# Copyright (C) 2007 NEC Corporation 3*86d7f5d3SJohn Marino# 4*86d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use, 5*86d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions 6*86d7f5d3SJohn Marino# of the GNU General Public License v.2. 7*86d7f5d3SJohn Marino# 8*86d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License 9*86d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation, 10*86d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 11*86d7f5d3SJohn Marino 12*86d7f5d3SJohn Marinotest_description="ensure that 'vgreduce --removemissing' works on mirrored LV" 13*86d7f5d3SJohn Marino 14*86d7f5d3SJohn Marino. ./test-utils.sh 15*86d7f5d3SJohn Marino 16*86d7f5d3SJohn Marinodmsetup_has_dm_devdir_support_ || exit 200 17*86d7f5d3SJohn Marino 18*86d7f5d3SJohn Marinolv_is_on_ () 19*86d7f5d3SJohn Marino{ 20*86d7f5d3SJohn Marino local lv=$vg/$1 21*86d7f5d3SJohn Marino shift 22*86d7f5d3SJohn Marino local pvs=$* 23*86d7f5d3SJohn Marino 24*86d7f5d3SJohn Marino echo "Check if $lv is exactly on PVs $pvs" 25*86d7f5d3SJohn Marino rm -f out1 out2 26*86d7f5d3SJohn Marino echo $pvs | sed 's/ /\n/g' | sort | uniq > out1 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino lvs -a -odevices --noheadings $lv | \ 29*86d7f5d3SJohn Marino sed 's/([^)]*)//g; s/[ ,]/\n/g' | sort | uniq > out2 30*86d7f5d3SJohn Marino 31*86d7f5d3SJohn Marino diff --ignore-blank-lines out1 out2 32*86d7f5d3SJohn Marino} 33*86d7f5d3SJohn Marino 34*86d7f5d3SJohn Marinomimages_are_on_ () 35*86d7f5d3SJohn Marino{ 36*86d7f5d3SJohn Marino local lv=$1 37*86d7f5d3SJohn Marino shift 38*86d7f5d3SJohn Marino local pvs="$*" 39*86d7f5d3SJohn Marino local mimages 40*86d7f5d3SJohn Marino local i 41*86d7f5d3SJohn Marino 42*86d7f5d3SJohn Marino echo "Check if mirror images of $lv are on PVs $pvs" 43*86d7f5d3SJohn Marino rm -f out1 out2 44*86d7f5d3SJohn Marino echo $pvs | sed 's/ /\n/g' | sort | uniq > out1 45*86d7f5d3SJohn Marino 46*86d7f5d3SJohn Marino mimages=$(lvs --noheadings -a -o lv_name $vg | grep "${lv}_mimage_" | \ 47*86d7f5d3SJohn Marino sed 's/\[//g; s/\]//g') 48*86d7f5d3SJohn Marino for i in $mimages; do 49*86d7f5d3SJohn Marino echo "Checking $vg/$i" 50*86d7f5d3SJohn Marino lvs -a -odevices --noheadings $vg/$i | \ 51*86d7f5d3SJohn Marino sed 's/([^)]*)//g; s/ //g; s/,/ /g' | sort | uniq >> out2 52*86d7f5d3SJohn Marino done 53*86d7f5d3SJohn Marino 54*86d7f5d3SJohn Marino diff --ignore-blank-lines out1 out2 55*86d7f5d3SJohn Marino} 56*86d7f5d3SJohn Marino 57*86d7f5d3SJohn Marinomirrorlog_is_on_() 58*86d7f5d3SJohn Marino{ 59*86d7f5d3SJohn Marino local lv="$1"_mlog 60*86d7f5d3SJohn Marino shift 61*86d7f5d3SJohn Marino lv_is_on_ $lv $* 62*86d7f5d3SJohn Marino} 63*86d7f5d3SJohn Marino 64*86d7f5d3SJohn Marinolv_is_linear_() 65*86d7f5d3SJohn Marino{ 66*86d7f5d3SJohn Marino echo "Check if $1 is linear LV (i.e. not a mirror)" 67*86d7f5d3SJohn Marino lvs -o stripes,attr --noheadings $vg/$1 | sed 's/ //g' 68*86d7f5d3SJohn Marino lvs -o stripes,attr --noheadings $vg/$1 | sed 's/ //g' | grep -q '^1-' 69*86d7f5d3SJohn Marino} 70*86d7f5d3SJohn Marino 71*86d7f5d3SJohn Marinorest_pvs_() 72*86d7f5d3SJohn Marino{ 73*86d7f5d3SJohn Marino local index=$1 74*86d7f5d3SJohn Marino local num=$2 75*86d7f5d3SJohn Marino local rem="" 76*86d7f5d3SJohn Marino local n 77*86d7f5d3SJohn Marino 78*86d7f5d3SJohn Marino for n in $(seq 1 $(($index - 1))) $(seq $(($index + 1)) $num); do 79*86d7f5d3SJohn Marino eval local dev=$\dev$n 80*86d7f5d3SJohn Marino rem="$rem $dev" 81*86d7f5d3SJohn Marino done 82*86d7f5d3SJohn Marino 83*86d7f5d3SJohn Marino echo "$rem" 84*86d7f5d3SJohn Marino} 85*86d7f5d3SJohn Marino 86*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 87*86d7f5d3SJohn Marino# Initialize PVs and VGs 88*86d7f5d3SJohn Marino 89*86d7f5d3SJohn Marinoprepare_vg 5 90*86d7f5d3SJohn Marino 91*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 92*86d7f5d3SJohn Marino# Common environment setup/cleanup for each sub testcases 93*86d7f5d3SJohn Marino 94*86d7f5d3SJohn Marinoprepare_lvs_() 95*86d7f5d3SJohn Marino{ 96*86d7f5d3SJohn Marino lvremove -ff $vg; 97*86d7f5d3SJohn Marino if dmsetup table|grep $vg; then 98*86d7f5d3SJohn Marino echo "ERROR: lvremove did leave some some mappings in DM behind!" 99*86d7f5d3SJohn Marino return 1 100*86d7f5d3SJohn Marino fi 101*86d7f5d3SJohn Marino : 102*86d7f5d3SJohn Marino} 103*86d7f5d3SJohn Marino 104*86d7f5d3SJohn Marinocheck_and_cleanup_lvs_() 105*86d7f5d3SJohn Marino{ 106*86d7f5d3SJohn Marino lvs -a -o+devices $vg 107*86d7f5d3SJohn Marino lvremove -ff $vg 108*86d7f5d3SJohn Marino if dmsetup table|grep $vg; then 109*86d7f5d3SJohn Marino echo "ERROR: lvremove did leave some some mappings in DM behind!" 110*86d7f5d3SJohn Marino return 1 111*86d7f5d3SJohn Marino fi 112*86d7f5d3SJohn Marino} 113*86d7f5d3SJohn Marino 114*86d7f5d3SJohn Marinorecover_vg_() 115*86d7f5d3SJohn Marino{ 116*86d7f5d3SJohn Marino enable_dev $* 117*86d7f5d3SJohn Marino pvcreate -ff $* 118*86d7f5d3SJohn Marino vgextend $vg $* 119*86d7f5d3SJohn Marino check_and_cleanup_lvs_ 120*86d7f5d3SJohn Marino} 121*86d7f5d3SJohn Marino 122*86d7f5d3SJohn Marino#COMM "check environment setup/cleanup" 123*86d7f5d3SJohn Marinoprepare_lvs_ 124*86d7f5d3SJohn Marinocheck_and_cleanup_lvs_ 125*86d7f5d3SJohn Marino 126*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 127*86d7f5d3SJohn Marino# one of mirror images has failed 128*86d7f5d3SJohn Marino 129*86d7f5d3SJohn Marino#COMM "basic: fail the 2nd mirror image of 2-way mirrored LV" 130*86d7f5d3SJohn Marinoprepare_lvs_ 131*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1 132*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 133*86d7f5d3SJohn Marinoaux mimages_are_on_ $lv1 $dev1 $dev2 134*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev3 135*86d7f5d3SJohn Marinodisable_dev $dev2 136*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 137*86d7f5d3SJohn Marinolv_is_linear_ $lv1 138*86d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1 139*86d7f5d3SJohn Marino 140*86d7f5d3SJohn Marino# "cleanup" 141*86d7f5d3SJohn Marinorecover_vg_ $dev2 142*86d7f5d3SJohn Marino 143*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 144*86d7f5d3SJohn Marino# LV has 3 images in flat, 145*86d7f5d3SJohn Marino# 1 out of 3 images fails 146*86d7f5d3SJohn Marino 147*86d7f5d3SJohn Marino#COMM test_3way_mirror_fail_1_ <PV# to fail> 148*86d7f5d3SJohn Marinotest_3way_mirror_fail_1_() 149*86d7f5d3SJohn Marino{ 150*86d7f5d3SJohn Marino local index=$1 151*86d7f5d3SJohn Marino 152*86d7f5d3SJohn Marino lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev4:0-1 153*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 154*86d7f5d3SJohn Marino aux mimages_are_on_ $lv1 $dev1 $dev2 $dev3 155*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev4 156*86d7f5d3SJohn Marino eval disable_dev \$dev$index 157*86d7f5d3SJohn Marino vgreduce --removemissing --force $vg 158*86d7f5d3SJohn Marino lvs -a -o+devices $vg 159*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $(rest_pvs_ $index 3) 160*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev4 161*86d7f5d3SJohn Marino} 162*86d7f5d3SJohn Marino 163*86d7f5d3SJohn Marinofor n in $(seq 1 3); do 164*86d7f5d3SJohn Marino #COMM fail mirror image $(($n - 1)) of 3-way mirrored LV" 165*86d7f5d3SJohn Marino prepare_lvs_ 166*86d7f5d3SJohn Marino test_3way_mirror_fail_1_ $n 167*86d7f5d3SJohn Marino eval recover_vg_ \$dev$n 168*86d7f5d3SJohn Marinodone 169*86d7f5d3SJohn Marino 170*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 171*86d7f5d3SJohn Marino# LV has 3 images in flat, 172*86d7f5d3SJohn Marino# 2 out of 3 images fail 173*86d7f5d3SJohn Marino 174*86d7f5d3SJohn Marino#COMM test_3way_mirror_fail_2_ <PV# NOT to fail> 175*86d7f5d3SJohn Marinotest_3way_mirror_fail_2_() 176*86d7f5d3SJohn Marino{ 177*86d7f5d3SJohn Marino local index=$1 178*86d7f5d3SJohn Marino 179*86d7f5d3SJohn Marino lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev4:0-1 180*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 181*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev1 $dev2 $dev3 182*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev4 183*86d7f5d3SJohn Marino rest_pvs_ $index 3 184*86d7f5d3SJohn Marino disable_dev $(rest_pvs_ $index 3) 185*86d7f5d3SJohn Marino vgreduce --force --removemissing $vg 186*86d7f5d3SJohn Marino lvs -a -o+devices $vg 187*86d7f5d3SJohn Marino aux lv_is_linear_ $lv1 188*86d7f5d3SJohn Marino eval lv_is_on_ $lv1 \$dev$n 189*86d7f5d3SJohn Marino} 190*86d7f5d3SJohn Marino 191*86d7f5d3SJohn Marinofor n in $(seq 1 3); do 192*86d7f5d3SJohn Marino #COMM fail mirror images other than mirror image $(($n - 1)) of 3-way mirrored LV 193*86d7f5d3SJohn Marino prepare_lvs_ 194*86d7f5d3SJohn Marino test_3way_mirror_fail_2_ $n 195*86d7f5d3SJohn Marino recover_vg_ $(rest_pvs_ $n 3) 196*86d7f5d3SJohn Marinodone 197*86d7f5d3SJohn Marino 198*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 199*86d7f5d3SJohn Marino# LV has 4 images, 1 of them is in the temporary mirror for syncing. 200*86d7f5d3SJohn Marino# 1 out of 4 images fails 201*86d7f5d3SJohn Marino 202*86d7f5d3SJohn Marino#COMM test_3way_mirror_plus_1_fail_1_ <PV# to fail> 203*86d7f5d3SJohn Marinotest_3way_mirror_plus_1_fail_1_() 204*86d7f5d3SJohn Marino{ 205*86d7f5d3SJohn Marino local index=$1 206*86d7f5d3SJohn Marino 207*86d7f5d3SJohn Marino lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev5:0-1 208*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 209*86d7f5d3SJohn Marino lvconvert -m+1 $vg/$lv1 $dev4 210*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4 211*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 212*86d7f5d3SJohn Marino eval disable_dev \$dev$n 213*86d7f5d3SJohn Marino vgreduce --removemissing --force $vg 214*86d7f5d3SJohn Marino lvs -a -o+devices $vg 215*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $(rest_pvs_ $index 4) 216*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 217*86d7f5d3SJohn Marino} 218*86d7f5d3SJohn Marino 219*86d7f5d3SJohn Marinofor n in $(seq 1 4); do 220*86d7f5d3SJohn Marino #COMM "fail mirror image $(($n - 1)) of 4-way (1 converting) mirrored LV" 221*86d7f5d3SJohn Marino prepare_lvs_ 222*86d7f5d3SJohn Marino test_3way_mirror_plus_1_fail_1_ $n 223*86d7f5d3SJohn Marino eval recover_vg_ \$dev$n 224*86d7f5d3SJohn Marinodone 225*86d7f5d3SJohn Marino 226*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 227*86d7f5d3SJohn Marino# LV has 4 images, 1 of them is in the temporary mirror for syncing. 228*86d7f5d3SJohn Marino# 3 out of 4 images fail 229*86d7f5d3SJohn Marino 230*86d7f5d3SJohn Marino#COMM test_3way_mirror_plus_1_fail_3_ <PV# NOT to fail> 231*86d7f5d3SJohn Marinotest_3way_mirror_plus_1_fail_3_() 232*86d7f5d3SJohn Marino{ 233*86d7f5d3SJohn Marino local index=$1 234*86d7f5d3SJohn Marino 235*86d7f5d3SJohn Marino lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev3 $dev5:0-1 236*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 237*86d7f5d3SJohn Marino lvconvert -m+1 $vg/$lv1 $dev4 238*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4 239*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 240*86d7f5d3SJohn Marino disable_dev $(rest_pvs_ $index 4) 241*86d7f5d3SJohn Marino vgreduce --removemissing --force $vg 242*86d7f5d3SJohn Marino lvs -a -o+devices $vg 243*86d7f5d3SJohn Marino eval local dev=\$dev$n 244*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev || lv_is_on_ $lv1 $dev 245*86d7f5d3SJohn Marino not mirrorlog_is_on_ $lv1 $dev5 246*86d7f5d3SJohn Marino} 247*86d7f5d3SJohn Marino 248*86d7f5d3SJohn Marinofor n in $(seq 1 4); do 249*86d7f5d3SJohn Marino #COMM "fail mirror images other than mirror image $(($n - 1)) of 4-way (1 converting) mirrored LV" 250*86d7f5d3SJohn Marino prepare_lvs_ 251*86d7f5d3SJohn Marino test_3way_mirror_plus_1_fail_3_ $n 252*86d7f5d3SJohn Marino recover_vg_ $(rest_pvs_ $n 4) 253*86d7f5d3SJohn Marinodone 254*86d7f5d3SJohn Marino 255*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 256*86d7f5d3SJohn Marino# LV has 4 images, 2 of them are in the temporary mirror for syncing. 257*86d7f5d3SJohn Marino# 1 out of 4 images fail 258*86d7f5d3SJohn Marino 259*86d7f5d3SJohn Marino# test_2way_mirror_plus_2_fail_1_ <PV# to fail> 260*86d7f5d3SJohn Marinotest_2way_mirror_plus_2_fail_1_() 261*86d7f5d3SJohn Marino{ 262*86d7f5d3SJohn Marino local index=$1 263*86d7f5d3SJohn Marino 264*86d7f5d3SJohn Marino lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 265*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 266*86d7f5d3SJohn Marino lvconvert -m+2 $vg/$lv1 $dev3 $dev4 267*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4 268*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 269*86d7f5d3SJohn Marino eval disable_dev \$dev$n 270*86d7f5d3SJohn Marino vgreduce --removemissing --force $vg 271*86d7f5d3SJohn Marino lvs -a -o+devices $vg 272*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $(rest_pvs_ $index 4) 273*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 274*86d7f5d3SJohn Marino} 275*86d7f5d3SJohn Marino 276*86d7f5d3SJohn Marinofor n in $(seq 1 4); do 277*86d7f5d3SJohn Marino #COMM "fail mirror image $(($n - 1)) of 4-way (2 converting) mirrored LV" 278*86d7f5d3SJohn Marino prepare_lvs_ 279*86d7f5d3SJohn Marino test_2way_mirror_plus_2_fail_1_ $n 280*86d7f5d3SJohn Marino eval recover_vg_ \$dev$n 281*86d7f5d3SJohn Marinodone 282*86d7f5d3SJohn Marino 283*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 284*86d7f5d3SJohn Marino# LV has 4 images, 2 of them are in the temporary mirror for syncing. 285*86d7f5d3SJohn Marino# 3 out of 4 images fail 286*86d7f5d3SJohn Marino 287*86d7f5d3SJohn Marino# test_2way_mirror_plus_2_fail_3_ <PV# NOT to fail> 288*86d7f5d3SJohn Marinotest_2way_mirror_plus_2_fail_3_() 289*86d7f5d3SJohn Marino{ 290*86d7f5d3SJohn Marino local index=$1 291*86d7f5d3SJohn Marino 292*86d7f5d3SJohn Marino lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 293*86d7f5d3SJohn Marino lvchange -an $vg/$lv1 294*86d7f5d3SJohn Marino lvconvert -m+2 $vg/$lv1 $dev3 $dev4 295*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev1 $dev2 $dev3 $dev4 296*86d7f5d3SJohn Marino mirrorlog_is_on_ $lv1 $dev5 297*86d7f5d3SJohn Marino disable_dev $(rest_pvs_ $index 4) 298*86d7f5d3SJohn Marino vgreduce --removemissing --force $vg 299*86d7f5d3SJohn Marino lvs -a -o+devices $vg 300*86d7f5d3SJohn Marino eval local dev=\$dev$n 301*86d7f5d3SJohn Marino mimages_are_on_ $lv1 $dev || lv_is_on_ $lv1 $dev 302*86d7f5d3SJohn Marino not mirrorlog_is_on_ $lv1 $dev5 303*86d7f5d3SJohn Marino} 304*86d7f5d3SJohn Marino 305*86d7f5d3SJohn Marinofor n in $(seq 1 4); do 306*86d7f5d3SJohn Marino #COMM "fail mirror images other than mirror image $(($n - 1)) of 4-way (2 converting) mirrored LV" 307*86d7f5d3SJohn Marino prepare_lvs_ 308*86d7f5d3SJohn Marino test_2way_mirror_plus_2_fail_3_ $n 309*86d7f5d3SJohn Marino recover_vg_ $(rest_pvs_ $n 4) 310*86d7f5d3SJohn Marinodone 311*86d7f5d3SJohn Marino 312*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 313*86d7f5d3SJohn Marino# log device is gone (flat mirror and stacked mirror) 314*86d7f5d3SJohn Marino 315*86d7f5d3SJohn Marino#COMM "fail mirror log of 2-way mirrored LV" 316*86d7f5d3SJohn Marinoprepare_lvs_ 317*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 318*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 319*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 320*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 321*86d7f5d3SJohn Marinodisable_dev $dev5 322*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 323*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 324*86d7f5d3SJohn Marinonot mirrorlog_is_on_ $lv1 $dev5 325*86d7f5d3SJohn Marinorecover_vg_ $dev5 326*86d7f5d3SJohn Marino 327*86d7f5d3SJohn Marino#COMM "fail mirror log of 3-way (1 converting) mirrored LV" 328*86d7f5d3SJohn Marinoprepare_lvs_ 329*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 330*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 331*86d7f5d3SJohn Marinolvconvert -m+1 $vg/$lv1 $dev3 332*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3 333*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 334*86d7f5d3SJohn Marinodisable_dev $dev5 335*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 336*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3 337*86d7f5d3SJohn Marinonot mirrorlog_is_on_ $lv1 $dev5 338*86d7f5d3SJohn Marinorecover_vg_ $dev5 339*86d7f5d3SJohn Marino 340*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 341*86d7f5d3SJohn Marino# all images are gone (flat mirror and stacked mirror) 342*86d7f5d3SJohn Marino 343*86d7f5d3SJohn Marino#COMM "fail all mirror images of 2-way mirrored LV" 344*86d7f5d3SJohn Marinoprepare_lvs_ 345*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 346*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 347*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 348*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 349*86d7f5d3SJohn Marinodisable_dev $dev1 $dev2 350*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 351*86d7f5d3SJohn Marinonot lvs $vg/$lv1 352*86d7f5d3SJohn Marinorecover_vg_ $dev1 $dev2 353*86d7f5d3SJohn Marino 354*86d7f5d3SJohn Marino#COMM "fail all mirror images of 3-way (1 converting) mirrored LV" 355*86d7f5d3SJohn Marinoprepare_lvs_ 356*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 357*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 358*86d7f5d3SJohn Marinolvconvert -m+1 $vg/$lv1 $dev3 359*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 $dev3 360*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 361*86d7f5d3SJohn Marinodisable_dev $dev1 $dev2 $dev3 362*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 363*86d7f5d3SJohn Marinonot lvs $vg/$lv1 364*86d7f5d3SJohn Marinorecover_vg_ $dev1 $dev2 $dev3 365*86d7f5d3SJohn Marino 366*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 367*86d7f5d3SJohn Marino# Multiple LVs 368*86d7f5d3SJohn Marino 369*86d7f5d3SJohn Marino#COMM "fail a mirror image of one of mirrored LV" 370*86d7f5d3SJohn Marinoprepare_lvs_ 371*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 372*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 373*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv2 $vg $dev3 $dev4 $dev5:1-1 374*86d7f5d3SJohn Marinolvchange -an $vg/$lv2 375*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 376*86d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4 377*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 378*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5 379*86d7f5d3SJohn Marinodisable_dev $dev2 380*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 381*86d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4 382*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5 383*86d7f5d3SJohn Marinolv_is_linear_ $lv1 384*86d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1 385*86d7f5d3SJohn Marinorecover_vg_ $dev2 386*86d7f5d3SJohn Marino 387*86d7f5d3SJohn Marino#COMM "fail mirror images, one for each mirrored LV" 388*86d7f5d3SJohn Marinoprepare_lvs_ 389*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 390*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 391*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv2 $vg $dev3 $dev4 $dev5:1-1 392*86d7f5d3SJohn Marinolvchange -an $vg/$lv2 393*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 394*86d7f5d3SJohn Marinomimages_are_on_ $lv2 $dev3 $dev4 395*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 396*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv2 $dev5 397*86d7f5d3SJohn Marinodisable_dev $dev2 398*86d7f5d3SJohn Marinodisable_dev $dev4 399*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 400*86d7f5d3SJohn Marinolv_is_linear_ $lv1 401*86d7f5d3SJohn Marinolv_is_on_ $lv1 $dev1 402*86d7f5d3SJohn Marinolv_is_linear_ $lv2 403*86d7f5d3SJohn Marinolv_is_on_ $lv2 $dev3 404*86d7f5d3SJohn Marinorecover_vg_ $dev2 $dev4 405*86d7f5d3SJohn Marino 406*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 407*86d7f5d3SJohn Marino# no failure 408*86d7f5d3SJohn Marino 409*86d7f5d3SJohn Marino#COMM "no failures" 410*86d7f5d3SJohn Marinoprepare_lvs_ 411*86d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev5:0-1 412*86d7f5d3SJohn Marinolvchange -an $vg/$lv1 413*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 414*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 415*86d7f5d3SJohn Marinovgreduce --removemissing --force $vg 416*86d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev1 $dev2 417*86d7f5d3SJohn Marinomirrorlog_is_on_ $lv1 $dev5 418*86d7f5d3SJohn Marinocheck_and_cleanup_lvs_ 419*86d7f5d3SJohn Marino 420*86d7f5d3SJohn Marino# --------------------------------------------------------------------- 421*86d7f5d3SJohn Marino 422