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
126 rbd create
-p rbd2
-s 1 foo
127 rbd rename rbd
2/foo rbd
2/bar
128 rbd
-p rbd2
ls |
grep bar
129 rbd rename rbd
2/bar foo
130 rbd rename
--pool rbd2 foo bar
131 ! rbd rename rbd
2/bar
--dest-pool rbd foo
132 rbd rename
--pool rbd2 bar
--dest-pool rbd2 foo
133 rbd
-p rbd2
ls |
grep foo
134 rados rmpool rbd2 rbd2
--yes-i-really-really-mean-it
143 rbd create
--image-format 1 -s 1 test1
144 rbd create
--image-format 1 -s 1 test2
147 rbd
ls |
wc -l |
grep 2
148 # look for fields in output of ls -l without worrying about space
149 rbd
ls -l |
grep 'test1.*1024k.*1'
150 rbd
ls -l |
grep 'test2.*1024k.*1'
155 rbd create
--image-format 2 -s 1 test1
156 rbd create
--image-format 2 -s 1 test2
159 rbd
ls |
wc -l |
grep 2
160 rbd
ls -l |
grep 'test1.*1024k.*2'
161 rbd
ls -l |
grep 'test2.*1024k.*2'
166 rbd create
--image-format 2 -s 1 test1
167 rbd create
--image-format 1 -s 1 test2
170 rbd
ls |
wc -l |
grep 2
171 rbd
ls -l |
grep 'test1.*1024k.*2'
172 rbd
ls -l |
grep 'test2.*1024k.*1'
175 # test that many images can be shown by ls
176 for i
in $
(seq -w 00 99); do
177 rbd create image.
$i -s 1
179 rbd
ls |
wc -l |
grep 100
180 rbd
ls -l |
grep image |
wc -l |
grep 100
181 for i
in $
(seq -w 00 99); do
185 for i
in $
(seq -w 00 99); do
186 rbd create image.
$i --image-format 2 -s 1
188 rbd
ls |
wc -l |
grep 100
189 rbd
ls -l |
grep image |
wc -l |
grep 100
190 for i
in $
(seq -w 00 99); do
196 echo "testing remove..."
199 rbd remove
"NOT_EXIST" && exit 1 || true
# remove should fail
200 rbd create
--image-format 1 -s 1 test1
202 rbd
ls |
wc -l |
grep "^0$"
204 rbd create
--image-format 2 -s 1 test2
206 rbd
ls |
wc -l |
grep "^0$"
208 # check that remove succeeds even if it's
209 # interrupted partway through. simulate this
210 # by removing some objects manually.
212 # remove with header missing (old format)
213 rbd create
--image-format 1 -s 1 test1
214 rados
rm -p rbd test1.rbd
216 rbd
ls |
wc -l |
grep "^0$"
218 if [ $tiered -eq 0 ]; then
219 # remove with header missing
220 rbd create
--image-format 2 -s 1 test2
221 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
222 rados
-p rbd
rm $HEADER
224 rbd
ls |
wc -l |
grep "^0$"
226 # remove with id missing
227 rbd create
--image-format 2 -s 1 test2
228 rados
-p rbd
rm rbd_id.test2
230 rbd
ls |
wc -l |
grep "^0$"
232 # remove with header and id missing
233 rbd create
--image-format 2 -s 1 test2
234 HEADER
=$
(rados
-p rbd
ls |
grep '^rbd_header')
235 rados
-p rbd
rm $HEADER
236 rados
-p rbd
rm rbd_id.test2
238 rbd
ls |
wc -l |
grep "^0$"
241 # remove with rbd_children object missing (and, by extension,
242 # with child not mentioned in rbd_children)
243 rbd create
--image-format 2 -s 1 test2
244 rbd snap create test2@snap
245 rbd snap protect test2@snap
246 rbd clone test2@snap clone
248 rados
-p rbd
rm rbd_children
250 rbd
ls |
grep clone |
wc -l |
grep '^0$'
252 rbd snap unprotect test2@snap
253 rbd snap
rm test2@snap
258 echo "testing locking..."
261 rbd create
-s 1 test1
262 rbd lock list test1 |
wc -l |
grep '^0$'
263 rbd lock add test1 id
264 rbd lock list test1 |
grep ' 1 '
265 LOCKER
=$
(rbd lock list test1 |
tail -n 1 |
awk '{print $1;}')
266 rbd lock remove test1 id
$LOCKER
267 rbd lock list test1 |
wc -l |
grep '^0$'
269 rbd lock add test1 id
--shared tag
270 rbd lock list test1 |
grep ' 1 '
271 rbd lock add test1 id
--shared tag
272 rbd lock list test1 |
grep ' 2 '
273 rbd lock add test1 id2
--shared tag
274 rbd lock list test1 |
grep ' 3 '
275 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
276 if rbd info test1 |
grep -qE "features:.*exclusive"
278 # new locking functionality requires all locks to be released
279 while [ -n "$(rbd lock list test1)" ]
281 rbd lock list test1 |
tail -n 1 |
awk '{print $2, $1;}' |
xargs rbd lock remove test1
287 test_pool_image_args
() {
288 echo "testing pool and image args..."
291 ceph osd pool delete
test test --yes-i-really-really-mean-it || true
292 ceph osd pool create
test 100
294 truncate
-s 1 /tmp
/empty
/tmp
/empty@snap
296 rbd
ls |
wc -l |
grep 0
297 rbd create
-s 1 test1
298 rbd
ls |
grep -q test1
299 rbd import
--image test2
/tmp
/empty
300 rbd
ls |
grep -q test2
301 rbd
--dest test3 import
/tmp
/empty
302 rbd
ls |
grep -q test3
303 rbd import
/tmp
/empty foo
306 # should fail due to "destination snapname specified"
307 rbd import
--dest test
/empty@snap
/tmp
/empty
&& exit 1 || true
308 rbd import
/tmp
/empty test
/empty@snap
&& exit 1 || true
309 rbd import
--image test
/empty@snap
/tmp
/empty
&& exit 1 || true
310 rbd import
/tmp
/empty@snap
&& exit 1 || true
312 rbd
ls test |
wc -l |
grep 0
313 rbd import
/tmp
/empty test
/test1
314 rbd
ls test |
grep -q test1
315 rbd
-p test import
/tmp
/empty test2
316 rbd
ls test |
grep -q test2
317 rbd
--image test3
-p test import
/tmp
/empty
318 rbd
ls test |
grep -q test3
319 rbd
--image test4
-p test import
/tmp
/empty
320 rbd
ls test |
grep -q test4
321 rbd
--dest test5
-p test import
/tmp
/empty
322 rbd
ls test |
grep -q test5
323 rbd
--dest test6
--dest-pool test import
/tmp
/empty
324 rbd
ls test |
grep -q test6
325 rbd
--image test7
--dest-pool test import
/tmp
/empty
326 rbd
ls test |
grep -q test7
327 rbd
--image test
/test8 import
/tmp
/empty
328 rbd
ls test |
grep -q test8
329 rbd
--dest test
/test9 import
/tmp
/empty
330 rbd
ls test |
grep -q test9
331 rbd import
--pool test /tmp
/empty
332 rbd
ls test |
grep -q empty
334 # copy with no explicit pool goes to pool rbd
335 rbd copy test
/test9 test10
336 rbd
ls test |
grep -qv test10
337 rbd
ls |
grep -q test10
338 rbd copy test
/test9 test
/test10
339 rbd
ls test |
grep -q test10
340 rbd copy
--pool test test10
--dest-pool test test11
341 rbd
ls test |
grep -q test11
342 rbd copy
--dest-pool rbd
--pool test test11 test12
344 rbd
ls test |
grep -qv test12
346 rm -f /tmp
/empty
/tmp
/empty@snap
347 ceph osd pool delete
test test --yes-i-really-really-mean-it
349 for f
in foo test1 test10 test12 test2 test3
; do
355 echo "testing clone..."
357 rbd create test1
$RBD_CREATE_ARGS -s 1
358 rbd snap create test1@s1
359 rbd snap protect test1@s1
362 rbd clone test1@s1 rbd
2/clone
363 rbd
-p rbd2
ls |
grep clone
364 rbd
-p rbd2
ls -l |
grep clone |
grep test1@s1
365 rbd
ls |
grep -v clone
366 rbd flatten rbd
2/clone
367 rbd snap create rbd
2/clone@s1
368 rbd snap protect rbd
2/clone@s1
369 rbd clone rbd
2/clone@s1 clone2
371 rbd
ls -l |
grep clone2 |
grep rbd
2/clone@s1
372 rbd
-p rbd2
ls |
grep -v clone2
375 rbd snap unprotect rbd
2/clone@s1
376 rbd snap
rm rbd
2/clone@s1
378 rbd snap unprotect test1@s1
381 rados rmpool rbd2 rbd2
--yes-i-really-really-mean-it
385 echo "testing trash..."
388 rbd create
--image-format 2 -s 1 test1
389 rbd create
--image-format 2 -s 1 test2
392 rbd
ls |
wc -l |
grep 2
393 rbd
ls -l |
grep 'test1.*2.*'
394 rbd
ls -l |
grep 'test2.*2.*'
398 rbd
ls |
wc -l |
grep 1
399 rbd
ls -l |
grep 'test2.*2.*'
401 rbd trash
ls |
grep test1
402 rbd trash
ls |
wc -l |
grep 1
403 rbd trash
ls -l |
grep 'test1.*USER.*'
404 rbd trash
ls -l |
grep -v 'protected until'
406 ID
=`rbd trash ls | cut -d ' ' -f 1`
410 ID
=`rbd trash ls | cut -d ' ' -f 1`
411 rbd info
--image-id $ID |
grep "rbd image '$ID'"
413 rbd trash restore
$ID
415 rbd
ls |
wc -l |
grep 1
416 rbd
ls -l |
grep 'test2.*2.*'
418 rbd trash
mv test2
--delay 3600
419 rbd trash
ls |
grep test2
420 rbd trash
ls |
wc -l |
grep 1
421 rbd trash
ls -l |
grep 'test2.*USER.*protected until'
423 rbd trash
rm $ID 2>&1 |
grep 'Deferment time has not expired'
424 rbd trash
rm --image-id $ID --force
426 rbd create
--image-format 2 -s 1 test1
427 rbd snap create test1@snap1
428 rbd snap protect test1@snap1
431 rbd trash
ls |
grep test1
432 rbd trash
ls |
wc -l |
grep 1
433 rbd trash
ls -l |
grep 'test1.*USER.*'
434 rbd trash
ls -l |
grep -v 'protected until'
436 ID
=`rbd trash ls | cut -d ' ' -f 1`
437 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 1
438 rbd snap
ls --image-id $ID |
grep '.*snap1.*'
440 rbd snap unprotect
--image-id $ID --snap snap1
441 rbd snap
rm --image-id $ID --snap snap1
442 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
444 rbd trash restore
$ID
445 rbd snap create test1@snap1
446 rbd snap create test1@snap2
447 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 2
448 rbd snap purge
--image-id $ID
449 rbd snap
ls --image-id $ID |
grep -v 'SNAPID' |
wc -l |
grep 0
462 RBD_CREATE_ARGS
="--image-format 2"