ceph塊設備的對象簡介

Ceph官方文檔告訴咱們Ceph本質上也是對象存儲。並且瞭解到,Ceph的塊存儲其實在客戶端也會被分爲若干個對象進行處理。函數

一. 實驗和步驟
  1. 建立test_pool:
$ ceph osd pool create test_pool 256  256
  1. 查看如今pool中的object
$ rados -p test_pool ls

結果爲空:證實create pool之後,沒有object產生。code

  1. 建立test_image:
$ rbd create test_pool/test_image --size 1024
  1. 查看test_image的信息:
$ rbd info test_pool/test_image
rbd image 'test_image':
	size 1024 MB in 256 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.100f74b0dc51
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	flags:

裏面比較重要的一個字段:
block_name_prefix: rbd_data.100f74b0dc51
這個字段將做爲該image每一個object的前綴。orm

  1. 查看建立test_image之後,test_pool中的object:
$ rados -p test_pool ls
rbd_directory
rbd_object_map.100f74b0dc51
rbd_id.test_image
rbd_header.100f74b0dc51
  1. 使用rbd-nbd進行map:
$rbd-nbd map test_pool/test_image  
/dev/nbd0
  1. 使用dd,在nbd0的開始位置,生成一個4M的object
$ dd if=/dev/zero of=/dev/nbd0 bs=4M count=1 seek=0
$ rados -p test_pool ls
rbd_data.100f74b0dc51.0000000000000000
rbd_directory
rbd_object_map.100f74b0dc51
rbd_id.test_image
rbd_header.100f74b0dc51
  1. 使用dd,在nbd0開始的第10個4M處,生成一個4M的object
$ dd if=/dev/zero of=/dev/nbd0 bs=4M count=1 seek=10
$ rados -p test_pool ls
rbd_directory
rbd_object_map.100f74b0dc51
rbd_id.test_image
rbd_header.100f74b0dc51
rbd_data.100f74b0dc51.000000000000000a

二. 原理解釋
建立卷: 使用Rados API建立一個Header Object,將這個卷的元數據如id, size, snaps, name, seq等信息寫入。而後將自身(id)註冊到一個」RBD_DIRECTORY」的Object裏。 記錄元數據信息:
1)
key: rbd_id.test_image
value: 100f74b0dc51
備註:image name到image id的映射。image id是用rand()函數,按必定規則生成。 這個object文件的大小爲16 byte。對象

key: rbd_header.100f74b0dc51
value: size : 10240
order : 22
object_prefix: rbd_data.100f74b0dc51
snap_seq: 0
備註:記錄元信息Order是用來計算block size,如order爲22,block size爲1<<22 = 4M 該object的大小爲0。文檔

key: rbd_directory
value: ……
name_test_image: id_100f74b0dc51
Id_100f74b0dc51: name_test_image
備註:rbd_directory中記錄了全部image的name和id的雙向映射關係。 該object的大小爲0。get

根據image id取得image name的方法:ast

$ rados -p test_pool getomapval rbd_directory id_100f74b0dc51
value (14 bytes) : 
00000000   0a 00 00 00 74 65 73 74   5f 69 6d 61 67 65                   |....test_image|
0000000e
  1. object_map

三. Object的數據文件form

root@ubu-machine:/etc/ceph/osd.0/current# ls
0.0_head   0.18_head  0.20_head  0.29_head  0.31_head  0.3a_head  0.6_head  0.f_head   1.17_head  1.1_head   1.28_head  1.30_head  1.39_head  1.5_head  1.e_head
0.0_TEMP   0.18_TEMP  0.20_TEMP  0.29_TEMP  0.31_TEMP  0.3a_TEMP  0.6_TEMP  0.f_TEMP   1.17_TEMP  1.1_TEMP   1.28_TEMP  1.30_TEMP  1.39_TEMP  1.5_TEMP  1.e_TEMP
0.10_head  0.19_head  0.21_head  0.2a_head  0.32_head  0.3b_head  0.7_head  1.0_head   1.18_head  1.20_head  1.29_head  1.31_head  1.3a_head  1.6_head  1.f_head

其中0.0_head,存儲0.0這個PG的object。test

root@ubu-machine:/etc/ceph/osd.0/current/1.1c_head# ll -h
total 4.1M
drwxr-xr-x   2 root root 4.0K  3月 15 21:54 ./
drwxr-xr-x 260 root root 8.0K  3月 15 21:52 ../
-rw-r--r--   1 root root    0  3月 15 21:52 __head_0000001C__1
-rw-r--r--   1 root root 4.0M  3月 15 21:54 rbd\udata.100f6b8b4567.0000000000000009__head_6E33BC5C__1
-rw-r--r--   1 root root    0  3月 15 21:54 rbd\udirectory__head_30A98C1C__1
相關文章
相關標籤/搜索