2018-08-17 23:45:52 +03:00
#!/usr/bin/env bash
2018-11-08 12:21:13 +03:00
# Copyright (C) 2018 Red Hat, Inc. All rights reserved.
2018-08-17 23:45:52 +03:00
#
# 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 single lv cache
SKIP_WITH_LVMPOLLD = 1
. lib/inittest
2020-09-04 22:08:32 +03:00
lvm segtypes 2>/dev/null | grep writecache$ >/dev/null || {
skip 'Writecache is not built-in.'
}
2019-09-11 21:48:03 +03:00
aux have_cache 1 10 0 || skip
2018-11-08 12:21:13 +03:00
which mkfs.xfs || skip
2018-08-17 23:45:52 +03:00
mount_dir = "mnt"
2018-11-08 12:21:13 +03:00
mkdir -p " $mount_dir "
2018-08-17 23:45:52 +03:00
# generate random data
2018-11-08 12:21:13 +03:00
dd if = /dev/urandom of = pattern1 bs = 512K count = 1
2018-08-17 23:45:52 +03:00
2022-09-07 02:02:29 +03:00
aux prepare_devs 2 310
2018-08-17 23:45:52 +03:00
vgcreate $SHARED $vg " $dev1 "
vgextend $vg " $dev2 "
2022-09-07 02:02:29 +03:00
lvcreate -n $lv1 -L 300 -an $vg " $dev1 "
2018-08-17 23:45:52 +03:00
lvcreate -n $lv2 -l 4 -an $vg " $dev2 "
# test1: create fs on LV before cache is attached
lvchange -ay $vg /$lv1
mkfs.xfs -f -s size = 4096 " $DM_DEV_DIR / $vg / $lv1 "
2018-11-08 12:21:13 +03:00
mount " $DM_DEV_DIR / $vg / $lv1 " " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
cp pattern1 " $mount_dir /pattern1 "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
umount " $mount_dir "
2018-08-17 23:45:52 +03:00
lvchange -an $vg /$lv1
2019-01-30 18:55:34 +03:00
lvconvert -y --type cache --cachevol $lv2 $vg /$lv1
2018-08-17 23:45:52 +03:00
check lv_field $vg /$lv1 segtype cache
2019-10-13 01:02:58 +03:00
lvs -a $vg /${ lv2 } _cvol --noheadings -o segtype >out
2018-08-17 23:45:52 +03:00
grep linear out
lvchange -ay $vg /$lv1
2018-11-08 12:21:13 +03:00
mount " $DM_DEV_DIR / $vg / $lv1 " " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
diff pattern1 " $mount_dir /pattern1 "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
cp pattern1 " $mount_dir /pattern1b "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
ls -l " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
umount " $mount_dir "
2018-08-17 23:45:52 +03:00
lvchange -an $vg /$lv1
lvconvert --splitcache $vg /$lv1
check lv_field $vg /$lv1 segtype linear
check lv_field $vg /$lv2 segtype linear
lvchange -ay $vg /$lv1
lvchange -ay $vg /$lv2
2018-11-08 12:21:13 +03:00
mount " $DM_DEV_DIR / $vg / $lv1 " " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
ls -l " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
diff pattern1 " $mount_dir /pattern1 "
diff pattern1 " $mount_dir /pattern1b "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
umount " $mount_dir "
2018-08-17 23:45:52 +03:00
lvchange -an $vg /$lv1
lvchange -an $vg /$lv2
# test2: create fs on LV after cache is attached
2019-01-30 18:55:34 +03:00
lvconvert -y --type cache --cachevol $lv2 $vg /$lv1
2018-08-17 23:45:52 +03:00
check lv_field $vg /$lv1 segtype cache
2019-10-13 01:02:58 +03:00
lvs -a $vg /${ lv2 } _cvol --noheadings -o segtype >out
2018-08-17 23:45:52 +03:00
grep linear out
lvchange -ay $vg /$lv1
mkfs.xfs -f -s size = 4096 " $DM_DEV_DIR / $vg / $lv1 "
2018-11-08 12:21:13 +03:00
mount " $DM_DEV_DIR / $vg / $lv1 " " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
cp pattern1 " $mount_dir /pattern1 "
ls -l " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
umount " $mount_dir "
2018-08-17 23:45:52 +03:00
lvchange -an $vg /$lv1
lvconvert --splitcache $vg /$lv1
check lv_field $vg /$lv1 segtype linear
check lv_field $vg /$lv2 segtype linear
lvchange -ay $vg /$lv1
lvchange -ay $vg /$lv2
2018-11-08 12:21:13 +03:00
mount " $DM_DEV_DIR / $vg / $lv1 " " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
ls -l " $mount_dir "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
diff pattern1 " $mount_dir /pattern1 "
2018-08-17 23:45:52 +03:00
2018-11-08 12:21:13 +03:00
umount " $mount_dir "
2018-08-17 23:45:52 +03:00
lvchange -an $vg /$lv1
lvchange -an $vg /$lv2
2020-05-22 21:44:33 +03:00
# misc tests
lvremove $vg
lvcreate -n $lv1 -l 2 -an $vg " $dev1 "
lvcreate -n $lv2 -l 2 -an $vg " $dev1 "
lvcreate -n $lv3 -l 2 -an $vg " $dev2 "
lvconvert -y --type writecache --cachevol $lv3 $vg /$lv1
not lvconvert -y --type writecache --cachevol ${ lv3 } _cvol $vg /$lv2
not lvconvert -y --type cache --cachevol ${ lv3 } _cvol $vg /$lv2
not lvconvert -y --type cache --cachepool ${ lv3 } _cvol $vg /$lv2
2018-08-17 23:45:52 +03:00
vgremove -ff $vg