注意

本文档适用于 Ceph 开发版本。

scan

扫描允许捕获已部署 OSD 的任何重要细节,以便ceph-volume可以管理它,而无需任何其他启动工作流程或工具(如udevceph-disk)。

如果未提供路径或设备,该命令还可以扫描所有正在运行的 OSD。

扫描后,信息将(默认情况下)将元数据作为 JSON 保存在/etc/ceph/osdJSON文件将使用以下命名约定:{OSD ID}-{OSD FSID}.json一个 ID 为 1 的 OSD,以及像86ebd829-1405-43d3-8fd6-4cbc9b6ecf96这样的 FSID,文件的绝对路径将是:

/etc/ceph/osd/1-86ebd829-1405-43d3-8fd6-4cbc9b6ecf96.json

The scan如果需要覆盖内容,必须使用--force标志:

ceph-volume simple scan --force {path}

如果不需要持久化JSON元数据,支持将内容发送到stdout(不会写入文件):

ceph-volume simple scan --stdout {path}

运行 OSD 扫描

使用此命令而不提供 OSD 目录或设备将扫描任何当前正在运行的 OSD 的目录。如果运行的 OSD 不是由 ceph-disk 创建的,它将被忽略并且不会被扫描。

要扫描所有运行的 ceph-disk OSD,命令将如下所示:

ceph-volume simple scan

目录扫描

目录扫描将捕获来自有趣文件的 OSD 文件内容。为了成功扫描,必须存在一些文件:

  • ceph_fsid

  • fsid

  • keyring

  • ready

  • type

  • whoami

如果 OSD 被加密,它将额外添加以下密钥:

  • encrypted

  • encryption_type

  • lockbox_keyring

对于任何其他文件,只要它不是二进制文件或目录,它也将被捕获并作为 JSON 对象的一部分进行持久化。

JSON 对象中键的约定是任何文件名都是键,其内容是其值。如果内容是一行(如在whoami的情况下),内容将被修剪,并删除换行符。例如,对于具有 ID 1 的 OSD,JSON 条目将如下所示:

"whoami": "1",

对于可能有多于一行内容的文件,内容将保持原样,除了密钥环,密钥环将特殊处理并解析以提取密钥环。例如,一个keyring被读取为:

[osd.1]\n\tkey = AQBBJ/dZp57NIBAAtnuQS9WOS0hnLVe0rZnE6Q==\n

将被存储为:

"keyring": "AQBBJ/dZp57NIBAAtnuQS9WOS0hnLVe0rZnE6Q==",

对于像/var/lib/ceph/osd/ceph-1这样的目录,命令可能如下所示:

ceph-volume simple scan /var/lib/ceph/osd/ceph1

设备扫描

当 OSD 目录不可用(OSD 未运行,或设备未挂载)时,scan命令能够内省设备以捕获所需数据。就像运行 OSD 扫描一样,它仍然需要一些文件存在。这意味着要扫描的设备必须是OSD 的数据分区。

只要 OSD 的数据分区作为参数传递,子命令就可以扫描其内容。

如果设备已经挂载,工具可以检测到此场景并从该目录捕获文件内容。

如果设备未挂载,将创建一个临时目录,设备将临时挂载仅用于扫描内容。扫描内容后,设备将卸载。

对于像/dev/sda1这样的设备must将是数据分区,命令可能如下所示:

ceph-volume simple scan /dev/sda1

JSON内容

JSON 对象的内容非常简单。扫描不仅将持久化特殊 OSD 文件及其内容的信息,还将验证路径和设备 UUID。与ceph-disk不同,它将它们存储在{device type}_uuid文件中,该工具将它们作为设备类型键的一部分进行持久化。

例如,一个block.db设备将如下所示:

"block.db": {
    "path": "/dev/disk/by-partuuid/6cc43680-4f6e-4feb-92ff-9c7ba204120e",
    "uuid": "6cc43680-4f6e-4feb-92ff-9c7ba204120e"
},

但它还将持久化生成的ceph-disk特殊文件,如下所示:

"block.db_uuid": "6cc43680-4f6e-4feb-92ff-9c7ba204120e",

这种重复是为了确保以下内容:

# 支持可能没有 ceph-disk 特殊文件的 OSDblkid# 支持逻辑卷和 GPT 设备

这是一个示例JSON元数据,来自使用bluestore:

{
    "active": "ok",
    "block": {
        "path": "/dev/disk/by-partuuid/40fd0a64-caa5-43a3-9717-1836ac661a12",
        "uuid": "40fd0a64-caa5-43a3-9717-1836ac661a12"
    },
    "block.db": {
        "path": "/dev/disk/by-partuuid/6cc43680-4f6e-4feb-92ff-9c7ba204120e",
        "uuid": "6cc43680-4f6e-4feb-92ff-9c7ba204120e"
    },
    "block.db_uuid": "6cc43680-4f6e-4feb-92ff-9c7ba204120e",
    "block_uuid": "40fd0a64-caa5-43a3-9717-1836ac661a12",
    "bluefs": "1",
    "ceph_fsid": "c92fc9eb-0610-4363-aafc-81ddf70aaf1b",
    "cluster_name": "ceph",
    "data": {
        "path": "/dev/sdr1",
        "uuid": "86ebd829-1405-43d3-8fd6-4cbc9b6ecf96"
    },
    "fsid": "86ebd829-1405-43d3-8fd6-4cbc9b6ecf96",
    "keyring": "AQBBJ/dZp57NIBAAtnuQS9WOS0hnLVe0rZnE6Q==",
    "kv_backend": "rocksdb",
    "magic": "ceph osd volume v026",
    "mkfs_done": "yes",
    "ready": "ready",
    "systemd": "",
    "type": "bluestore",
    "whoami": "3"
}

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.