1、新建一個image存儲
rbd create hzb-mysql --size 2048
2、查看hzb-mysql的所有對象
一個rbd image實際上包含了多個對象(默認情況下是image_size/4M)
[root@cc ~]# rbd info hzb-mysql
rbd image 'hzb-mysql':
size 2048 MB in 512 objects
order 22 (4096 kB objects)
block_name_prefix: rb.0.11895f.6b8b4567
format: 1
[root@cc ~]#
查看真實使用空間:
rbd diff hzb-mysql | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
上面的紅色加粗部分就是該image的指紋,如果image是以 --image-format 2創建的,則上面的紅色部分顯示為: rbd_data.1979a96b8b4567這樣的形式。下面利用該指紋可以查出該image的所有對象:
[root@cc ~]# rados -p rbd ls | grep rb.0.11895f.6b8b4567
rb.0.11895f.6b8b4567.000000000006
rb.0.11895f.6b8b4567.000000000003
rb.0.11895f.6b8b4567.000000000012
rb.0.11895f.6b8b4567.00000000013b
rb.0.11895f.6b8b4567.000000000001
rb.0.11895f.6b8b4567.00000000003f
rb.0.11895f.6b8b4567.000000000002
rb.0.11895f.6b8b4567.0000000001f8
rb.0.11895f.6b8b4567.000000000017
rb.0.11895f.6b8b4567.00000000001a
rb.0.11895f.6b8b4567.000000000008
rb.0.11895f.6b8b4567.0000000000bd
rb.0.11895f.6b8b4567.000000000010
rb.0.11895f.6b8b4567.00000000000c
rb.0.11895f.6b8b4567.000000000016
rb.0.11895f.6b8b4567.000000000040
rb.0.11895f.6b8b4567.0000000001b9
rb.0.11895f.6b8b4567.000000000019
rb.0.11895f.6b8b4567.000000000000
rb.0.11895f.6b8b4567.000000000007
rb.0.11895f.6b8b4567.00000000000e
rb.0.11895f.6b8b4567.000000000011
rb.0.11895f.6b8b4567.00000000000a
rb.0.11895f.6b8b4567.0000000001ff
rb.0.11895f.6b8b4567.000000000018
rb.0.11895f.6b8b4567.000000000009
rb.0.11895f.6b8b4567.0000000000fc
rb.0.11895f.6b8b4567.000000000004
rb.0.11895f.6b8b4567.00000000007e
rb.0.11895f.6b8b4567.000000000014
rb.0.11895f.6b8b4567.00000000000d
rb.0.11895f.6b8b4567.00000000000b
rb.0.11895f.6b8b4567.00000000001e
rb.0.11895f.6b8b4567.0000000000fe
rb.0.11895f.6b8b4567.00000000017a
rb.0.11895f.6b8b4567.00000000000f
rb.0.11895f.6b8b4567.0000000000fd
rb.0.11895f.6b8b4567.00000000001c
rb.0.11895f.6b8b4567.00000000001d
rb.0.11895f.6b8b4567.00000000001f
rb.0.11895f.6b8b4567.000000000005
rb.0.11895f.6b8b4567.000000000015
rb.0.11895f.6b8b4567.00000000001b
從上面的查詢結果中可以看出,一個image對象是由上面的object組成的,他們每一個的存儲位置可能都不一樣。我們以第一行的紫色object來查詢它的真實存儲位置。
3、查看object所在的PG和OSD
[root@cc ~]# ceph osd map rbd rb.0.11895f.6b8b4567.000000000006
osdmap e65 pool 'rbd' (2) object 'rb.0.11895f.6b8b4567.000000000006' -> pg 2.e1382280 (2.0) -> up ([3,0], p3) acting ([3,0], p3)
[root@cc ~]#
這代表在pool rbd中的 rb.0.11895f.6b8b4567.000000000006這個對象位於2.0這個pg中,並且位於osd3和osd0上(兩個副本)。
4、進入機器osd3上,進入下面目錄
[root@nc3 2.0_head]# cd /var/lib/ceph/osd/ceph-3/current/2.0_head
[root@nc3 2.0_head]# ll
total 8196
-rw-r--r-- 1 root root 0 Mar 28 18:52 __head_00000000__2
-rw-r--r-- 1 root root 4194304 Apr 14 14:49 rb.0.11895f.6b8b4567.000000000003__head_7494AE80__2
-rw-r--r-- 1 root root 4194304 Apr 14 14:49 rb.0.11895f.6b8b4567.000000000006__head_E1382280__2
下面的藍色加粗的這個文件就是rb.0.11895f.6b8b4567.000000000006這個object的真實位置,同理,我們可以找出第2步當中的所有object的真實位置。
osd0上的跟osd3上的方法一樣,不再說了。