注意

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

ceph-bluestore-tool -- bluestore 管理工具

概要

ceph-bluestore-tool 命令 [ --dev 设备 … ] [ -i osd_id ] [ --path osd 路径 ] [ --out-dir 目录 ] [ --log-file | -l 文件名 ] [ --deep ]
ceph-bluestore-tool fsck|repair --path osd 路径 [ --deep ]
ceph-bluestore-tool qfsck --path osd 路径
ceph-bluestore-tool allocmap --path osd 路径
ceph-bluestore-tool restore_cfb --path osd 路径
ceph-bluestore-tool show-label --dev 设备
ceph-bluestore-tool show-label-at --dev 设备 --offset lba
ceph-bluestore-tool prime-osd-dir --dev 设备 --path osd 路径
ceph-bluestore-tool bluefs-export --path osd 路径 --out-dir 目录
ceph-bluestore-tool bluefs-bdev-new-wal --path osd 路径 --dev-target 新设备
ceph-bluestore-tool bluefs-bdev-new-db --path osd 路径 --dev-target 新设备
ceph-bluestore-tool bluefs-bdev-migrate --path osd 路径 --dev-target 新设备 --devs-source 设备1 [--devs-source 设备2]
ceph-bluestore-tool free-dump|free-score --path osd 路径 [ --allocator block/bluefs-wal/bluefs-db/bluefs-slow ]
ceph-bluestore-tool bluefs-stats --path osd 路径
ceph-bluestore-tool bluefs-files --path osd 路径
ceph-bluestore-tool reshard --path osd 路径 --sharding 新分片 [ --sharding-ctrl 控制字符串 ]
ceph-bluestore-tool show-sharding --path osd 路径
ceph-bluestore-tool trim --path osd 路径
ceph-bluestore-tool zap-device --dev 设备路径
ceph-bluestore-tool revert-wal-to-plain --path osd 路径
ceph-bluestore-tool create-bdev-labels --path osd 路径 --dev 设备

描述

ceph-bluestore-tool 是一个用于对 BlueStore 实例执行低级管理操作的实用程序。

命令

帮助

显示帮助

fsck [ --deep ] (开|关) 或 (是|否) 或 (1|0) 或 (真|假)

对 BlueStore 元数据运行一致性检查。如果指定了 --deep,还会读取所有对象数据并验证校验和。

repair

运行一致性检查修复所有可修复的错误。

qfsck

对 BlueStore 元数据运行一致性检查,比较分配器数据(如果存在,则来自 RocksDB CFB;如果不存在,则使用分配文件)与 ONode 状态。

allocmap

执行与 qfsck 相同的检查,然后存储一个新的分配文件(此命令默认禁用,需要特殊构建)

restore_cfb

撤销新 NCB 代码所做的更改(通过 ceph 重启或运行 allocmap 命令),并恢复 RocksDB B 列族(分配器映射)。

bluefs-export

将 BlueFS 的内容(即 RocksDB 文件)导出到输出目录。

bluefs-bdev-sizes --path osd 路径

将 BlueFS 所理解的设备大小打印到标准输出。

bluefs-bdev-expand --path osd 路径

指示 BlueFS 检查其块设备的大小,如果它们已扩展,则使用额外的空间。请注意,只有 BlueFS 创建的新文件在首选块设备有足够的可用空间时才会被分配到该设备上,而溢出到慢速设备的现有文件将在 RocksDB 执行压缩时逐渐移除。换句话说,如果有任何数据溢出到慢速设备,它将随着时间的推移被移动到快速设备。

bluefs-bdev-new-wal --path osd 路径 --dev-target 新设备

将 WAL 设备添加到 BlueFS,如果 WAL 设备已存在则失败。

bluefs-bdev-new-db --path osd 路径 --dev-target 新设备

将 DB 设备添加到 BlueFS,如果 DB 设备已存在则失败。

bluefs-bdev-migrate --dev-target 新设备 --devs-source 设备1 [--devs-source 设备2]

将 BlueFS 数据从源设备移动到目标设备。成功后,源设备(主设备除外)将被移除。扩展目标存储(更新大小标签),使“bluefs-bdev-expand”不再需要。目标设备可以是新设备,也可以是已连接的设备。如果设备是新设备,它将被添加到 OSD,替换其中一个源设备。以下替换规则适用(按优先顺序,遇到第一个匹配项即停止)

  • 如果源列表有 DB 卷 - 目标设备将其替换。

  • 如果源列表有 WAL 卷 - 目标设备将其替换。

  • 如果源列表只有慢速卷 - 不允许此操作,需要通过 new-DB/new-WAL 命令进行显式分配。

show-label --dev 设备 […]

显示设备标签。OSD 运行时也可以打印标签。

show-label-at --dev 设备 --offset lba […]

在特定磁盘位置显示设备标签。专用 DB/WAL 卷在偏移量 0 处有一个标签。主设备可能在多个位置有有效标签:0/1GiB/10GiB/100GiB/1000GiB。但某些位置的标签可能不存在。OSD 运行时也可以打印标签。

free-dump --path osd 路径 [ --allocator block/bluefs-wal/bluefs-db/bluefs-slow ]

转储分配器中的所有空闲区域。

free-score --path osd 路径 [ --allocator block/bluefs-wal/bluefs-db/bluefs-slow ]

给出表示分配器中碎片质量的 [0-1] 数字。0 表示所有空闲空间都在一个块中。1 表示最糟糕的碎片情况。

bluefs-stats --path osd 路径

