summaryrefslogtreecommitdiff
path: root/test/shell/cache-single-usage.sh
blob: 2c47d05e08370ef2df4cb4b743122c85a75f90a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env bash

# Copyright (C) 2018 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 single lv cache

SKIP_WITH_LVMPOLLD=1

. lib/inittest

lvm segtypes 2>/dev/null | grep writecache$ >/dev/null || {
	skip 'Writecache is not built-in.'
}
aux have_cache 1 10 0 || skip
which mkfs.xfs || skip

mount_dir="mnt"
mkdir -p "$mount_dir"

# generate random data
dd if=/dev/urandom of=pattern1 bs=512K count=1

aux prepare_devs 2 310

vgcreate $SHARED $vg "$dev1"

vgextend $vg "$dev2"

lvcreate -n $lv1 -L 300 -an $vg "$dev1"

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"

mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"

cp pattern1 "$mount_dir/pattern1"

umount "$mount_dir"
lvchange -an $vg/$lv1

lvconvert -y --type cache --cachevol $lv2 $vg/$lv1

check lv_field $vg/$lv1 segtype cache

lvs -a $vg/${lv2}_cvol --noheadings -o segtype >out
grep linear out

lvchange -ay $vg/$lv1

mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"

diff pattern1 "$mount_dir/pattern1"

cp pattern1 "$mount_dir/pattern1b"

ls -l "$mount_dir"

umount "$mount_dir"

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

mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"

ls -l "$mount_dir"

diff pattern1 "$mount_dir/pattern1"
diff pattern1 "$mount_dir/pattern1b"

umount "$mount_dir"
lvchange -an $vg/$lv1
lvchange -an $vg/$lv2

# test2: create fs on LV after cache is attached

lvconvert -y --type cache --cachevol $lv2 $vg/$lv1

check lv_field $vg/$lv1 segtype cache

lvs -a $vg/${lv2}_cvol --noheadings -o segtype >out
grep linear out

lvchange -ay $vg/$lv1

mkfs.xfs -f -s size=4096 "$DM_DEV_DIR/$vg/$lv1"

mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"

cp pattern1 "$mount_dir/pattern1"
ls -l "$mount_dir"

umount "$mount_dir"
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

mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"

ls -l "$mount_dir"

diff pattern1 "$mount_dir/pattern1"

umount "$mount_dir"
lvchange -an $vg/$lv1
lvchange -an $vg/$lv2

# 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

vgremove -ff $vg