1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00
lvm2/test/shell/mirror-names.sh

155 lines
4.2 KiB
Bash

#!/bin/sh
# Copyright (C) 2007-2012 Red Hat, Inc. All rights reserved.
# Copyright (C) 2007-2008 NEC Corporation
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
test_description="check namings of mirrored LV"
SKIP_WITH_LVMLOCKD=1
. lib/inittest
# ---------------------------------------------------------------------
# Utilities
lv_devices_() {
local d
local lv=$1
shift
local devices=$@
local devs
devs=$(get lv_devices "$lv")
for d in $devs; do
(echo "$devices" | grep "$d") || return 1
devices=$(echo "$devices" | sed "s/$d//")
done
test -z "$(echo $devices | sed 's/ //g')"
}
lv_mirror_log_() {
get lv_field $1 mirror_log | tr -d []
}
lv_convert_lv_() {
get lv_field $1 convert_lv | tr -d []
}
enable_devs() {
aux enable_dev "$dev1"
aux enable_dev "$dev2"
aux enable_dev "$dev3"
aux enable_dev "$dev4"
aux enable_dev "$dev5"
}
delay_devs() {
aux delay_dev "$dev1" 0 1000 $(get first_extent_sector "$dev1"):
aux delay_dev "$dev2" 0 1000 $(get first_extent_sector "$dev2"):
aux delay_dev "$dev3" 0 1000 $(get first_extent_sector "$dev3"):
aux delay_dev "$dev4" 0 1000 $(get first_extent_sector "$dev4"):
aux delay_dev "$dev5" 0 1000 $(get first_extent_sector "$dev5"):
}
# ---------------------------------------------------------------------
# Common environment setup/cleanup for each sub testcases
check_and_cleanup_lvs_() {
lvs -a -o+devices $vg
lvremove -ff $vg
(dm_table | not grep $vg) || \
die "ERROR: lvremove did leave some some mappings in DM behind!"
}
# ---------------------------------------------------------------------
# Initialize PVs and VGs
aux prepare_vg 5 80
check_and_cleanup_lvs_
# ---------------------------------------------------------------------
# basic
#COMM "init: lvcreate"
#COMM "mirror images are ${lv1}_mimage_x"
lvcreate -an -Zn -l2 --type mirror -m1 -n $lv1 $vg
lv_devices_ $vg/$lv1 ${lv1}_mimage_0 ${lv1}_mimage_1
#COMM "mirror log is ${lv1}_mlog"
test $(lv_mirror_log_ $vg/$lv1) = ${lv1}_mlog
# "cleanup"
check_and_cleanup_lvs_
#COMM "mirror with name longer than 22 characters (bz221322)"
name="LVwithanamelogerthan22characters_butidontwonttocounthem"
lvcreate -an -Zn --type mirror -m1 -l2 -n $name $vg
lvs $vg/$name
check_and_cleanup_lvs_
# ---------------------------------------------------------------------
# lvrename
#COMM "init: lvrename"
#COMM "renamed mirror names: $lv1 to $lv2"
lvcreate -an -Zn -l2 --type mirror -m1 -n $lv1 $vg
lvrename $vg/$lv1 $vg/$lv2
lv_devices_ $vg/$lv2 ${lv2}_mimage_0 ${lv2}_mimage_1
lv_mirror_log_ $vg/$lv2 ${lv2}_mlog
#COMM "cleanup"
check_and_cleanup_lvs_
# ---------------------------------------------------------------------
# lvconvert
#COMM "init: lvconvert"
#COMM "converting mirror names is ${lv1}_mimagetmp_2"
lvcreate -aey -l2 --type mirror -m1 -n $lv1 $vg
delay_devs
LVM_TEST_TAG="kill_me_$PREFIX" lvconvert -m+1 -i+40 -b $vg/$lv1
convlv=$(lv_convert_lv_ $vg/$lv1)
test $convlv = ${lv1}_mimagetmp_2
lv_devices_ $vg/$lv1 $convlv ${lv1}_mimage_2
lv_devices_ $vg/$convlv ${lv1}_mimage_0 ${lv1}_mimage_1
lv_mirror_log_ $vg/$convlv ${lv1}_mlog
enable_devs
#COMM "mirror log name after re-adding is ${lv1}_mlog" \
lvconvert -f --mirrorlog core $vg/$lv1
lvconvert --mirrorlog disk $vg/$lv1
convlv=$(lv_convert_lv_ $vg/$lv1)
lv_devices_ $vg/$lv1 $convlv ${lv1}_mimage_2
lv_devices_ $vg/$convlv ${lv1}_mimage_0 ${lv1}_mimage_1
lv_mirror_log_ $vg/$convlv ${lv1}_mlog
#COMM "renamed converting mirror names: $lv1 to $lv2" \
lvrename $vg/$lv1 $vg/$lv2
convlv=$(lv_convert_lv_ $vg/$lv2)
lv_devices_ $vg/$lv2 $convlv ${lv2}_mimage_2
lv_devices_ $vg/$convlv ${lv2}_mimage_0 ${lv2}_mimage_1
lv_mirror_log_ $vg/$convlv ${lv2}_mlog
#COMM "cleanup"
check_and_cleanup_lvs_
# Temporary mirror log should have "_mlogtmp_<n>" suffix
# but currently lvconvert doesn't have an option to add the log.
# If such feature is added in future, a test for that should
# be added.
# ---------------------------------------------------------------------