博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ceph高级工具介绍之ceph-objectstore-tool的使用
阅读量:4026 次
发布时间:2019-05-24

本文共 8593 字,大约阅读时间需要 28 分钟。

0 简介

ceph-objectstore-tool工具是Ceph提供的一个low level(可以操作object和pg)的工具,可以用来查看、修改、删除ObjectStore上的object、pg以及dump OSD journal中的数据,请谨慎使用这个工具,它有可能会造成数据的永久丢失,可能这也是很少有文章介绍它的一个原因吧。

1 使用

ceph-objectstore-tool目前没有manpage,它的help文档写的也不是很友好。

[root@ceph03 ~]# ceph-objectstore-tool -hMust provide --data-pathAllowed options:  --help                      produce help message  --type arg                  Arg is one of [filestore (default), memstore]  --data-path arg             path to object store, mandatory  --journal-path arg          path to journal, mandatory for filestore type  --pgid arg                  PG id, mandatory for info, log, remove, export,                              rm-past-intervals, mark-complete  --op arg                    Arg is one of [info, log, remove, mkfs, fsck,                              fuse, export, import, list, fix-lost, list-pgs,                              rm-past-intervals, dump-journal, dump-super,                              meta-list, get-osdmap, set-osdmap,                              get-inc-osdmap, set-inc-osdmap, mark-complete]  --epoch arg                 epoch# for get-osdmap and get-inc-osdmap, the                              current epoch in use if not specified  --file arg                  path of file to export, import, get-osdmap,                              set-osdmap, get-inc-osdmap or set-inc-osdmap  --mountpoint arg            fuse mountpoint  --format arg (=json-pretty) Output format which may be json, json-pretty,                              xml, xml-pretty  --debug                     Enable diagnostic output to stderr  --force                     Ignore some types of errors and proceed with                              operation - USE WITH CAUTION: CORRUPTION POSSIBLE                              NOW OR IN THE FUTURE  --skip-journal-replay       Disable journal replay  --skip-mount-omap           Disable mounting of omap  --head                      Find head/snapdir when searching for objects by                              name  --dry-run                   Don't modify the objectstorePositional syntax:ceph-objectstore-tool ...  (get|set)-bytes [file]ceph-objectstore-tool ...  set-(attr|omap) 
[file]ceph-objectstore-tool ...
(get|rm)-(attr|omap)
ceph-objectstore-tool ...
get-omaphdrceph-objectstore-tool ... set-omaphdr [file]ceph-objectstore-tool ... list-attrsceph-objectstore-tool ... list-omapceph-objectstore-tool ... removeceph-objectstore-tool ... dumpceph-objectstore-tool ... set-sizeceph-objectstore-tool ... remove-clone-metadata
can be a JSON object description as displayed by --op list. can be an object name which will be looked up in all the OSD's PGs. can be the empty string ('') which with a provided pgid specifies the pgmeta objectThe optional [file] argument will read stdin or write stdout if not specified or if '-' specified.
从上面的help文档中,发现没有提供使用方法或者例子,一般需要按照以下方法使用:
ceph-objectstore-tool --data-path <osd的data目录的路径> --journal-path <osd journal的路径> --type <objectstore的类型> --op <具体操作的类型> ,其中type目前支持filestore和bluestore两种,op操作,支持help种列举出来的操作。

3 使用事例

下面介绍一下,ceph-objectstore-tool的常用用法

1)list osd上有哪些pg,比如如果要list osd.2种存储哪些pg,可以执行以下命令:

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore --op list-pgs

2)除了能list pg之外,还能list某个pg的pg_info信息

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --pgid 0.0 --op info
3)  list某个pg中object的信息

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --pgid 0.38 --op list HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device["0.38",{"oid":"rbd_id.test","key":"","snapid":-2,"hash":2586801272,"max":0,"pool":0,"namespace":"","max":0}]["0.38",{"oid":"rbd_data.6e742ae8944a.0000000000000000","key":"","snapid":-2,"hash":3591771128,"max":0,"pool":0,"namespace":"","max":0}]

