2021-01-30 15:13:34 +03:00
#!/usr/bin/env bash
# Copyright (C) 2021 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 usability of 16g thin pool metadata LV
SKIP_WITH_LVMPOLLD = 1
. lib/inittest
aux have_thin 1 0 0 || skip
aux prepare_vg 1 50000
lvcreate -T -L10 --poolmetadatasize 16g $vg /pool
check lv_field $vg /pool_tmeta size "<15.88g"
lvremove -f $vg
# Cropped way
lvcreate -T -L10 --poolmetadatasize 16g --config 'allocation/thin_pool_crop_metadata=1' $vg /pool
check lv_field $vg /pool_tmeta size "15.81g"
lvremove -f $vg
lvcreate -L16G -n meta $vg
lvcreate -L10 -n pool $vg
lvconvert --yes --thinpool $vg /pool --poolmetadata meta
# Uncropped size 33554432 sectors - 16GiB
dmsetup table ${ vg } -pool_tmeta | grep 33554432
lvremove -f $vg
# Uses 20G metadata volume, but crops the size in DM table
lvcreate -L20G -n meta $vg
lvcreate -L10 -n pool $vg
lvconvert --yes --thinpool $vg /pool --poolmetadata meta --config 'allocation/thin_pool_crop_metadata=1'
check lv_field $vg /lvol0_pmspare size "16.00g"
# Size should be cropped to 33161216 sectors ~15.81GiB
dmsetup table ${ vg } -pool_tmeta | grep 33161216
# Also size remains unchanged with activation has no cropping,
# but metadata have no CROP_METADATA flag set
lvchange -an $vg
lvchange -ay $vg
# Size still stays cropped to 33161216 sectors ~15.81GiB
dmsetup table ${ vg } -pool_tmeta | grep 33161216
lvremove -f $vg
# Minimal size is 2M
lvcreate -L1M -n meta $vg
lvcreate -L10 -n pool $vg
not lvconvert --yes --thinpool $vg /pool --poolmetadata meta
lvremove -f $vg
# Uses 20G metadata volume, but crops the size in DM table
lvcreate -L1 --poolmetadatasize 10G -T $vg /pool
lvresize -L+10G $vg /pool_tmeta --config 'allocation/thin_pool_crop_metadata=1'
check lv_field $vg /lvol0_pmspare size "15.81g"
# Size should be cropped to 33161216 sectors ~15.81GiB
dmsetup table ${ vg } -pool_tmeta | grep 33161216
2024-08-30 13:10:35 +03:00
# Without cropping we can grow to ~15.88GiB
2021-01-30 15:13:34 +03:00
lvresize -L+10G $vg /pool_tmeta
check lv_field $vg /lvol0_pmspare size "<15.88g"
lvremove -f $vg
# User has already 'bigger' metadata and wants them uncropped
lvcreate -L16G -n meta $vg
lvcreate -L10 -n pool $vg
lvconvert --yes --thinpool $vg /pool --poolmetadata meta --config 'allocation/thin_pool_crop_metadata=1'
# No change with cropping
lvresize -l+1 $vg /pool_tmeta --config 'allocation/thin_pool_crop_metadata=1'
dmsetup table ${ vg } -pool_tmeta | grep 33161216
# Resizes to 'uncropped' size 16GiB with ANY size
lvresize -l+1 $vg /pool_tmeta
dmsetup table ${ vg } -pool_tmeta | grep 33554432
check lv_field $vg /pool_tmeta size "16.00g"
vgremove -ff $vg