知识卡片

RBD用多个专职对象拆分标识与数据

专业/工作 · 236.d.1

内容

一个 RBD 块设备并非对应单一对象,而是拆成多个各司其职的对象:rbd_directory(每个 pool 一份,omap 里记录所有 RBD 名字到 id 的映射,充当目录)、rbd_id.(保存名字到 id 的正向查找)、rbd_header.(omap 保存 size/order/feature 等元数据)、rbd_object_map.(记录与父镜像的对象映射,用于 [[RBD克隆靠CopyUp延迟复制父镜像数据|克隆]])、以及一串 rbd_data..NNNNNNNN 实际数据对象。用多个小对象各自维护一部分职责,而不是一个大对象塞下所有信息,使得目录查找、元数据读写、数据 IO 可以并发进行、互不阻塞,也方便单独对某一部分做权限或缓存控制。

参考来源

《Ceph源码分析》第5章《Ceph客户端》