1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00
lvm2/test/shell/snapshot-merge-stack.sh
David Teigland fa2a728a39 lvconvert: snapshot: use command definitions
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.
2017-02-13 08:20:10 -06:00

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