注意

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

scan

扫描允许从已部署的OSD中捕获任何重要的详细信息,以便ceph-volume可以对其进行管理,而无需任何其他启动工作流或工具(例如udevceph-disk)。完全支持使用LUKS或PLAIN格式的加密。

该命令能够通过检查存储OSD数据的目录或使用数据分区来检查正在运行的OSD。如果未提供路径或设备,该命令还可以扫描所有正在运行的OSD。

扫描后,信息将(默认情况下)以JSON格式持久化元数据到/etc/ceph/osd中的一个文件中。此JSON文件将使用以下命名约定:{OSD ID}-{OSD FSID}.json。对于ID为1,FSID为86ebd829-1405-43d3-8fd6-4cbc9b6ecf96的OSD,文件的绝对路径将是

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

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",

对于可能包含多行的文件,内容保持原样,但keyrings是特殊处理的,会被解析以提取keyring。例如,一个读取为

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

keyring将被存储为

"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这样的设备,它**必须**是一个数据分区,命令可能如下所示

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特殊文件的OSD # 通过查询LVM和blkid来检查设备上最新的信息 # 支持逻辑卷和GPT设备

这是来自使用bluestore的OSD的示例JSON元数据

{
    "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 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入