xref: /dflybsd-src/contrib/lvm2/dist/test/t-mirror-lvconvert-usage.sh (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
286d7f5d3SJohn Marino#
386d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use,
486d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions
586d7f5d3SJohn Marino# of the GNU General Public License v.2.
686d7f5d3SJohn Marino#
786d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License
886d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation,
986d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1086d7f5d3SJohn Marino
1186d7f5d3SJohn Marino. ./test-utils.sh
1286d7f5d3SJohn Marino
1386d7f5d3SJohn Marinodmsetup_has_dm_devdir_support_ || exit 200
1486d7f5d3SJohn Marino
1586d7f5d3SJohn Marinoaux prepare_vg 5
1686d7f5d3SJohn Marino
1786d7f5d3SJohn Marino
1886d7f5d3SJohn Marinolv_is_on_() {
1986d7f5d3SJohn Marino	local lv=$1 #allready vg/lv
2086d7f5d3SJohn Marino	shift 1
2186d7f5d3SJohn Marino	lvs -a -odevices --noheadings $lv | sed 's/,/\n/g' > out
2286d7f5d3SJohn Marino	#is on all specified devs
2386d7f5d3SJohn Marino	for d in $*; do grep "$d(" out; done
2486d7f5d3SJohn Marino	#isn't on any other dev (we are set -e remember)
2586d7f5d3SJohn Marino	for d in $*; do ! grep -v "$d(" out; done
2686d7f5d3SJohn Marino	return 0
2786d7f5d3SJohn Marino}
2886d7f5d3SJohn Marino
2986d7f5d3SJohn Marinomimages_are_on_ ()
3086d7f5d3SJohn Marino{
3186d7f5d3SJohn Marino	local lv=$1
3286d7f5d3SJohn Marino	shift
3386d7f5d3SJohn Marino	local pvs="$*"
3486d7f5d3SJohn Marino	local mimages
3586d7f5d3SJohn Marino	local i
3686d7f5d3SJohn Marino
3786d7f5d3SJohn Marino	echo "Check if mirror images of $lv are on PVs $pvs"
3886d7f5d3SJohn Marino	rm -f out1 out2
3986d7f5d3SJohn Marino	echo $pvs | sed 's/ /\n/g' | sort | uniq > out1
4086d7f5d3SJohn Marino
4186d7f5d3SJohn Marino	mimages=$(lvs --noheadings -a -o lv_name $vg | grep "${lv}_mimage_" | \
4286d7f5d3SJohn Marino		sed 's/\[//g; s/\]//g')
4386d7f5d3SJohn Marino	for i in $mimages; do
4486d7f5d3SJohn Marino		echo "Checking $vg/$i"
4586d7f5d3SJohn Marino		lvs -a -odevices --noheadings $vg/$i | \
4686d7f5d3SJohn Marino			sed 's/([^)]*)//g; s/ //g; s/,/ /g' | sort | uniq >> out2
4786d7f5d3SJohn Marino	done
4886d7f5d3SJohn Marino
4986d7f5d3SJohn Marino	diff --ignore-blank-lines out1 out2
5086d7f5d3SJohn Marino}
5186d7f5d3SJohn Marino
5286d7f5d3SJohn Marino# ---------------------------------------------------------------------
5386d7f5d3SJohn Marino# Common environment setup/cleanup for each sub testcases
5486d7f5d3SJohn Marino
5586d7f5d3SJohn Marinoprepare_lvs_()
5686d7f5d3SJohn Marino{
5786d7f5d3SJohn Marino	lvremove -ff $vg
5886d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
5986d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
6086d7f5d3SJohn Marino		return 1
6186d7f5d3SJohn Marino	fi
6286d7f5d3SJohn Marino	:
6386d7f5d3SJohn Marino}
6486d7f5d3SJohn Marino
6586d7f5d3SJohn Marinocheck_and_cleanup_lvs_()
6686d7f5d3SJohn Marino{
6786d7f5d3SJohn Marino	lvs -a -o+devices $vg
6886d7f5d3SJohn Marino	lvremove -ff $vg
6986d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
7086d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
7186d7f5d3SJohn Marino		return 1
7286d7f5d3SJohn Marino	fi
7386d7f5d3SJohn Marino}
7486d7f5d3SJohn Marino
7586d7f5d3SJohn Marinoprepare_lvs_
7686d7f5d3SJohn Marinocheck_and_cleanup_lvs_
7786d7f5d3SJohn Marino
7886d7f5d3SJohn Marino
7986d7f5d3SJohn Marino#COMM "convert from 2-way mirror to linear -- specify leg to remove (bz453643)"
8086d7f5d3SJohn Marinoprepare_lvs_
8186d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
8286d7f5d3SJohn Marinolvconvert -m0 $vg/$lv1 $dev2
8386d7f5d3SJohn Marinolv_is_on_ $vg/$lv1 $dev1
8486d7f5d3SJohn Marinocheck_and_cleanup_lvs_
8586d7f5d3SJohn Marino
8686d7f5d3SJohn Marinoprepare_lvs_
8786d7f5d3SJohn Marinolvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev4 $dev3:0-1
8886d7f5d3SJohn Marinolvconvert -m-1 $vg/$lv1 $dev1
8986d7f5d3SJohn Marinolvs -a -o+devices
9086d7f5d3SJohn Marinomimages_are_on_ $lv1 $dev2 $dev4
9186d7f5d3SJohn Marinolvconvert -m-1 $vg/$lv1 $dev2
9286d7f5d3SJohn Marinolvs -a -o+devices
9386d7f5d3SJohn Marinolv_is_on_ $vg/$lv1 $dev4
9486d7f5d3SJohn Marinocheck_and_cleanup_lvs_
9586d7f5d3SJohn Marino
96