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 Objects 或 Pool 管理对象 可以存 OMAP。
-
listomapkeys、getomapval、setomapval、rmomapkey都是操作对象内部的 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️⃣ 总结
-
object-name:对象在 Pool 中的唯一标识。
-
OMAP:对象内部的 key/value 存储,不属于 RBD 数据。
-
RBD Data Objects (
rbd_data.*) 通常没有 OMAP。 -
Metadata Objects 或 Pool 管理对象可以存 OMAP。
-
操作命令:
listomapkeys/getomapval/setomapval/rmomapkey。 -
PVC → RBD 映射 保存在
csi.volumes.<namespace>对象的 OMAP 中。
浙公网安备 33010602011771号