3) dump某个pg的pg_log信息

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --pgid 0.36 --op log HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device{    "pg_log_t": {        "head": "400'27",        "tail": "0'0",        "log": [            {                "op": "modify  ",                "object": "0:6c8c8ef5:::rb.0.5e9a.2ae8944a.0000000000db:head",                "version": "376'1",                "prior_version": "0'0",                "reqid": "client.24221.1:135326",                "extra_reqids": [],                "mtime": "2016-07-21 22:19:29.377000",                "mod_desc": {                    "object_mod_desc": {                        "can_local_rollback": false,                        "rollback_info_completed": true,                        "ops": []                    }                }            },...        ]    },    "pg_missing_t": {        "missing": []    },    "map": {        "divergent_priors": []    }

4) remove某个pg

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --pgid 0.36 --op remove

5) export/import 一个pg

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --pgid 0.36 --op export --file 1.txt[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --type filestore  --op import --file 1.txt

6) 该命令还可以dump出OSD的super_block信息

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal --op dump-super HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device{    "cluster_fsid": "7b4eb697-fd53-4bd8-9b7a-ca1b37110623",    "osd_fsid": "3549e257-373a-44a0-a7d9-99068e9854dc",    "whoami": 2,    "current_epoch": 442,    "oldest_map": 1,    "newest_map": 442,    "weight": 0.000000,    "compat": {        "compat": {},        "ro_compat": {},        "incompat": {            "feature_1": "initial feature set(~v.18)",            "feature_2": "pginfo object",            "feature_3": "object locator",            "feature_4": "last_epoch_clean",            "feature_5": "categories",            "feature_6": "hobjectpool",            "feature_7": "biginfo",            "feature_8": "leveldbinfo",            "feature_9": "leveldblog",            "feature_10": "snapmapper",            "feature_12": "transaction hints",            "feature_13": "pg meta object"        }    },    "clean_thru": 442,    "last_epoch_mounted": 439}

7)dump一个object所有的元数据信息

[root@ceph03 0.13_head]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --journal-path /var/lib/ceph/osd/ceph-2/journal rbd_data.6e742ae8944a.0000000000000013 dump HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device{    "id": {        "oid": "rbd_data.6e742ae8944a.0000000000000013",        "key": "",        "snapid": -2,        "hash": 4028149687,        "max": 0,        "pool": 0,        "namespace": "",        "max": 0    },    "info": {        "oid": {            "oid": "rbd_data.6e742ae8944a.0000000000000013",            "key": "",            "snapid": -2,            "hash": 4028149687,            "max": 0,            "pool": 0,            "namespace": ""        },        "version": "442'1060",        "prior_version": "442'1059",        "last_reqid": "osd.1.0:59339",        "user_version": 1059,        "size": 4194304,        "mtime": "2016-07-22 14:58:47.086000",        "local_mtime": "2016-07-22 14:58:47.306385",        "lost": 0,        "flags": 52,        "snaps": [],        "truncate_seq": 0,        "truncate_size": 0,        "data_digest": 3408368108,        "omap_digest": 4294967295,        "watchers": {}    },    "stat": {        "size": 4194304,        "blksize": 4096,        "blocks": 8192,        "nlink": 1    },    "SnapSet": {        "snap_context": {            "seq": 0,            "snaps": []        },        "head_exists": 1,        "clones": []    }}

8)  当然,它可以使用get-osdmap导出集群中leveldb数据库中的数据,比如OSDMap,而且可以dump出各个epoch的map,这个大家可以在下面自己试验一下。

转载地址:http://yvxbi.baihongyu.com/

你可能感兴趣的文章
关于let{a}=B出现的解构赋值
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
android给文字加边框(修改不能居中的问题)
查看>>
coursesa课程 Python 3 programming course_2_assessment_1
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
coursesa课程 Python 3 programming Dictionary methods 字典的方法
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming Tuple Assignment with Unpacking
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
visca接口转RS-232C接口线序
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>