RBD 匯出乙個image

2021-07-25 16:53:31 字數 2018 閱讀 8197

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(throttle, image, offset, length, fd)

>image.aio_read2(offset, length, m_bufferlist, m_aio_completion,op_flags)

>submit_aio_read(ictx, off, len, null, &bl, get_aio_completion(c), op_flags) //提交讀取任務,同寫入,分阻塞與非阻塞兩種

>ictx->aio_work_queue->

queue(new c_aioreadwq(ictx, off, len, buf, pbl, c,op_flags)) //非阻塞讀取方式

>librbd::aio_read(ictx, off, len, buf, pbl, c, op_flags) //阻塞讀取方式

>aio_read(ictx, image_extents, buf, bl, c, op_flags)

>striper::file_to_extents(cct, ictx->format_string, &ictx->layout,p->first, len, 0, object_extents, buffer_ofs) //把要讀取image的部分,對映到對應不同物件的區間上去

>aioread *req =

new aioread(ictx, q->oid.name, q->objectno, q->offset,q->length, q->buffer_extents, snap_id, true,req_comp, op_flags)

>ictx->aio_read_from_cache(q->oid, q->objectno, &req->

data(),q->length, q->offset,cache_comp, op_flags) //rbd如果開啟cache,從cache中讀取

>req->send() //沒有開啟rbd cache

> op.sparse_read(m_object_off, m_object_len, &m_ext_map, &m_read_data,null) //把請求資訊封裝到objectoperation(objecter)中

or>op.read(m_object_off, m_object_len, &m_read_data, null) //

>r = m_ictx->data_ctx.aio_operate(m_oid, rados_completion, &op, flags, null)

>io_ctx_impl->aio_operate(obj, (::objectoperation

*)o->impl, c->pc,io_ctx_impl->snapc, 0)

>objecter->mutate(oid, oloc, *o, snap_context, ut, flags, onack, oncommit,&c->objver)

>op *o = prepare_mutate_op(oid, oloc, op, snapc, mtime, flags, onack, oncommit, objver) //構建op

>op_submit(o)

>_op_submit_with_budget(op, lc, ctx_budget)

>int op_budget = _take_op_budget(op)

讀取image的部分資料:

1.確定要讀取image的區間範圍(off,len)

2.將預讀的區間對映到相應的物件上

3.將聯絡的操作(單個物件)和到乙個op中

4.objecter層->massenger 傳送請求到服務端。

ceph中檢視乙個rbd的image的真實儲存位置

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 mys...

建立乙個image

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 定義一些後...

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...