| #!/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. |
| |
| # --------------------------------------------------------------------- |