rbd元数据

https://cloud.tencent.com/developer/article/1006283

实际操作示例的 Ceph Pool → RBD → Object → OMAP 文档


Ceph Pool / RBD / Object / OMAP 完整文档


1️⃣ 关键概念说明

概念说明
Pool Ceph 的逻辑存储分区,存放 RBD images、普通对象和元数据对象。
Object Pool 中最小的存储单元,可以存储 RBD 数据块或元数据,每个对象有唯一 object-name
object-name 对象在 Pool 中的唯一名称,用于 rados/rbd 命令操作。
RBD Data Object RBD image 的实际数据块,名称通常为 rbd_data.<image-id>.<seq>,通常不包含 OMAP。
Metadata Object 用于存储 RBD image 或 CSI 卷的元数据对象,可以包含 OMAP。
OMAP (Object Map) 对象内部的 key/value 存储,用于保存元数据,不属于 RBD 数据本身。
OMAP Key / Value OMAP 中的键/值对,用于记录卷信息、PVC 映射、挂载节点或自定义信息。
命令操作 listomapkeys <object> 列出对象 OMAP 中所有 key;getomapval <object> <key> 获取 value;setomapval <object> <key> <value> 设置 key/value;rmomapkey <object> <key> 删除 key。

2️⃣ 实际环境示例

项目示例值
Pool ceph-demo
RBD Image csi-vol-fddd5d81-0e8d-4310-aa30-2be229ab659a
Metadata Object csi.volumes.default
OMAP Key 示例 csi.volume.pvc-fddd5d81-0e8d-4310-aa30-2be229ab659a
OMAP Value 示例 b25fb42f-3062-49d4-ab67-fb5a1542ba24

3️⃣ 对象结构示意图(文字版)

Ceph Pool: ceph-demo
├── RBD Image: csi-vol-fddd5d81-0e8d-4310-aa30-2be229ab659a
│    ├── Data Objects (rbd_data.*)
│    │     ├ rbd_data.30d7d6a67b359a.0000000000000000
│    │     ├ rbd_data.30d7d6a67b359a.0000000000000001
│    │     └ rbd_data.30d7d6a67b359a.0000000000000002
│    │
│    └── Metadata Object (CSI Metadata, 如果存在)
│          csi-vol-fddd5d81-0e8d-4310-aa30-2be229ab659a-csi-metadata
│          └── OMAP (key/value)
│                csi.volume.name   -> pvc-fddd5d81-0e8d-4310-aa30-2be229ab659a
│                csi.volume.handle -> csi-fddd5d81-0e8d-4310-aa30-2be229ab659a
│                csi.volume.node   -> node01
│
├── Pool 管理对象 (存储 PVC → RBD 映射)
│     csi.volumes.default
│     └── OMAP
│           csi.volume.pvc-fddd5d81-0e8d-4310-aa30-2be229ab659a -> b25fb42f-3062-49d4-ab67-fb5a1542ba24
│           csi.volume.pvc-<other-pvc> -> <对应 RBD 卷名>
└── 其他对象

说明

  • RBD Data Objects (rbd_data.*) 通常没有 OMAP。

  • Metadata ObjectsPool 管理对象 可以存 OMAP。

  • listomapkeysgetomapvalsetomapvalrmomapkey 都是操作对象内部的 OMAP。


4️⃣ 实际操作示例

4.1 列出对象中的 OMAP keys

rados listomapkeys -p ceph-demo csi.volumes.default

示例输出:

csi.volume.pvc-fddd5d81-0e8d-4310-aa30-2be229ab659a
csi.volume.pvc-ff0d92f5-f7b9-43a2-9667-81c6877649af
...

4.2 获取某个 OMAP key 对应的 value

rados getomapval -p ceph-demo \
  csi.volumes.default \
  csi.volume.pvc-fddd5d81-0e8d-4310-aa30-2be229ab659a

示例输出:

value (36 bytes) :
00000000  62 32 35 66 62 34 32 66  2d 33 30 36 32 2d 34 39  |b25fb42f-3062-49|
00000010  64 34 2d 61 62 36 37 2d  66 62 35 61 31 35 34 32  |d4-ab67-fb5a1542|
00000020  62 61 32 34                                       |ba24|

注:不同 Ceph 版本可能会输出十六进制显示,需要手动转换或直接使用。

4.3 设置 OMAP key/value

rados setomapval -p ceph-demo \
  csi.volumes.default \
  csi.volume.pvc-new \
  <RBD image name>

4.4 删除 OMAP key

rados rmomapkey -p ceph-demo \
  csi.volumes.default \
  csi.volume.pvc-old

4.5 删除对象

rados rm -p ceph-demo <object-name>

5️⃣ 总结

  1. object-name:对象在 Pool 中的唯一标识。

  2. OMAP:对象内部的 key/value 存储,不属于 RBD 数据。

  3. RBD Data Objects (rbd_data.*) 通常没有 OMAP。

  4. Metadata Objects 或 Pool 管理对象可以存 OMAP。

  5. 操作命令listomapkeys / getomapval / setomapval / rmomapkey

  6. PVC → RBD 映射 保存在 csi.volumes.<namespace> 对象的 OMAP 中。


 

posted on 2025-10-29 14:52  吃草的青蛙  阅读(7)  评论(0)    收藏  举报

导航