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
|