注意
本文档适用于 Ceph 的开发版本。
scan
扫描允许从已部署的OSD中捕获任何重要的详细信息,以便ceph-volume可以对其进行管理,而无需任何其他启动工作流或工具(例如udev或ceph-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_fsidfsidkeyringreadytypewhoami
如果OSD已加密,它将额外添加以下键
encryptedencryption_typelockbox_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"
}