rbd對象探究

rbd對象探究

1. rbd鏡像的創(chuàng)建與使用

為了更直觀的感受rbd對象出刷,本文從創(chuàng)建rbd池開始,構(gòu)建了一個模擬的rbd使用環(huán)境艺晴,并以此探究rbd的對象庶艾。

首先是rbd池的創(chuàng)建與使用:

服務(wù)端:

1.創(chuàng)建rbd池

[root@node-1 ~]# ceph osd pool create rbd-pool 64 64 && rbd pool init rbd-pool

2.創(chuàng)建塊設(shè)備鏡像

[root@node-1 ~]# rbd create --size 1024 rbd-pool/rbd-pool-image-1

3.拷貝密鑰文件兽赁,或者創(chuàng)建新用戶状答,這里直接拷貝admin密鑰及配置

[root@node-1 ~]# scp –r /etc/ceph 192.168.159.132:/etc/

客戶端:

1.注意更新ceph yum源

2.安裝ceph-common

[root@192.168.159.132 ~]# yum install ceph-common –y

3.掛載塊設(shè)備鏡像

[root@192.168.159.132 ~]# rbd map rbd-pool/rbd-pool-image-1

4.格式化冷守,僅第一次掛載需要,塊設(shè)備名稱注意更改

[root@192.168.159.132 ~]# mkfs.xfs /rbd /dev/rbd0

5.掛載到目錄

[root@192.168.159.132 ~]# mkdir /mnt/rbd0 && mount /dev/rbd0 /mnt/rbd0

6.卸載

[root@192.168.159.132 ~]# umount /mnt/rbd0 && rbd unmap rbd-pool/rbd-pool-image-1

注意:在rbd map時可能會報錯惊科,因?yàn)閮?nèi)核特性不支持拍摇。

rbd: sysfs write failed

RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd-pool/rbd-pool-image-1 object-map fast-diff deep-flatten".

In some cases useful info is found in syslog - try "dmesg | tail".

rbd: map failed: (6) No such device or address

這里根據(jù)提示關(guān)閉某些特性即可。

2. 當(dāng)我們創(chuàng)建鏡像時馆截,創(chuàng)建了什么授翻?

[root@node-1 ~]# rados -p rbd-pool ls

rbd_object_map.20cc292949764 # rbd特性信息

rbd_header.20cc292949764 #image元數(shù)據(jù)

rbd_directory # 記錄該rbd池中含有的image_nameid

rbd_info # rbd信息

rbd_id.rbd-pool-image-1 #此鏡像的id

通過以上命令及其結(jié)果可以看出孙咪,相關(guān)含義在《Ceph設(shè)計(jì)原理與實(shí)現(xiàn)》一書中有詳細(xì)介紹,當(dāng)我們創(chuàng)建完鏡像后巡语,rbd-pool中多了幾個對象翎蹈。其含義可在src/include/rbd_types.h文檔中查看。

/* New-style rbd image 'foo' consists of objects

  • rbd_id.foo - id of image

  • rbd_header.<id> - image metadata

  • rbd_object_map.<id> - optional image object map

  • rbd_data.<id>.00000000

  • rbd_data.<id>.00000001

  • ... - data

*/

目前rbd鏡像中還沒有文件男公,因此大部分對象是空的荤堪。通過“rados -p rbd-pool get <obj_name> <output_file_name>”命令可以導(dǎo)出對象。

經(jīng)過查看枢赔,發(fā)現(xiàn)rbd_id.rbd-pool-image-1保存了鏡像的id:20cc292949764澄阳。

rbd_info中保存了:overwrite validated。

rbd_object_map.20cc292949764中保存了:

