mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
69 lines
2.1 KiB
Bash
69 lines
2.1 KiB
Bash
#!/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 how zeroing of thin-pool metadata works
|
|
|
|
SKIP_WITH_LVMLOCKD=1
|
|
SKIP_WITH_LVMPOLLD=1
|
|
|
|
export LVM_TEST_THIN_REPAIR_CMD=${LVM_TEST_THIN_REPAIR_CMD-/bin/false}
|
|
|
|
. lib/inittest
|
|
|
|
#
|
|
# Main
|
|
#
|
|
aux have_thin 1 3 0 || skip
|
|
aux have_cache 1 3 0 || skip
|
|
|
|
aux prepare_vg 3 40000
|
|
|
|
# Create mostly-zero devs only front of it has some 'real' back-end
|
|
aux zero_dev "$dev1" "$(( $(get first_extent_sector "$dev1") + 8192 )):"
|
|
aux zero_dev "$dev2" "$(( $(get first_extent_sector "$dev2") + 8192 )):"
|
|
aux zero_dev "$dev3" "$(( $(get first_extent_sector "$dev3") + 8192 )):"
|
|
|
|
# Prepare randomly filled 4M LV on dev2
|
|
lvcreate -L16G -n $lv1 $vg "$dev2"
|
|
dd if=/dev/urandom of="$DM_DEV_DIR/$vg/$lv1" bs=1M count=4 oflag=direct || true
|
|
lvremove -f $vg
|
|
|
|
for i in 0 1
|
|
do
|
|
aux lvmconf "allocation/zero_metadata = $i"
|
|
|
|
# Lvm2 should allocate metadata on dev2
|
|
lvcreate -T -L10G --poolmetadatasize 16G $vg/pool "$dev1" "$dev2"
|
|
lvchange -an $vg
|
|
|
|
lvs -ao+seg_pe_ranges $vg
|
|
lvchange -ay $vg/pool_tmeta --yes
|
|
|
|
# Skip past 1.2M which is 'created' by thin-pool initialization
|
|
hexdump -C -n 200 -s 2000000 "$DM_DEV_DIR/$vg/pool_tmeta" | tee out
|
|
|
|
# When fully zeroed, it should be zero - so almost no output from hexdump
|
|
case "$i" in
|
|
0) test "$(wc -l < out)" -ge 10 ;; # should not be zeroed
|
|
1) test "$(wc -l < out)" -le 10 ;; # should be zeroed
|
|
esac
|
|
|
|
lvremove -f $vg/pool
|
|
done
|
|
|
|
# Check lvm2 spots error during full zeroing of metadata device
|
|
aux error_dev "$dev2" "$(( $(get first_extent_sector "$dev2") + 32 )):"
|
|
not lvcreate -T -L10G --poolmetadatasize 16G $vg/pool "$dev1" "$dev2" |& tee err
|
|
grep "Failed to initialize logical volume" err
|
|
|
|
vgremove -ff $vg
|