blob: d73f4ad06d12a23e65f54575e871113d0d6b9f4a (
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
#!/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 snapshot on cache|writecache
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.ext4 || skip
mount_dir="mnt"
mkdir -p "$mount_dir"
mount_dir_snap="mnt_snap"
mkdir -p "$mount_dir_snap"
# generate random data
dd if=/dev/urandom of=pattern1 bs=512K count=1
aux prepare_devs 2 310
vgcreate $SHARED $vg "$dev1" "$dev2"
# creating a snapshot on top of a cache|writecache
test_snap_create() {
# cache | writecache
local convert_type=$1
# --cachepool | --cachevol
local convert_option=$2
lvcreate -n $lv1 -L 300 -an $vg "$dev1"
lvcreate -n fast -l 4 -an $vg "$dev2"
lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
lvchange -ay $vg/$lv1
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
cp pattern1 "$mount_dir/pattern1a"
lvcreate -s -L 32 -n snap $vg/$lv1
cp pattern1 "$mount_dir/pattern1b"
mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
not ls "$mount_dir_snap/pattern1b"
rm "$mount_dir/pattern1a"
diff pattern1 "$mount_dir_snap/pattern1a"
umount "$mount_dir_snap"
lvconvert --splitcache $vg/$lv1
umount "$mount_dir"
lvchange -an $vg/$lv1
lvchange -an $vg/fast
lvremove $vg/snap
lvremove $vg/$lv1
lvremove $vg/fast
}
test_snap_create cache --cachepool
test_snap_create cache --cachevol
test_snap_create writecache --cachevol
# removing cache|writecache while snapshot exists
test_snap_remove() {
# cache | writecache
local convert_type=$1
# --cachepool | --cachevol
local convert_option=$2
lvcreate -n $lv1 -L 300 -an $vg "$dev1"
lvcreate -n fast -l 4 -an $vg "$dev2"
lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
lvchange -ay $vg/$lv1
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
cp pattern1 "$mount_dir/pattern1a"
lvcreate -s -L 32 -n snap $vg/$lv1
cp pattern1 "$mount_dir/pattern1b"
lvconvert --splitcache $vg/$lv1
mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
not ls "$mount_dir_snap/pattern1b"
rm "$mount_dir/pattern1a"
diff pattern1 "$mount_dir_snap/pattern1a"
umount "$mount_dir_snap"
umount "$mount_dir"
lvchange -an $vg/$lv1
lvchange -an $vg/fast
lvremove $vg/snap
lvremove $vg/$lv1
lvremove $vg/fast
}
test_snap_remove cache --cachepool
test_snap_remove cache --cachevol
test_snap_remove writecache --cachevol
# adding cache|writecache to an LV that has a snapshot
test_caching_with_snap() {
# cache | writecache
local convert_type=$1
# --cachepool | --cachevol
local convert_option=$2
lvcreate -n $lv1 -L 300 -an $vg "$dev1"
lvcreate -n fast -l 4 -an $vg "$dev2"
lvchange -ay $vg/$lv1
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
cp pattern1 "$mount_dir/pattern1a"
lvcreate -s -L 32 -n snap $vg/$lv1
lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
cp pattern1 "$mount_dir/pattern1b"
mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
not ls "$mount_dir_snap/pattern1b"
mv "$mount_dir/pattern1a" "$mount_dir/pattern1c"
diff pattern1 "$mount_dir_snap/pattern1a"
lvconvert --splitcache $vg/$lv1
diff pattern1 "$mount_dir/pattern1c"
diff pattern1 "$mount_dir_snap/pattern1a"
umount "$mount_dir_snap"
umount "$mount_dir"
lvchange -an $vg/$lv1
lvchange -an $vg/fast
lvremove $vg/snap
lvremove $vg/$lv1
lvremove $vg/fast
}
test_caching_with_snap cache --cachepool
test_caching_with_snap cache --cachevol
test_caching_with_snap writecache --cachevol
# adding cache|writecache to a snapshot is not allowed
lvcreate -n $lv1 -L 300 $vg "$dev1"
lvcreate -n fast -l 4 $vg "$dev2"
mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
lvcreate -s -L 32 -n snap $vg/$lv1
not lvconvert -y --type writecache --cachevol fast $vg/snap
not lvconvert -y --type cache --cachevol fast $vg/snap
not lvconvert -y --type cache --cachepool fast $vg/snap
vgchange -an $vg
lvremove $vg/snap
lvremove $vg/$lv1
lvremove $vg/fast
vgremove -ff $vg
|