{

"size": 256,

"bit_table": [

"0x00",

"0x00",

}//用于支持 object-map特性踏拜,具體作用在實(shí)踐中遇到再來補(bǔ)充碎赢。

這里給出查看rbd_object_map命令: ceph-dencoder import ./rbd_object_map.20cc292949764 type BitVector<2> decode dump_json。

3. 向rbd寫入一個文件后速梗,實(shí)際寫入的是什么肮塞?

在mkfs塊設(shè)備后,我們查看下rbd-pool中的對象姻锁。

[root@node-1 data]# rados -p rbd-pool ls

rbd_data.20e5ff0224ec0.00000000000000e0 #image對象信息

rbd_directory #rbd管理image對象信息

rbd_header.20e5ff0224ec0 #image元數(shù)據(jù)

rbd_data.20e5ff0224ec0.0000000000000060 #

rbd_info #rbd信息

rbd_data.20e5ff0224ec0.0000000000000001

rbd_data.20e5ff0224ec0.00000000000000ff

rbd_data.20e5ff0224ec0.0000000000000080

rbd_id.rbd-pool-image-1 #記錄image_nameimage_id的映射關(guān)系

rbd_data.20e5ff0224ec0.00000000000000c0

rbd_data.20e5ff0224ec0.0000000000000082

rbd_data.20e5ff0224ec0.0000000000000020

rbd_data.20e5ff0224ec0.0000000000000040

rbd_data.20e5ff0224ec0.0000000000000081

rbd_data.20e5ff0224ec0.0000000000000000

rbd_data.20e5ff0224ec0.00000000000000a0

發(fā)現(xiàn)增加了12個rbd_data對象枕赵。rbd被xfs格式化以后會產(chǎn)生一些對象,這些對象是以16進(jìn)制名稱的方式存儲在后臺的位隶,也就是rbd大小一定的情況下對象數(shù)目是一定的拷窜,也就是名稱也是一定的。在后續(xù)的向文件中寫入操作的過程中涧黄,還會發(fā)現(xiàn)篮昧,對象依然是從rbd_data.*****00的對象開始寫入。這個實(shí)際和客戶端格式化的文件系統(tǒng)有關(guān)弓熏。在《從ceph對象中提取rbd中的指定文件》一文中可以得知:rbd存儲對象和文件系統(tǒng)的sectors是一一對應(yīng)的恋谭。

客戶端查看分區(qū)設(shè)備信息:

[root@localhost ~]# parted -s /dev/rbd0 unit s print

Model: 未知 (unknown)

Disk /dev/rbd0: 2097152s

Sector size (logical/physical): 512B/512B

Partition Table: loop

Disk Flags:

Number Start End Size File system 標(biāo)志

  • 1 0s 2097151s 2097152s xfs*

上面結(jié)果中“Start”對應(yīng)的“0s”表示該分區(qū)設(shè)備從第0塊sector開始寫入,每塊sector大小512B挽鞠,共有2097152s 塊疚颊。

服務(wù)端查看鏡像信息:

[root@node-1 ~]# rbd info rbd-pool/rbd-pool-image-1

rbd image 'rbd-pool-image-1':

size 1 GiB in 256 objects #大小1GB狈孔,平均分配給256個對象

order 22 (4 MiB objects) # 每個對象大小4MB

snapshot_count: 0

id: 20e5ff0224ec0

block_name_prefix: rbd_data.20e5ff0224ec0

format: 2 # image 1 基本上不用

features: layering, exclusive-lock

op_features: # image支持的特性

flags:

create_timestamp: Wed May 26 16:42:36 2021

access_timestamp: Wed May 26 16:42:36 2021

modify_timestamp: Wed May 26 16:42:36 2021

上述結(jié)果可知鏡像對應(yīng)的塊設(shè)備大小1GB,平均分配到256個對象材义,每個4MB均抽。

簡單計(jì)算可以得出:sector數(shù)量 * 單個sector大小 = 鏡像大小

2097152 * 512 / 1024 / 1024 = 1024 MB = 1GB。

因此2097152個sector和image中的256個對象存在對應(yīng)關(guān)系其掂。已知sector從0塊開始寫入油挥,那么obj應(yīng)該也從0開始增長,寫滿4MB后款熬,換到新的obj深寥。

我在這里使用dd命令在客戶端寫入一個4MB對象,然后再去查看pool中對象信息贤牛。

這里我們在客戶端上掛載鏡像后惋鹅,向該目錄中寫入一個無意義對象。

[root@localhost mnt]# dd if=/dev/zero of=/mnt/rbd0/file1 count=1 bs=4MB

然后殉簸,觀察rbd-pool對象情況闰集。

[root@node-1 ~]# rados -p rbd-pool ls

rbd_data.20e5ff0224ec0.00000000000000e0

rbd_directory

rbd_header.20e5ff0224ec0

rbd_data.20e5ff0224ec0.0000000000000060

rbd_info

rbd_data.20e5ff0224ec0.0000000000000001

rbd_data.20e5ff0224ec0.00000000000000ff

rbd_data.20e5ff0224ec0.0000000000000080

rbd_id.rbd-pool-image-1

rbd_data.20e5ff0224ec0.00000000000000c0

rbd_data.20e5ff0224ec0.0000000000000082

rbd_data.20e5ff0224ec0.0000000000000020

rbd_data.20e5ff0224ec0.0000000000000040

rbd_data.20e5ff0224ec0.0000000000000081

rbd_data.20e5ff0224ec0.0000000000000000

rbd_data.20e5ff0224ec0.00000000000000a0

似乎沒有變化,但其實(shí)rbd_data.******00對象的大小增加了般卑,先按下不表武鲁,我們看下此時rbd_data.******00對象的大小。

[root@node-1 ~]# rados -p rbd-pool stat rbd_data.20e5ff0224ec0.0000000000000000

rbd-pool/rbd_data.20e5ff0224ec0.0000000000000000 mtime 2021-05-26 18:22:26.000000, size 4034560

經(jīng)查詢蝠检,rbd_data.******00對象大小為4034560B沐鼠。

我們再向客戶端掛載的文件目錄中寫入一個有意義的小對象。

[root@localhost rbd0]# vi hellorbd

hello rbd

然后蝇率,查看hellorbd文件在塊設(shè)備中的位置迟杂,順便也可以看下file1的位置。

[root@localhost rbd0]# xfs_bmap -lvp /mnt/rbd0/hellorbd

/mnt/rbd0/hellorbd:

  • EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS*

0: [0..7]: 7880..7887 0 (7880..7887) 8 01111

[root@localhost rbd0]# xfs_bmap -lvp /mnt/rbd0/file1

/mnt/rbd0/file1:

  • EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL FLAGS*

0: [0..7815]: 64..7879 0 (64..7879) 7816 01111

可以看出hellorbd在sector中分布在[7880~7887]本慕,file1為[64~7879]排拷。hellorbd緊跟著file1,并且file1并非從0開始锅尘,而是從64開始监氢,說明前面的sector已經(jīng)被使用,這段64個sector(即 64 * 512 B)長度空間在格式化文件系統(tǒng)的時候已經(jīng)被占用了藤违。還有一點(diǎn)值得吐槽的是:dd命令中的4MB浪腐,實(shí)際寫入大小只有4000000B。

根據(jù)hellorbd的位置信息顿乒,可以計(jì)算出它存儲在在rbd-pool/rbd-pool-image-1中的對象的具體位置议街。

計(jì)算方法:

1.計(jì)算出hellorbd到rbd-pool對象的映射

sectors數(shù)量 / 對象數(shù)量 = 單個對象的sectors范圍

2097152/256 = 8192

根據(jù) hellorbd:[7880~7887],可以得出hellorbd在第0個對象中:rbd_data.******00璧榄。

2.計(jì)算出hellorbd在rbd_data對象中偏移量

(7880 - (0 * 8192))* 512B = 4030560

4034560特漩!還記得我們上文中在寫入file1之后吧雹,查看過rbd_data.******00對象的大小嗎?就是4034560涂身。

接下來使用rados命令和dd命令在服務(wù)端還原出rbdhello雄卷。

[root@node-1 ~]# rados -p rbd-pool get rbd_data.20e5ff0224ec0.0000000000000000 ./rbd_data.20e5ff0224ec0.0000000000000000

[root@node-1 ~]# dd if=rbd_data.20e5ff0224ec0.0000000000000000 of=hellorbd bs=512 count=8 skip=7880

  • [root@node-1 ~]# cat hellorbd*

hello rbd

或者,

[root@node-1 ~]# dd if=rbd_data.20e5ff0224ec0.0000000000000000 of=hellorbd-1 bs=1 count=4096 skip=4034560

[root@node-1 ~]# cat hellorbd-1

hello rbd

可以得出蛤售,塊設(shè)備在rbd中被切割成一個個對象丁鹉,保存在rbd_data對象中,這樣使得rbd管理起塊設(shè)備的數(shù)據(jù)極為方便悴能,而且也達(dá)到到了瘦分配的特性揣钦。rbd_data中還保存著客戶端中這個設(shè)備的信息(文件系統(tǒng),大小等)漠酿,這個客戶端在掛載時拂盯,可以直接把image映射為一個塊設(shè)備,其所有讀寫操作的本質(zhì)都是rbd_data记靡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市团驱,隨后出現(xiàn)的幾起案子摸吠,更是在濱河造成了極大的恐慌,老刑警劉巖嚎花,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸痢,死亡現(xiàn)場離奇詭異,居然都是意外死亡紊选,警方通過查閱死者的電腦和手機(jī)啼止,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兵罢,“玉大人献烦,你說我怎么就攤上這事÷舸剩” “怎么了巩那?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長此蜈。 經(jīng)常有香客問我即横,道長,這世上最難降的妖魔是什么裆赵? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任东囚,我火速辦了婚禮,結(jié)果婚禮上战授,老公的妹妹穿的比我還像新娘页藻。我一直安慰自己桨嫁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布惕橙。 她就那樣靜靜地躺著瞧甩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弥鹦。 梳的紋絲不亂的頭發(fā)上肚逸,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音彬坏,去河邊找鬼朦促。 笑死,一個胖子當(dāng)著我的面吹牛栓始,可吹牛的內(nèi)容都是我干的务冕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幻赚,長吁一口氣:“原來是場噩夢啊……” “哼禀忆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起落恼,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤箩退,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佳谦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戴涝,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年钻蔑,在試婚紗的時候發(fā)現(xiàn)自己被綠了啥刻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咪笑,死狀恐怖可帽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窗怒,我是刑警寧澤蘑拯,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站兜粘,受9級特大地震影響申窘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孔轴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一剃法、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧路鹰,春花似錦贷洲、人聲如沸收厨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵叁。三九已至,卻和暖如春钦椭,著一層夾襖步出監(jiān)牢的瞬間拧额,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工彪腔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侥锦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓德挣,卻偏偏與公主長得像恭垦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子格嗅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容