Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

7.3. 列出清单

使用 rados 工具列出对象不同副本中的不一致。使用 --format=json-pretty 选项列出更详细的输出。

您可以列出:

列出池中包含的 PG

rados list-inconsistent-pg <pool> --format=json-pretty

例如,列出名为 data 的池中所有不一致的 PG:

# rados list-inconsistent-pg data --format=json-pretty
[0.6]

列出 PG 中的清单对象

rados list-inconsistent-obj <placement-group-id>

例如,列出放置组中 ID 为 0.6 的不一致对象:

# 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。每个对象写入操作都会递增它。
  • errors: 表明分片之间不一致的错误列表,但不决定哪个分片或分片不正确。请参阅 shard 数组来进一步调查错误。

    • data_digest_mismatch:从一个 OSD 读取的副本摘要与其他 OSD 不同。
    • size_mismatch: 克隆的大小或 head 对象与预期不匹配。
    • read_error: 此错误表示极有可能因磁盘错误而导致不一致。
  • union_shard_error: 与分片相关的所有错误的并集。这些错误连接到有故障的分片。以 oi 结尾的错误表示您必须将故障对象的信息与所选对象的信息进行比较。请参阅 shard 数组来进一步调查错误。

    在上例中,存储在 osd.2 中的对象副本与存储在 osd.0osd.1 中的副本不同。特别是,副本摘要不是 0xffffffff,而不是从从 osd.2 读取的分片计算,而是 0xe978e67f。另外,从 osd.2 读取的副本大小为 0,而 osd.0osd.1 报告的大小为 968。

列出 PG 中的实例快照集

rados list-inconsistent-snapset <placement-group-id>

例如,列出 ID 为 0.23 的 PG 中的不一致快照集(snapsets):

# 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 存在或不存在,但清理结果会报告其他情况。
  • headless: 快照集的 head 缺失。
  • size_mismatch: 克隆的大小或 head 对象与预期不匹配。

另请参阅