3 # make sure rbd pool is EMPTY.. this is a test script!!
4 rbd
ls |
wc -l |
grep -v '^0$' && echo "nonempty rbd pool, aborting! run this script on an empty test cluster only." && exit 1
6 IMGS
="testimg1 testimg2 testimg3 testimg-diff1 testimg-diff2 testimg-diff3 foo foo2 bar bar2 test1 test2 test3 clone2"
9 if ceph osd dump |
grep ^pool |
grep "'rbd'" |
grep tier
; then
16 (rbd snap purge
$img || true
) >/dev
/null
2>&1
17 (rbd
rm $img || true
) >/dev
/null
2>&1
22 echo "testing import, export, resize, and snapshots..."
23 TMP_FILES
="/tmp/img1 /tmp/img1.new /tmp/img2 /tmp/img2.new /tmp/img3 /tmp/img3.new /tmp/img-diff1.new /tmp/img-diff2.new /tmp/img-diff3.new /tmp/img1.snap1 /tmp/img1.snap1 /tmp/img-diff1.snap1"
29 dd if=/bin
/sh of
=/tmp
/img1 bs
=1k count
=1 seek
=10
30 dd if=/bin
/dd of
=/tmp
/img1 bs
=1k count
=10 seek
=100
31 dd if=/bin
/rm of
=/tmp
/img1 bs
=1k count
=100 seek
=1000
32 dd if=/bin
/ls of
=/tmp
/img1 bs
=1k seek
=10000
33 dd if=/bin
/ln of
=/tmp
/img1 bs
=1k seek
=100000
36 rbd import
$RBD_CREATE_ARGS /tmp
/img1 testimg1
37 rbd resize testimg1
--size=256 --allow-shrink
38 rbd
export testimg1
/tmp
/img2
39 rbd snap create testimg1
--snap=snap1
40 rbd resize testimg1
--size=128 && exit 1 || true
# shrink should fail
41 rbd resize testimg1
--size=128 --allow-shrink
42 rbd
export testimg1
/tmp
/img3
45 rbd info testimg1 |
grep 'size 128 MB'
46 rbd info
--snap=snap1 testimg1 |
grep 'size 256 MB'
49 rm -rf /tmp
/diff-testimg1-1
/tmp
/diff-testimg1-2
50 rbd export-diff testimg1
--snap=snap1
/tmp
/diff-testimg1-1
51 rbd export-diff testimg1
--from-snap=snap1
/tmp
/diff-testimg1-2
54 rbd create
$RBD_CREATE_ARGS --size=1 testimg-diff1
55 rbd import-diff
--sparse-size 8K
/tmp
/diff-testimg1-1 testimg-diff1
56 rbd import-diff
--sparse-size 8K
/tmp
/diff-testimg1-2 testimg-diff1
59 rbd info testimg1 |
grep 'size 128 MB'
60 rbd info
--snap=snap1 testimg1 |
grep 'size 256 MB'
61 rbd info testimg-diff1 |
grep 'size 128 MB'
62 rbd info
--snap=snap1 testimg-diff1 |
grep 'size 256 MB'
65 rbd copy testimg1
--snap=snap1 testimg2
66 rbd copy testimg1 testimg3
67 rbd copy testimg-diff1
--sparse-size 768K
--snap=snap1 testimg-diff2
68 rbd copy testimg-diff1
--sparse-size 768K testimg-diff3
71 rbd info testimg2 |
grep 'size 256 MB'
72 rbd info testimg3 |
grep 'size 128 MB'
73 rbd info testimg-diff2 |
grep 'size 256 MB'
74 rbd info testimg-diff3 |
grep 'size 128 MB'
76 rbd
export testimg1
/tmp
/img1.new
77 rbd
export testimg2
/tmp
/img2.new
78 rbd
export testimg3
/tmp
/img3.new
79 rbd
export testimg-diff1
/tmp
/img-diff1.new
80 rbd
export testimg-diff2
/tmp
/img-diff2.new
81 rbd
export testimg-diff3
/tmp
/img-diff3.new
83 cmp /tmp
/img2
/tmp
/img2.new
84 cmp /tmp
/img3
/tmp
/img3.new
85 cmp /tmp
/img2
/tmp
/img-diff2.new
86 cmp /tmp
/img3
/tmp
/img-diff3.new
89 rbd snap rollback
--snap=snap1 testimg1
90 rbd snap rollback
--snap=snap1 testimg-diff1
91 rbd info testimg1 |
grep 'size 256 MB'
92 rbd info testimg-diff1 |
grep 'size 256 MB'
93 rbd
export testimg1
/tmp
/img1.snap1
94 rbd
export testimg-diff1
/tmp
/img-diff1.snap1
95 cmp /tmp
/img2
/tmp
/img1.snap1
96 cmp /tmp
/img2
/tmp
/img-diff1.snap1
98 # test create, copy of zero-length images
101 rbd create testimg2
-s 0
102 rbd
cp testimg2 testimg3
105 rbd snap
rm --snap=snap1 testimg1
106 rbd snap
rm --snap=snap1 testimg-diff1
107 rbd info
--snap=snap1 testimg1
2>&1 |
grep 'error setting snapshot context: (2) No such file or directory'
108 rbd info
--snap=snap1 testimg-diff1
2>&1 |
grep 'error setting snapshot context: (2) No such file or directory'
115 echo "testing rename..."
118 rbd create
--image-format 1 -s 1 foo
119 rbd create
--image-format 2 -s 1 bar
121 rbd rename foo2 bar
2>&1 |
grep exists
123 rbd rename bar2 foo2
2>&1 |
grep exists
127 rbd create
-p rbd2
-s 1 foo
128 rbd rename rbd
2/foo rbd
2/bar
129 rbd
-p rbd2
ls |
grep bar
130 rbd rename rbd
2/bar foo
131 rbd rename
--pool rbd2 foo bar
132 ! rbd rename rbd
2/bar
--dest-pool rbd foo
133 rbd rename
--pool rbd2 bar
--dest-pool rbd2 foo
134 rbd
-p rbd2
ls |
grep foo
135 rados rmpool rbd2 rbd2
--yes-i-really-really-mean-it
144 rbd create
--image-format 1 -s 1 test1
145 rbd create
--image-format 1 -s 1 test2
148 rbd
ls |
wc -l |
grep 2
149 # look for fields in output of ls -l without worrying about space
150 rbd
ls -l |
grep 'test1.*1024k.*1'
151 rbd
ls -l |
grep 'test2.*1024k.*1'
156 rbd create
--image-format 2 -s 1 test1
157 rbd create
--image-format 2 -s 1 test2
160 rbd
ls |
wc -l |
grep 2
161 rbd
ls -l |
grep 'test1.*1024k.*2'
162 rbd
ls -l |
grep 'test2.*1024k.*2'
167 rbd create
--image-format 2 -s 1 test1
168 rbd create
--image-format 1 -s 1 test2
171 rbd
ls |
wc -l |
grep 2
172 rbd
ls -l |
grep 'test1.*1024k.*2'
173 rbd
ls -l |
grep 'test2.*1024k.*1'
176 # test that many images can be shown by ls
177 for i
in $
(seq -w 00 99); do
178 rbd create image.
$i -s 1
180 rbd
ls |
wc -l |
grep 100
181 rbd
ls -l |
grep image |
wc -l |
grep 100
182 for i
in $
(seq -w 00 99); do
186 for i
in $
(seq -w 00 99); do
187 rbd create image.
$i --image-format 2 -s 1
189 rbd
ls |
wc -l |
grep 100
190 rbd
ls -l |
grep image |
wc -l |
grep 100
191 for i
in $
(seq -w 00 99); do
197 echo "testing remove..."
200 rbd remove
"NOT_EXIST" && exit 1 || true
# remove should fail
201 rbd create
--image-format 1 -s 1 test1
203 rbd
ls |
wc -l |
grep "^0$"
205 rbd create
--image-format 2 -s 1 test2
207 rbd
ls |
wc -l |
grep "^0$"
209 # check that remove succeeds even if it's
210 # interrupted partway through. simulate this
211 # by removing some objects manually.
213 # remove with header missing (old format)
214 rbd create
--image-format 1 -s 1 test1
215 rados
rm -p rbd test1.rbd
217 rbd
ls |
wc -l |
grep "^0$"
219 if [ $tiered -eq 0 ]; then
220 # remove with header missing
221 rbd create
--image-format 2 -s 1 test2
222 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
223 rados
-p rbd
rm $HEADER
225 rbd
ls |
wc -l |
grep "^0$"
227 # remove with id missing
228 rbd create
--image-format 2 -s 1 test2
229 rados
-p rbd
rm rbd_id.test2
231 rbd
ls |
wc -l |
grep "^0$"
233 # remove with header and id missing
234 rbd create
--image-format 2 -s 1 test2
235 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
236 rados
-p rbd
rm $HEADER
237 rados
-p rbd
rm rbd_id.test2
239 rbd
ls |
wc -l |
grep "^0$"
242 # remove with rbd_children object missing (and, by extension,
243 # with child not mentioned in rbd_children)
244 rbd create
--image-format 2 -s 1 test2
245 rbd snap create test2@snap
246 rbd snap protect test2@snap
247 rbd clone test2@snap clone
249 rados
-p rbd
rm rbd_children
251 rbd
ls |
grep clone |
wc -l |
grep '^0$'
253 rbd snap unprotect test2@snap
254 rbd snap
rm test2@snap
259 echo "testing locking..."
262 rbd create
-s 1 test1
263 rbd lock list test1 |
wc -l |
grep '^0$'
264 rbd lock add test1 id
265 rbd lock list test1 |
grep ' 1 '
266 LOCKER
=$
(rbd lock list test1 |
tail -n 1 |
awk '{print $1;}')
267 rbd lock remove test1 id
$LOCKER
268 rbd lock list test1 |
wc -l |
grep '^0$'
270 rbd lock add test1 id
--shared tag
271 rbd lock list test1 |
grep ' 1 '
272 rbd lock add test1 id
--shared tag
273 rbd lock list test1 |
grep ' 2 '
274 rbd lock add test1 id2
--shared tag
275 rbd lock list test1 |
grep ' 3 '
276 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
277 if rbd info test1 |
grep -qE "features:.*exclusive"
279 # new locking functionality requires all locks to be released
280 while [ -n "$(rbd lock list test1)" ]
282 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
288 test_pool_image_args
() {
289 echo "testing pool and image args..."
292 ceph osd pool delete
test test --yes-i-really-really-mean-it || true
293 ceph osd pool create
test 100
295 truncate
-s 1 /tmp
/empty
/tmp
/empty@snap
297 rbd
ls |
wc -l |
grep 0
298 rbd create
-s 1 test1
299 rbd
ls |
grep -q test1
300 rbd import
--image test2
/tmp
/empty
301 rbd
ls |
grep -q test2
302 rbd
--dest test3 import
/tmp
/empty
303 rbd
ls |
grep -q test3
304 rbd import
/tmp
/empty foo
307 # should fail due to "destination snapname specified"
308 rbd import
--dest test
/empty@snap
/tmp
/empty
&& exit 1 || true
309 rbd import
/tmp
/empty test
/empty@snap
&& exit 1 || true
310 rbd import
--image test
/empty@snap
/tmp
/empty
&& exit 1 || true
311 rbd import
/tmp
/empty@snap
&& exit 1 || true
313 rbd
ls test |
wc -l |
grep 0
314 rbd import
/tmp
/empty test
/test1
315 rbd
ls test |
grep -q test1
316 rbd
-p test import
/tmp
/empty test2
317 rbd
ls test |
grep -q test2
318 rbd
--image test3
-p test import
/tmp
/empty
319 rbd
ls test |
grep -q test3
320 rbd
--image test4
-p test import
/tmp
/empty
321 rbd
ls test |
grep -q test4
322 rbd
--dest test5
-p test import
/tmp
/empty
323 rbd
ls test |
grep -q test5
324 rbd
--dest test6
--dest-pool test import
/tmp
/empty
325 rbd
ls test |
grep -q test6
326 rbd
--image test7
--dest-pool test import
/tmp
/empty
327 rbd
ls test |
grep -q test7
328 rbd
--image test
/test8 import
/tmp
/empty
329 rbd
ls test |
grep -q test8
330 rbd
--dest test
/test9 import
/tmp
/empty
331 rbd
ls test |
grep -q test9
332 rbd import
--pool test /tmp
/empty
333 rbd
ls test |
grep -q empty
335 # copy with no explicit pool goes to pool rbd
336 rbd copy test
/test9 test10
337 rbd
ls test |
grep -qv test10
338 rbd
ls |
grep -q test10
339 rbd copy test
/test9 test
/test10
340 rbd
ls test |
grep -q test10
341 rbd copy
--pool test test10
--dest-pool test test11
342 rbd
ls test |
grep -q test11
343 rbd copy
--dest-pool rbd
--pool test test11 test12
345 rbd
ls test |
grep -qv test12
347 rm -f /tmp
/empty
/tmp
/empty@snap
348 ceph osd pool delete
test test --yes-i-really-really-mean-it
350 for f
in foo test1 test10 test12 test2 test3
; do
356 echo "testing clone..."
358 rbd create test1
$RBD_CREATE_ARGS -s 1
359 rbd snap create test1@s1
360 rbd snap protect test1@s1
364 rbd clone test1@s1 rbd
2/clone
365 rbd
-p rbd2
ls |
grep clone
366 rbd
-p rbd2
ls -l |
grep clone |
grep test1@s1
367 rbd
ls |
grep -v clone
368 rbd flatten rbd
2/clone
369 rbd snap create rbd
2/clone@s1
370 rbd snap protect rbd
2/clone@s1
371 rbd clone rbd
2/clone@s1 clone2
373 rbd
ls -l |
grep clone2 |
grep rbd
2/clone@s1
374 rbd
-p rbd2
ls |
grep -v clone2
377 rbd snap unprotect rbd
2/clone@s1
378 rbd snap
rm rbd
2/clone@s1
380 rbd snap unprotect test1@s1
383 rados rmpool rbd2 rbd2
--yes-i-really-really-mean-it
387 echo "testing trash..."
390 rbd create
--image-format 2 -s 1 test1
391 rbd create
--image-format 2 -s 1 test2
394 rbd
ls |
wc -l |
grep 2
395 rbd
ls -l |
grep 'test1.*2.*'
396 rbd
ls -l |
grep 'test2.*2.*'
400 rbd
ls |
wc -l |
grep 1
401 rbd
ls -l |
grep 'test2.*2.*'
403 rbd trash
ls |
grep test1
404 rbd trash
ls |
wc -l |
grep 1
405 rbd trash
ls -l |
grep 'test1.*USER.*'
406 rbd trash
ls -l |
grep -v 'protected until'
408 ID
=`rbd trash ls | cut -d ' ' -f 1`
412 ID
=`rbd trash ls | cut -d ' ' -f 1`
413 rbd info
--image-id $ID |
grep "rbd image '$ID'"
415 rbd trash restore
$ID
417 rbd
ls |
wc -l |
grep 1
418 rbd
ls -l |
grep 'test2.*2.*'
420 rbd trash
mv test2
--delay 3600
421 rbd trash
ls |
grep test2
422 rbd trash
ls |
wc -l |
grep 1
423 rbd trash
ls -l |
grep 'test2.*USER.*protected until'
425 rbd trash
rm $ID 2>&1 |
grep 'Deferment time has not expired'
426 rbd trash
rm --image-id $ID --force
428 rbd create
--image-format 2 -s 1 test1
429 rbd snap create test1@snap1
430 rbd snap protect test1@snap1
433 rbd trash
ls |
grep test1
434 rbd trash
ls |
wc -l |
grep 1
435 rbd trash
ls -l |
grep 'test1.*USER.*'
436 rbd trash
ls -l |
grep -v 'protected until'
438 ID
=`rbd trash ls | cut -d ' ' -f 1`
439 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 1
440 rbd snap
ls --image-id $ID |
grep '.*snap1.*'
442 rbd snap unprotect
--image-id $ID --snap snap1
443 rbd snap
rm --image-id $ID --snap snap1
444 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
446 rbd trash restore
$ID
447 rbd snap create test1@snap1
448 rbd snap create test1@snap2
449 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 2
450 rbd snap purge
--image-id $ID
451 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
464 RBD_CREATE_ARGS
="--image-format 2"