mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
fa2a728a39
Lift all the snapshot utilities (merge, split, combine) out of the monolithic lvconvert implementation, using the command definitions. The old code associated with these commands is now unused and will be removed separately.
88 lines
2.3 KiB
Bash
88 lines
2.3 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2016 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
|
|
|
|
# Exercise snapshot merge also when stacked
|
|
|
|
SKIP_WITH_LVMLOCKD=1
|
|
export LVM_TEST_THIN_REPAIR_CMD=${LVM_TEST_THIN_REPAIR_CMD-/bin/false}
|
|
|
|
. lib/inittest
|
|
|
|
which mkfs.ext3 || skip
|
|
|
|
aux target_at_least dm-snapshot-merge 1 0 0 || skip
|
|
|
|
aux prepare_vg 2 100
|
|
|
|
snap_and_merge() {
|
|
lvcreate -s -n $lv2 -L20 $vg/$lv1 "$dev2"
|
|
#dd if=/dev/zero of="$DM_DEV_DIR/$vg/$lv1" bs=1M count=10 conv=fdatasync
|
|
mkfs.ext3 "$DM_DEV_DIR/$vg/$lv2"
|
|
sync
|
|
lvs -a $vg
|
|
|
|
SLEEP_PID=$(aux hold_device_open $vg $lv1 20)
|
|
|
|
# initiate background merge
|
|
lvconvert -b --mergesnapshot $vg/$lv2
|
|
|
|
lvs -a -o+lv_merging,lv_merge_failed $vg
|
|
get lv_field $vg/$lv1 lv_attr | grep "Owi-ao"
|
|
get lv_field $vg/$lv2 lv_attr | grep "Swi-a-s---"
|
|
kill $SLEEP_PID
|
|
|
|
aux delay_dev "$dev1" 0 200 $(get first_extent_sector "$dev1"):
|
|
lvchange --poll n --refresh $vg/$lv1
|
|
dmsetup table
|
|
lvs -av -o+lv_merging,lv_merge_failed $vg
|
|
# Origin is closed and snapshot merge could run
|
|
get lv_field $vg/$lv1 lv_attr | grep "Owi-a-"
|
|
sleep 1
|
|
check lv_attr_bit state $vg/$lv2 "a"
|
|
aux error_dev "$dev2" $(get first_extent_sector "$dev2"):
|
|
aux enable_dev "$dev1"
|
|
# delay to let snapshot merge 'discover' failing COW device
|
|
sleep 1
|
|
sync
|
|
dmsetup status
|
|
lvs -a -o+lv_merging,lv_merge_failed $vg
|
|
check lv_attr_bit state $vg/$lv1 "m"
|
|
check lv_attr_bit state $vg/$lv2 "m"
|
|
|
|
# device OK and running in full speed
|
|
aux enable_dev "$dev2"
|
|
|
|
# reactivate so merge can finish
|
|
lvchange -an $vg
|
|
lvchange -ay $vg
|
|
sleep 1
|
|
lvs -a -o+lv_merging,lv_merge_failed $vg
|
|
check lv_not_exists $vg $lv2
|
|
fsck -n "$DM_DEV_DIR/$vg/$lv1"
|
|
|
|
lvremove -f $vg
|
|
}
|
|
|
|
|
|
# First check merge on plain linear LV
|
|
lvcreate -aey -L50 -n $lv1 $vg "$dev1"
|
|
snap_and_merge
|
|
|
|
# When available check merge of old snapshot with Thin LV being origin
|
|
if aux have_thin 1 0 0 ; then
|
|
lvcreate -T -L10 -V50 -n $lv1 $vg/pool "$dev1"
|
|
snap_and_merge
|
|
fi
|
|
|
|
# TODO snapshot merge with Mirror, Raid, Cache...
|
|
|
|
vgremove -f $vg
|