做以下操作之前需要先停掉osd
普通的Header对象
列出有哪些属性
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore rbd_data.42d9f1fdc7dff2.0000000000000504 list-attrs 2> /dev/zero
_
snapset
可以看到有两个属性:
-
“_”:object_info_t
-
“SnapSet”:SnapSet
find_object_context的时候就是或者这两个属性,这两个属性代表了对象的上下文。
查看对象每个属性的内容
ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore rbd_data.42d9f1fdc7dff2.0000000000000504 get-attr "_" > 1.txt
[root@k8s-node1 ~]# ceph-dencoder import 1.txt type object_info_t decode dump_json
{
"oid": {
"oid": "rbd_data.42d9f1fdc7dff2.0000000000000504",
"key": "",
"snapid": -2,
"hash": 2708742671,
"max": 0,
"pool": 1,
"namespace": ""
},
"version": "342'36",
"prior_version": "322'33",
"last_reqid": "osd.3.0:41",
"user_version": 33,
"size": 4194304,
"mtime": "2023-07-18 11:35:04.763217",
"local_mtime": "2023-07-18 11:35:04.766368",
"lost": 0,
"flags": [
"dirty",
"data_digest",
"omap_digest"
],
"truncate_seq": 0,
"truncate_size": 0,
"data_digest": "0x3b11aa72",
"omap_digest": "0xffffffff",
"expected_object_size": 4194304,
"expected_write_size": 4194304,
"alloc_hint_flags": 0,
"manifest": {
"type": 0
},
"watchers": {}
}
ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore rbd_data.42d9f1fdc7dff2.0000000000000504 get-attr snapset > 2.txt
[root@k8s-node1 ~]# ceph-dencoder import 2.txt type SnapSet decode dump_json
{
"snap_context": {
"seq": 0,
"snaps": []
},
"clones": []
}
带有的快照的对象的解码
注意list-attrs的时候此时会报错,说有两个相同的对象
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore rbd_data.64ce414394b57a.0000000000000000 list-attrs
Found 2 objects with id 'rbd_data.64ce414394b57a.0000000000000000', please use a JSON spec from --op list instead
根据提示我们可以进行如下操作,得到该对象存在两个子对象,一个就是snapid为-2的header,还有snapid为4的clone
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore --op list rbd_data.64ce414394b57a.0000000000000000
["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":4,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]
["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":-2,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]
我们查看两个子对象:
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":4,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' list-attrs
_
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":-2,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' list-attrs
_
snapset
可以看出子对象中,只有header对象才有snapset属性,接下来我们进一步dump出具体的内容
dump
- clone对象的“_”
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":4,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' get-attr "_" > 3.txt
[root@k8s-node1 ~]# ceph-dencoder import 3.txt type object_info_t decode dump_json
{
"oid": {
"oid": "rbd_data.64ce414394b57a.0000000000000000",
"key": "",
"snapid": 4,
"hash": 3989087978,
"max": 0,
"pool": 1,
"namespace": ""
},
"version": "337'36",
"prior_version": "336'35",
"last_reqid": "client.605976.0:13993931",
"user_version": 35,
"size": 4194304,
"mtime": "2023-08-15 20:38:06.943213",
"local_mtime": "2023-08-15 20:38:06.948631",
"lost": 0,
"flags": [
"dirty",
"data_digest"
],
"truncate_seq": 0,
"truncate_size": 0,
"data_digest": "0x43d61c5d",
"omap_digest": "0xffffffff",
"expected_object_size": 0,
"expected_write_size": 0,
"alloc_hint_flags": 0,
"manifest": {
"type": 0
},
"watchers": {}
}
- header对象的“_”
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":-2,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' get-attr "_" > 4.txt
[root@k8s-node1 ~]# ceph-dencoder import 4.txt type object_info_t decode dump_json
{
"oid": {
"oid": "rbd_data.64ce414394b57a.0000000000000000",
"key": "",
"snapid": -2,
"hash": 3989087978,
"max": 0,
"pool": 1,
"namespace": ""
},
"version": "337'37",
"prior_version": "336'35",
"last_reqid": "client.605976.0:14002137",
"user_version": 37,
"size": 4194304,
"mtime": "2023-08-15 21:04:09.444052",
"local_mtime": "2023-08-15 21:04:09.448472",
"lost": 0,
"flags": [
"dirty",
"data_digest"
],
"truncate_seq": 0,
"truncate_size": 0,
"data_digest": "0x43d61c5d",
"omap_digest": "0xffffffff",
"expected_object_size": 4194304,
"expected_write_size": 4194304,
"alloc_hint_flags": 0,
"manifest": {
"type": 0
},
"watchers": {}
}
- header对象的“snapset”
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":-2,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' get-attr "snapset" > 5.txt
[root@k8s-node1 ~]# ceph-dencoder import 5.txt type SnapSet decode dump_json
{
"snap_context": {
"seq": 4,
"snaps": [
4
]
},
"clones": [
{
"snap": 4,
"size": 4194304,
"overlap": "[]",
"snaps": [
4
]
}
]
}
其实bluestore还提供了一次dump全部属性的方法:
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore '["1.ea",{"oid":"rbd_data.64ce414394b57a.0000000000000000","key":"","snapid":4,"hash":3989087978,"max":0,"pool":1,"namespace":"","max":0}]' dump
{
"id": {
"oid": "rbd_data.64ce414394b57a.0000000000000000",
"key": "",
"snapid": 4,
"hash": 3989087978,
"max": 0,
"pool": 1,
"namespace": "",
"max": 0
},
"info": {
"oid": {
"oid": "rbd_data.64ce414394b57a.0000000000000000",
"key": "",
"snapid": 4,
"hash": 3989087978,
"max": 0,
"pool": 1,
"namespace": ""
},
"version": "337'36",
"prior_version": "336'35",
"last_reqid": "client.605976.0:13993931",
"user_version": 35,
"size": 4194304,
"mtime": "2023-08-15 20:38:06.943213",
"local_mtime": "2023-08-15 20:38:06.948631",
"lost": 0,
"flags": [
"dirty",
"data_digest"
],
"truncate_seq": 0,
"truncate_size": 0,
"data_digest": "0x43d61c5d",
"omap_digest": "0xffffffff",
"expected_object_size": 0,
"expected_write_size": 0,
"alloc_hint_flags": 0,
"manifest": {
"type": 0
},
"watchers": {}
},
"stat": {
"size": 4194304,
"blksize": 4096,
"blocks": 1024,
"nlink": 1
}
}
[root@k8s-node1 ~]# ceph-objectstore-tool --data-path /data/cos/osd/osd.DATASTOR_B --type bluestore rbd_data.42d9f1fdc7dff2.0000000000000504
{
"id": {
"oid": "rbd_data.42d9f1fdc7dff2.0000000000000504",
"key": "",
"snapid": -2,
"hash": 2708742671,
"max": 0,
"pool": 1,
"namespace": "",
"max": 0
},
"info": {
"oid": {
"oid": "rbd_data.42d9f1fdc7dff2.0000000000000504",
"key": "",
"snapid": -2,
"hash": 2708742671,
"max": 0,
"pool": 1,
"namespace": ""
},
"version": "342'36",
"prior_version": "322'33",
"last_reqid": "osd.3.0:41",
"user_version": 33,
"size": 4194304,
"mtime": "2023-07-18 11:35:04.763217",
"local_mtime": "2023-07-18 11:35:04.766368",
"lost": 0,
"flags": [
"dirty",
"data_digest",
"omap_digest"
],
"truncate_seq": 0,
"truncate_size": 0,
"data_digest": "0x3b11aa72",
"omap_digest": "0xffffffff",
"expected_object_size": 4194304,
"expected_write_size": 4194304,
"alloc_hint_flags": 0,
"manifest": {
"type": 0
},
"watchers": {}
},
"stat": {
"size": 4194304,
"blksize": 4096,
"blocks": 1024,
"nlink": 1
},
"SnapSet": {
"snap_context": {
"seq": 0,
"snaps": []
},
"clones": []
}
}
只是上面的操作更加明了而已