建立乙個image

2021-07-13 21:58:33 字數 1805 閱讀 7243

ceph 版本:0.94

.7rbd命令操作的資源有volume(預設)、snap、lock三類資源

using rbd to create empty image

rbd create --size 1024000 test1

ceph/src/rbd.cc

>main(...)

[code section 定義一些後期使用到的例項及區域性變數]

[cs 提取傳入的引數]

>...) [全域性初始化工作]

[cs 解析輸入引數,並初始化部分區域性變數]

>...) [完成通用元件的初始化]

[cs 確定操作符,並初始化部分區域性變數]

[cs 檢查輸入引數是否合法]

>...) [初始化rados handler]

>12~25之間,即物件大小範圍4kb~32mb]

>do_create(...) [建立volume]

[location src/librbd/librbd.cc]

>rbd.create(...) or rbd.create3(...) [建立volume]

[location src/librbd/internal.cc]

>librbd::create(...) [為建立volume,設定feature]

>librbd::create(...) [建立volume]

>detect_format(...) [探測物件的格式(do not care)]

[location src/librados/librados.cc]

>io_ctx.stat(...) [檢查物件是否存在]

>stat(...)

...)

...)

rados rados(io_ctx)

>...)

>create_v1(...) [建立volume]

>...) [驗證pool]

>...) [新增image到directory中]

struct rbd_obj_header_ondisk header

>...) [初始化header]

>...) [寫入物件]

[注:image的header物件中儲存該物件的元資訊]

...)

...)

...)

...) or rbd.create(...)

...)

[location src/librados/librados.cc]

主要是例項化radosclient(dispatcher),相對於服務端的client。

rados.init_with_context(...)

>rados_create_with_context(...)

>...)

client->connect()

>...) [建立client端messenger層的例項]

>set_default_policy(...) [設定policy]

>...)

>init() [初始化效能計數器]

>add_dispatcher_tail(objecter)

>add_dispatcher_tail(this)

>start()

>...)

>start()

>connect()

獲取mon map

monclient.build_initial_monmap()

messenger->start()

docker 建立乙個簡單的image

1 mkdir hello world,建立乙個資料夾,cd hello world 進入資料夾,vim hello.c建立乙個c檔案 寫乙個簡單的方法,列印hello docker 2 編譯c檔案需要安裝gcc 使用 yum install gcc 和glibc static 使用 yum ins...

RBD 匯出乙個image

rbd 匯出乙個image。do export librbd image image,const char path image.stat info,sizeof info open path,o wronly o creat o excl,0644 new aioexportcontext thr...

建立乙個類

c 是一門物件導向的程式語言,而物件導向的基礎就是類 使用c 建立乙個student類 class student 學生類 輸出學生的資訊 void outputstudent void void student input char name,int age,int no void student...