xref: /dflybsd-src/contrib/lvm2/dist/test/t-mirror-names.sh (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/sh
286d7f5d3SJohn Marino# Copyright (C) 2007-2008 Red Hat, Inc. All rights reserved.
386d7f5d3SJohn Marino# Copyright (C) 2007-2008 NEC Corporation
486d7f5d3SJohn Marino#
586d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use,
686d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions
786d7f5d3SJohn Marino# of the GNU General Public License v.2.
886d7f5d3SJohn Marino#
986d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License
1086d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation,
1186d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1286d7f5d3SJohn Marino
1386d7f5d3SJohn Marinotest_description="check namings of mirrored LV"
1486d7f5d3SJohn Marino
1586d7f5d3SJohn Marino. ./test-utils.sh
1686d7f5d3SJohn Marino
1786d7f5d3SJohn Marinodmsetup_has_dm_devdir_support_ || exit 200
1886d7f5d3SJohn Marino
1986d7f5d3SJohn Marino# ---------------------------------------------------------------------
2086d7f5d3SJohn Marino# Utilities
2186d7f5d3SJohn Marino
2286d7f5d3SJohn Marinolv_devices_() {
2386d7f5d3SJohn Marino  local d
2486d7f5d3SJohn Marino  local lv=$1
2586d7f5d3SJohn Marino  shift
2686d7f5d3SJohn Marino  local devices=$*
2786d7f5d3SJohn Marino
2886d7f5d3SJohn Marino  local devs=$(lvs -a -odevices --noheadings $lv | sed 's/([0-9]*)//g' |
2986d7f5d3SJohn Marino               sed 's/ //g' | sed 's/,/ /g')
3086d7f5d3SJohn Marino
3186d7f5d3SJohn Marino  for d in $devs; do
3286d7f5d3SJohn Marino    (echo $devices | grep -q $d)  || return 1
3386d7f5d3SJohn Marino    devices=$(echo $devices | sed "s/$d//")
3486d7f5d3SJohn Marino  done
3586d7f5d3SJohn Marino
3686d7f5d3SJohn Marino  [ "$(echo $devices | sed 's/ //g')" = "" ]
3786d7f5d3SJohn Marino}
3886d7f5d3SJohn Marino
3986d7f5d3SJohn Marinolv_mirror_log_() {
4086d7f5d3SJohn Marino  local lv=$1
4186d7f5d3SJohn Marino
4286d7f5d3SJohn Marino  echo $(lvs -a -omirror_log --noheadings $lv | sed 's/ //g')
4386d7f5d3SJohn Marino}
4486d7f5d3SJohn Marino
4586d7f5d3SJohn Marinolv_convert_lv_() {
4686d7f5d3SJohn Marino  local lv=$1
4786d7f5d3SJohn Marino
4886d7f5d3SJohn Marino  echo $(lvs -a -oconvert_lv --noheadings $lv | sed 's/ //g')
4986d7f5d3SJohn Marino}
5086d7f5d3SJohn Marino
5186d7f5d3SJohn Marino# ---------------------------------------------------------------------
5286d7f5d3SJohn Marino# Initialize PVs and VGs
5386d7f5d3SJohn Marino
5486d7f5d3SJohn Marinoaux prepare_vg 5 80
5586d7f5d3SJohn Marino
5686d7f5d3SJohn Marino# ---------------------------------------------------------------------
5786d7f5d3SJohn Marino# Common environment setup/cleanup for each sub testcases
5886d7f5d3SJohn Marino
5986d7f5d3SJohn Marinoprepare_lvs_() {
6086d7f5d3SJohn Marino	lvremove -ff $vg
6186d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
6286d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
6386d7f5d3SJohn Marino		return 1
6486d7f5d3SJohn Marino	fi
6586d7f5d3SJohn Marino  :
6686d7f5d3SJohn Marino}
6786d7f5d3SJohn Marino
6886d7f5d3SJohn Marinocheck_and_cleanup_lvs_() {
6986d7f5d3SJohn Marino  lvs -a -o+devices $vg
7086d7f5d3SJohn Marino  lvremove -ff $vg
7186d7f5d3SJohn Marino	if dmsetup table|grep $vg; then
7286d7f5d3SJohn Marino		echo "ERROR: lvremove did leave some some mappings in DM behind!"
7386d7f5d3SJohn Marino		return 1
7486d7f5d3SJohn Marino	fi
7586d7f5d3SJohn Marino}
7686d7f5d3SJohn Marino
7786d7f5d3SJohn Marinoprepare_lvs_
7886d7f5d3SJohn Marinocheck_and_cleanup_lvs_
7986d7f5d3SJohn Marino
8086d7f5d3SJohn Marino# ---------------------------------------------------------------------
8186d7f5d3SJohn Marino# basic
8286d7f5d3SJohn Marino
8386d7f5d3SJohn Marino#COMM "init: lvcreate"
8486d7f5d3SJohn Marinoprepare_lvs_
8586d7f5d3SJohn Marino
8686d7f5d3SJohn Marino#COMM "mirror images are ${lv1}_mimage_x"
8786d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg
8886d7f5d3SJohn Marinolv_devices_ $vg/$lv1 "$lv1"_mimage_0 "$lv1"_mimage_1
8986d7f5d3SJohn Marino
9086d7f5d3SJohn Marino#COMM "mirror log is ${lv1}_mlog"
9186d7f5d3SJohn Marinolv_mirror_log_ $vg/$lv1 "$lv1"_mlog
9286d7f5d3SJohn Marino
9386d7f5d3SJohn Marino# "cleanup"
9486d7f5d3SJohn Marinocheck_and_cleanup_lvs_
9586d7f5d3SJohn Marino
9686d7f5d3SJohn Marino#COMM "mirror with name longer than 22 characters (bz221322)"
9786d7f5d3SJohn Marinoname="LVwithanamelogerthan22characters_butidontwonttocounthem"
9886d7f5d3SJohn Marinolvcreate -m1 -l2 -n"$name" $vg
9986d7f5d3SJohn Marinolvs $vg/"$name"
10086d7f5d3SJohn Marinocheck_and_cleanup_lvs_
10186d7f5d3SJohn Marino
10286d7f5d3SJohn Marino# ---------------------------------------------------------------------
10386d7f5d3SJohn Marino# lvrename
10486d7f5d3SJohn Marino
10586d7f5d3SJohn Marino#COMM "init: lvrename"
10686d7f5d3SJohn Marinoprepare_lvs_
10786d7f5d3SJohn Marino
10886d7f5d3SJohn Marino#COMM "renamed mirror names: $lv1 to $lv2"
10986d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg
11086d7f5d3SJohn Marinolvrename $vg/$lv1 $vg/$lv2
11186d7f5d3SJohn Marinolv_devices_ $vg/$lv2 "$lv2"_mimage_0 "$lv2"_mimage_1
11286d7f5d3SJohn Marinolv_mirror_log_ $vg/$lv2 "$lv2"_mlog
11386d7f5d3SJohn Marino
11486d7f5d3SJohn Marino#COMM "cleanup"
11586d7f5d3SJohn Marinocheck_and_cleanup_lvs_
11686d7f5d3SJohn Marino
11786d7f5d3SJohn Marino# ---------------------------------------------------------------------
11886d7f5d3SJohn Marino# lvconvert
11986d7f5d3SJohn Marino
12086d7f5d3SJohn Marino#COMM "init: lvconvert"
12186d7f5d3SJohn Marinoprepare_lvs_
12286d7f5d3SJohn Marino
12386d7f5d3SJohn Marino#COMM "converting mirror names is ${lv1}_mimagetmp_2"
12486d7f5d3SJohn Marinolvcreate -l2 -m1 -n $lv1 $vg
12586d7f5d3SJohn Marinolvconvert -m+1 -i1000 -b $vg/$lv1
12686d7f5d3SJohn Marinoconvlv=$(lv_convert_lv_ "$vg/$lv1")
12786d7f5d3SJohn Marinotest "$convlv" = "$lv1"_mimagetmp_2
12886d7f5d3SJohn Marinolv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2
12986d7f5d3SJohn Marinolv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1
13086d7f5d3SJohn Marinologlv=$(lv_mirror_log_ "$vg/$convlv")
13186d7f5d3SJohn Marinotest "$loglv" = "$lv1"_mlog
13286d7f5d3SJohn Marino
13386d7f5d3SJohn Marino#COMM "mirror log name after re-adding is ${lv1}_mlog" \
13486d7f5d3SJohn Marinolvconvert --mirrorlog core $vg/$lv1
13586d7f5d3SJohn Marinolvconvert --mirrorlog disk $vg/$lv1
13686d7f5d3SJohn Marinoconvlv=$(lv_convert_lv_ "$vg/$lv1")
13786d7f5d3SJohn Marinolv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2
13886d7f5d3SJohn Marinolv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1
13986d7f5d3SJohn Marinologlv=$(lv_mirror_log_ "$vg/$convlv")
14086d7f5d3SJohn Marinotest "$loglv" = "$lv1"_mlog
14186d7f5d3SJohn Marino
14286d7f5d3SJohn Marino#COMM "renamed converting mirror names: $lv1 to $lv2" \
14386d7f5d3SJohn Marinolvrename $vg/$lv1 $vg/$lv2
14486d7f5d3SJohn Marinoconvlv=$(lv_convert_lv_ "$vg/$lv2")
14586d7f5d3SJohn Marinolv_devices_ $vg/$lv2 "$convlv" "$lv2"_mimage_2
14686d7f5d3SJohn Marinolv_devices_ "$vg/$convlv" "$lv2"_mimage_0 "$lv2"_mimage_1
14786d7f5d3SJohn Marinologlv=$(lv_mirror_log_ "$vg/$convlv")
14886d7f5d3SJohn Marinotest "$loglv" = "$lv2"_mlog
14986d7f5d3SJohn Marino
15086d7f5d3SJohn Marino#COMM "cleanup"
15186d7f5d3SJohn Marinocheck_and_cleanup_lvs_
15286d7f5d3SJohn Marino
15386d7f5d3SJohn Marino# Temporary mirror log should have "_mlogtmp_<n>" suffix
15486d7f5d3SJohn Marino# but currently lvconvert doesn't have an option to add the log.
15586d7f5d3SJohn Marino# If such feature is added in future, a test for that should
15686d7f5d3SJohn Marino# be added.
15786d7f5d3SJohn Marino
15886d7f5d3SJohn Marino# ---------------------------------------------------------------------
159