定位rgw分片上传的对象
version:ceph13.2.4
确定分片上传的全部对象
利用s3cmd向mpbucket01上传了一个名为2.txt的对象(210M)
1.首先确定bucket的bucketindex
[root@sns-nvceph01 ~]# radosgw-admin bucket stats | grep mpbucket01 -A 50
"bucket": "mpbucket01",
"zonegroup": "9a4a7e5e-48c5-486c-8e80-ff2f384045ff",
"placement_rule": "default-placement",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
},
"id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",#这是bucket.index的id
"marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"index_type": "Normal",
"owner": "client",
"ver": "0#200",
"master_ver": "0#0",
"mtime": "2019-04-25 14:02:27.599200",
"max_marker": "0#",
"usage": {
"rgw.main": {
"size": 770683833,
"size_actual": 770691072,
"size_utilized": 770683833,
"size_kb": 752621,
"size_kb_actual": 752628,
"size_kb_utilized": 752621,
"num_objects": 10
},
"rgw.multimeta": {
"size": 0,
"size_actual": 0,
"size_utilized": 0,
"size_kb": 0,
"size_kb_actual": 0,
"size_kb_utilized": 0,
"num_objects": 1
}
},
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
}
}
------------
2.根据bucketindex的id拼属性对象的名字,查找uploadid
先找到含有manifest属性的对象
保存整个对象的manifest的对象名字为:
{bucketindexid}+_{objectname}
对应的对象名字为:
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt
获取manifest属性,利用dencoder可以解码出属性.用户上传的自定义属性(s3支持用户上传自定义属性)也会存放在对象的attr属性中.dencoder使用
[root@sns-nvceph01 tmp]# rados -p default.rgw.buckets.data listxattr fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt
user.rgw.acl
user.rgw.content_type
user.rgw.etag
user.rgw.idtag
user.rgw.manifest
user.rgw.pg_ver
user.rgw.source_zone
user.rgw.tail_tag
user.rgw.x-amz-date
user.rgw.x-amz-meta-s3cmd-attrs
user.rgw.x-amz-storage-class
----------
rados -p default.rgw.buckets.data getxattr fa15df30-b48d-46a7-90bf-7b9212002005.4577.37_2.txt user.rgw.manifest > manifest.2.txt
----------
[root@sns-nvceph01 tmp]# ceph-dencoder import 'manifest.2.txt' type RGWObjManifest decode dump_json
{
"objs": [],
"obj_size": 220194451,
"explicit_objs": "false",
"head_size": 0,
"max_head_size": 0,
"prefix": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo",
"rules": [
{
"key": 0,
"val": {
"start_part_num": 1,
"start_ofs": 0,
"part_size": 15728640,
"stripe_max_size": 4194304,
"override_prefix": ""
}
},
{
"key": 204472320,
"val": {
"start_part_num": 14,
"start_ofs": 204472320,
"part_size": 15722131,
"stripe_max_size": 4194304,
"override_prefix": ""
}
}
],
"tail_instance": "",
"tail_placement": {
"bucket": {
"name": "mpbucket01",
"marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"placement_rule": "default-placement"
},
"begin_iter": {
"part_ofs": 0,
"stripe_ofs": 0,
"ofs": 0,
"stripe_size": 4194304,
"cur_part_id": 1,
"cur_stripe": 0,
"cur_override_prefix": "",
"location": {
"placement_rule": "default-placement",
"obj": {
"bucket": {
"name": "mpbucket01",
"marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"key": {
"name": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.1",
"instance": "",
"ns": "multipart"
}
},
"raw_obj": {
"pool": "",
"oid": "",
"loc": ""
},
"is_raw": false
}
},
"end_iter": {
"part_ofs": 220194451,
"stripe_ofs": 220194451,
"ofs": 220194451,
"stripe_size": 4194304,
"cur_part_id": 15,
"cur_stripe": 0,
"cur_override_prefix": "",
"location": {
"placement_rule": "default-placement",
"obj": {
"bucket": {
"name": "mpbucket01",
"marker": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"bucket_id": "fa15df30-b48d-46a7-90bf-7b9212002005.4577.37",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"key": {
"name": "2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.15",
"instance": "",
"ns": "multipart"
}
},
"raw_obj": {
"pool": "",
"oid": "",
"loc": ""
},
"is_raw": false
}
}
}
查找到uploadid为2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo
分片数为14
3.查找所有multipart和shadow文件
multipart:
{bucketindexid}+__multipart_+{objectname}+.+{uploadid}+.+{partnumber}
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.2
shadow:
{bucketindexid}+__shadow_+{objectname}+.+{uploadid}+.+{partnumber}+_+{shardnum}
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_2.txt.2~c1vBz-e0_FGZehQmTHiaP1wuHSx-3oo.2_1
multipart对象有14个,每个multipart对象有3个shadow对象
14 = 210/15(s3cmd切分对象的大小)
每个上传分片15m,由一个multipart对象(4M)+3个shadow对象(大小分别为4M,4M,3M)组成.
注意
如果分片上传失败,或者中途取消了分片上传,会有一些遗留下来的中间数据,需要手动进行删除.
1.bucket.index中的omap
形如:
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.index listomapkeys .dir.fa15df30-b48d-46a7-90bf-7b9212002005.4577.37
1.txt ##这是上传成功的数据
2.txt
3.txt
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.1 ##这种数据就是临时omap数据,上传失败或者取消了会存留下来
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.2
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.3
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.4
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.5
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.6
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.7
_multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.meta
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4
_multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.meta
2.data_extra_pool(本例中为default.rgw.buckets.non-ec)
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.non-ec ls
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_12.txt.2~i9SNyI-A6Ry3G3aiMtPMjSKlgMh_Au-.meta
fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.meta
fa15df30-b48d-46a7-90bf-7b9212002005.80357.90__multipart_111.txt.2~_B94dfuXmOtkYHERcwRlZKHTPYBH5Ni.meta
3.multipart对象
以33.txt为例子,通过观察可以发现33.txt已经上传了4个分片
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.2 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.3 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4'
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.4 mtime 2019-04-26 16:56:41.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat 'fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.5'
error stat-ing default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__multipart_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.5: (2) No such file or directory
4.shadow对象
现在rgw单个分片大小为15M,可以由4个rados对象组成(4M),所以一个rgw分片由一个manifest和3shadow组成
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_1
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_1 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_2
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_2 mtime 2019-04-26 16:56:40.000000, size 4194304
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_3
default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_3 mtime 2019-04-26 16:56:40.000000, size 3145728
[root@sns-nvceph01 ~]# rados -p default.rgw.buckets.data stat fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_4
error stat-ing default.rgw.buckets.data/fa15df30-b48d-46a7-90bf-7b9212002005.4577.37__shadow_33.txt.2~kNo4Tec-tNo4-aqdCdsd_D9MsGy2zj3.1_4: (2) No such file or directory
如果上传失败需要把这些失效对象删除