2019-02-02 01:45:12 +03:00
#!/usr/bin/env bash
# Copyright (C) 2019 Red Hat, Inc. All rights reserved.
#
# 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 vgsplit command options with cached volumes
SKIP_WITH_LVMLOCKD = 1
SKIP_WITH_LVMPOLLD = 1
. lib/inittest
aux have_cache 1 3 0 || skip
aux prepare_vg 7
2023-06-25 13:58:27 +03:00
vgcfgbackup -f vgb $vg
2019-02-02 01:45:12 +03:00
lvcreate -L5 -n $lv2 $vg " $dev2 "
lvcreate -L5 -n $lv3 $vg " $dev3 "
lvconvert -y --type cache-pool --poolmetadata $vg /$lv2 $vg /$lv3
# Cannot split data and metadata from cache-pool
fail vgsplit $vg $vg1 " $dev2 " 2>& 1 | tee err
grep "Cannot split cache pool data" err
fail vgsplit $vg $vg1 " $dev3 " 2>& 1 | tee err
grep "Cannot split cache pool data" err
# Cache $lv1
lvcreate -L1 -n $lv1 $vg " $dev1 "
lvconvert -y --cache --cachepool $vg /$lv3 $vg /$lv1
# Cannot move active cache
fail vgsplit $vg $vg1 " $dev1 " " $dev2 " " $dev3 " 2>& 1 | tee err
grep "must be inactive" err
vgchange -an $vg
2024-08-30 13:10:35 +03:00
# Try splitting component into separate VG
2019-02-02 01:45:12 +03:00
fail vgsplit $vg $vg1 " $dev1 " 2>& 1 | tee err
grep "Cannot split cache origin" err
fail vgsplit $vg $vg1 " $dev2 " 2>& 1 | tee err
grep "Cannot split cache origin" err
fail vgsplit $vg $vg1 " $dev3 " 2>& 1 | tee err
grep "Cannot split cache origin" err
fail vgsplit $vg $vg1 " $dev1 " " $dev2 " 2>& 1 | tee err
grep "Cannot split cache origin" err
fail vgsplit $vg $vg1 " $dev2 " " $dev3 " 2>& 1 | tee err
2024-08-30 13:10:35 +03:00
# Finally something that should pass
2019-02-02 01:45:12 +03:00
vgsplit $vg $vg1 " $dev1 " " $dev2 " " $dev3 "
vgs $vg $vg1
test 4 -eq " $( get vg_field $vg pv_count) "
test 3 -eq " $( get vg_field $vg1 pv_count) "
2020-02-04 00:33:58 +03:00
lvremove -y $vg
2020-02-04 19:20:19 +03:00
# dm-cache with cachevol must not separated main LV and cachevol
2020-02-04 00:33:58 +03:00
vgremove -ff $vg
vgremove -ff $vg1
2021-07-20 23:37:54 +03:00
#
2024-08-30 13:10:35 +03:00
# Check we handle pmspare for split VGs
2021-07-20 23:37:54 +03:00
#
2023-06-25 13:58:27 +03:00
vgcfgrestore -f vgb $vg
2021-07-20 23:37:54 +03:00
# Create cache-pool and pmspare on single PV1
lvcreate -L10 --type cache-pool $vg /cpool " $dev1 "
# Move spare to separate PV3
pvmove -n $vg /lvol0_pmspare " $dev1 " " $dev3 "
# Create origin on PV2
lvcreate -L10 -n orig $vg " $dev2 "
lvconvert -H -y --cachepool $vg /cpool $vg /orig
vgchange -an $vg
# Check we do not create new _pmspare
vgsplit --poolmetadataspare n $vg $vg1 " $dev2 " " $dev1 "
check lv_exists $vg /lvol0_pmspare
check lv_not_exists $vg1 /lvol0_pmspare
vgremove $vg
vgremove -f $vg1
2023-06-25 13:58:27 +03:00
vgcfgrestore -f vgb $vg
2021-07-20 23:37:54 +03:00
# Again - now with handling _pmspare by vgsplit
lvcreate -L10 --type cache-pool $vg /cpool " $dev1 "
# Move spare to separate PV3
pvmove -n $vg /lvol0_pmspare " $dev1 " " $dev3 "
# Create origin on PV2
lvcreate -L10 -n orig $vg " $dev2 "
lvconvert -H -y --cachepool $vg /cpool $vg /orig
vgchange -an $vg
# Handle _pmspare (default)
vgsplit --poolmetadataspare y $vg $vg1 " $dev2 " " $dev1 "
check lv_not_exists $vg /lvol0_pmspare
check lv_exists $vg1 /lvol0_pmspare
vgremove $vg
vgremove -f $vg1
2020-02-04 00:33:58 +03:00
vgcreate $vg " $dev1 " " $dev2 " " $dev3 " " $dev4 "
lvcreate -L6 -n $lv1 -an $vg " $dev2 "
lvcreate -L6 -n $lv2 -an $vg " $dev3 "
lvconvert -y --type cache --cachevol $lv2 $vg /$lv1
fail vgsplit $vg $vg1 " $dev2 "
fail vgsplit $vg $vg1 " $dev3 "
lvremove $vg /$lv1
vgremove -ff $vg