9.4. 列出放置组不一致
使用 rados 实用程序列出对象不同副本中的不一致情况。使用 --format=json-pretty 选项列出更详细的输出。
本节涵盖以下列表:
- 池中 PG 不一致
- 放置组中的对象不一致
- PG 中的快照设置不一致
先决条件
- 正在运行的红帽 Ceph 存储集群处于健康状态。
- 节点的根级别访问权限。
流程
rados list-inconsistent-pg POOL --format=json-pretty
例如,列出名为 data 的池中所有不一致的 PG:
# rados list-inconsistent-pg data --format=json-pretty
[0.6]
rados list-inconsistent-obj PLACEMENT_GROUP_ID
例如,列出 ID 为 0.6 的 PG 中的不一致对象:
# rados list-inconsistent-obj 0.6
{
"epoch": 14,
"inconsistents": [
{
"object": {
"name": "image1",
"nspace": "",
"locator": "",
"snap": "head",
"version": 1
},
"errors": [
"data_digest_mismatch",
"size_mismatch"
],
"union_shard_errors": [
"data_digest_mismatch_oi",
"size_mismatch_oi"
],
"selected_object_info": "0:602f83fe:::foo:head(16'1 client.4110.0:1 dirty|data_digest|omap_digest s 968 uv 1 dd e978e67f od ffffffff alloc_hint [0 0 0])",
"shards": [
{
"osd": 0,
"errors": [],
"size": 968,
"omap_digest": "0xffffffff",
"data_digest": "0xe978e67f"
},
{
"osd": 1,
"errors": [],
"size": 968,
"omap_digest": "0xffffffff",
"data_digest": "0xe978e67f"
},
{
"osd": 2,
"errors": [
"data_digest_mismatch_oi",
"size_mismatch_oi"
],
"size": 0,
"omap_digest": "0xffffffff",
"data_digest": "0xffffffff"
}
]
}
]
}
以下字段对于决定造成不一致的原因非常重要:
-
name:副本不一致的对象名称。 -
NSPACE:是池逻辑分割的命名空间。默认情况下是空的。 -
locator:用作放置对象名称替代替换的键。 -
snap:对象的快照 ID。对象的唯一可写版本称为head。如果对象是克隆,则此字段包含其顺序 ID。 -
Version:副本不一致的对象的版本 ID。每个对象写入操作都会递增它。 错误:显示分片之间不一致的错误列表,但不决定哪个分片或分片不正确。请参阅分片数组以进一步调查错误。-
data_digest_mismatch:从一个 OSD 读取的副本摘要与其他 OSD 不同。 -
size_mismatch:克隆的大小或头对象与预期不匹配。 -
read_error:此错误表示磁盘错误很有可能导致不一致。
-
union_shard_error:所有特定于分片的错误的并集。这些错误连接到有故障的分片。withoi结尾的错误表示您必须将故障对象中的信息与选定对象的信息进行比较。请参阅分片数组以进一步调查错误。在上例中,存储在
osd.2 上的对象副本的摘要与 osd.0 和上存储的副本不同。具体来说,副本摘要不是从osd.1osd.2读取的分片中计算的0xffffffff,而是0xe978e67f。此外,从osd.2读取的副本大小为 0,而 osd.0 和报告的大小为 968。osd.1
rados list-inconsistent-snapset PLACEMENT_GROUP_ID
例如,列出 ID 为 0.23 的 PG 中不一致的快照集(snapset):
# rados list-inconsistent-snapset 0.23 --format=json-pretty
{
"epoch": 64,
"inconsistents": [
{
"name": "obj5",
"nspace": "",
"locator": "",
"snap": "0x00000001",
"headless": true
},
{
"name": "obj5",
"nspace": "",
"locator": "",
"snap": "0x00000002",
"headless": true
},
{
"name": "obj5",
"nspace": "",
"locator": "",
"snap": "head",
"ss_attr_missing": true,
"extra_clones": true,
"extra clones": [
2,
1
]
}
]
该命令返回以下错误:
-
ss_attr_missing:缺少一个或多个属性。属性是关于作为键值对列表编码到快照集的快照的信息。 -
ss_attr_corrupted:一个或多个属性无法解码。 -
clone_missing:缺少克隆。 -
snapset_mismatch:快照集本身不一致。 -
head_mismatch:快照集表示head存在或不存在,但清理结果报告其他。 -
无标头:缺少快照集的头部。 -
size_mismatch:克隆的大小或头对象与预期不匹配。
其它资源
- 红帽 Ceph 存储故障排除指南 中的 放置组部分不一致.
- 修复 红帽 Ceph 存储故障排除指南中 不一致的 PG 部分.