显示 BlueFS 占用空间的摘要,按设备(block/db/wal)和角色(wal/log/db)进行划分。

bluefs-files --path osd 路径

列出所有 BlueFS 管理的文件,打印名称、大小以及设备上使用的空间。

reshard --path osd 路径 --sharding 新分片 [ --resharding-ctrl 控制字符串 ]

更改 BlueStore 的 RocksDB 分片。分片构建在 RocksDB 列族之上。此选项允许测试新分片的性能,而无需重新部署 OSD。重新分片通常是一个漫长的过程,涉及遍历整个 RocksDB 键空间并将其中一些移动到不同的列族。选项 --resharding-ctrl 提供对重新分片过程的性能控制。中断的重新分片将阻止 OSD 运行。中断的重新分片不会损坏数据。总是可以继续先前的重新分片,或选择任何其他分片方案,包括恢复到原始方案。

show-sharding --path osd 路径

显示当前应用于 BlueStore 的 RocksDB 的分片。

命令

trim --path osd 路径

已被大量使用的 SSD 可能会出现性能下降。此操作使用 TRIM / discard 释放 BlueStore 和 BlueFS 块设备中未使用的块,并允许驱动器执行更有效的内部管理。如果 BlueStore 在启用 discard 的情况下运行,此选项可能无用。

命令

zap-device --dev 设备路径

将所有设备标签位置归零。这实际上使设备看起来是空的。

命令

revert-wal-to-plain --path osd 路径

将 WAL 文件从信封模式更改为旧版纯文本模式。对于降级,或者如果您想禁用此新功能 (bluefs_wal_envelope_mode) 时很有用。

create-bdev-labels --path osd 路径 --dev 设备

将 bdev 标签写入最初不支持标签的 BlueStore 设备。从 --path 读取元数据(例如 fsid、ceph 版本)并将其写入 --dev 处的设备。只有主设备(块)获得完整的元数据;block.db 或 block.wal 则没有。--dev 路径必须位于 --path 目录内,因为其名称决定了设备角色。使用 --yes-i-really-really-mean-it 重新创建损坏的标签。

选项

--dev *设备*

设备添加到要考虑的设备列表中

-i *osd_id*

作为 OSD osd_id 操作。连接到监视器以获取 OSD 特定选项。如果监视器不可用,请添加 --no-mon-config 以从 ceph.conf 读取。

--devs-source *设备*

设备添加到要考虑作为迁移操作源的设备列表中

--dev-target *设备*

指定目标设备进行迁移操作或用于添加新 DB/WAL 的设备。

--path *osd 路径*

指定 OSD 路径。在大多数情况下,设备列表是从osd 路径中存在的符号链接推断出来的。这通常比使用 --dev 明确指定设备更简单。如果提供了 -i osd_id 则不需要。

--out-dir *目录*

bluefs-export 的输出目录

-l, --log-file *日志文件*

要写入日志的文件

--log-level *数字*

调试日志级别。默认值为 30(极其详细),20 为非常详细,10 为详细,1 为不很详细。

--deep

深度擦洗/修复(读取并验证对象数据,而不仅仅是元数据)

--allocator *名称*

free-dumpfree-score 操作有用。选择分配器。

--resharding-ctrl *控制字符串*

提供对重新分片过程的控制。指定刷新 RocksDB 迭代器的频率,以及提交批次在提交到 RocksDB 之前应有多大。选项格式为:<iterator_refresh_bytes>/<iterator_refresh_keys>/<batch_commit_bytes>/<batch_commit_keys> 默认值:10000000/10000/1000000/1000

额外的 ceph.conf 选项

任何被 OSD 接受的配置选项也可以传递给 ceph-bluestore-tool。在无法访问监视器/ceph.conf 且无法使用 -i 选项时,这对于提供必要的配置选项很有用。

设备标签

每个 BlueStore 块设备在设备的开头都有一个块标签。为了 OSD 的稳健性,主设备可能选择在不同位置有额外的标签。您可以使用以下命令转储标签内容

ceph-bluestore-tool show-label --dev *device*

主设备将有大量元数据,包括以前存储在 OSD 数据目录中小文件中的信息。辅助设备(db 和 wal)将只有最少所需的字段(OSD UUID、大小、设备类型、创建时间)。主设备在偏移量:1GiB、10GiB、100GiB 和 1000GiB 处包含额外的标签副本。损坏的标签作为修复的一部分进行修复

ceph-bluestore-tool repair --dev *device*

OSD 目录初始化

您可以使用 prime-osd-dir 命令为可以启动 BlueStore OSD 的 OSD 数据目录生成内容

ceph-bluestore-tool prime-osd-dir --dev *main device* --path /var/lib/ceph/osd/ceph-*id*

BlueFS 日志救援

某些版本的 BlueStore 容易受到 BlueFS 日志变得极其庞大的影响——超出导致 OSD 无法启动的程度。这种情况表现为启动时间非常长,并在 _replay 函数中失败。

这可以通过以下方式修复:

ceph-bluestore-tool fsck --path osd 路径 --bluefs_replay_recovery=true

建议首先检查救援过程是否会成功:

ceph-bluestore-tool fsck --path osd 路径 --bluefs_replay_recovery=true --bluefs_replay_recovery_disable_compact=true

如果上述 fsck 成功,则可以应用修复程序。

可用性

ceph-bluestore-tool 是 Ceph 的一部分,Ceph 是一个大规模可伸缩的开源分布式存储系统。更多信息请参考 Ceph 文档:https://docs.ceph.net.cn

另请参阅

ceph-osd(8)

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入