Ceph 设备管理(Device Management)实战指南:设备追踪、健康监控与故障预测
存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载导读Ceph 是分布式对象、块与文件存储平台其可靠性高度依赖底层物理存储设备HDD/SSD的健康状况。本文围绕 doc/rados/operations/devices.rst 系统讲解 Ceph 的设备管理能力如何追踪哪些守护进程使用哪些磁盘、如何点亮故障盘指示灯以便现场更换、如何通过 SMART 指标监控设备健康、如何预测设备故障并自动触发数据迁移以及与之配套的健康告警机制。读完本文你将掌握ceph device系列命令的完整用法、devicehealth与diskprediction_local两个 mgr 模块的核心配置参数并能结合源码理解这些能力在集群内部的真实工作方式。设备管理概述Ceph 如何应对硬件故障设备管理Device Management是 Ceph 处理硬件故障的基础能力。Ceph 会追踪硬件存储设备HDD、SSD记录每个设备被哪些守护进程daemon使用并持续收集这些设备的健康指标。基于这些信息Ceph 可以提供两类能力预测硬件故障根据历史健康指标推断磁盘的剩余寿命与预期故障时间自动响应硬件故障在设备预期即将失效时自动将相关 OSD 标记为out把数据迁移到健康设备上。从实现角度看设备追踪由ceph-mgr的devicehealth模块源码位于 src/pybind/mgr/devicehealth/module.py驱动它通过读取 OSD 上报的设备元数据如device_ids建立设备 ↔ 守护进程的映射关系并将采集到的 SMART 原始数据持久化存储。可以推断ceph device ls、ceph device info等命令的输出即来源于这一模块维护的设备清单devices与 OSDMap/OSD 元数据。设备追踪与查询列出集群中的设备查看当前集群中正在使用的存储设备清单ceph device ls输出会包含每个设备的devid、所在主机、关联的守护进程以及启用故障预测后设备寿命预期life expectancy字段。按守护进程或主机过滤当需要排查某个 OSD 或某台主机上的磁盘时可以使用如下过滤形式ceph device ls-by-daemon daemon ceph device ls-by-host host其中daemon形如osd.0、mon.node1host是集群中的主机名short name。查询单台设备的详细信息查看某个具体设备的位置信息location以及它被哪些守护进程消费daemonsceph device info deviddevid是设备标识例如SanDisk_X400_M.2_2280_512GB_162924424784可通过ceph device ls获取。device info返回的信息还包括设备的路径如/dev/sda、SMART 状态摘要与寿命预期区间等是定位故障盘的第一手资料。识别物理设备闪烁硬盘 LED 指示灯更换故障磁盘时最怕在几十块盘的机柜中拔错盘。Ceph 提供了一条命令可以在硬件机箱enclosure上点亮磁盘的 LED 指示灯ceph device light on|off devid [ident|fault] [--force]devid设备标识先用ceph device ls获取[ident|fault]选择闪烁哪种灯默认为ident识别灯fault为故障灯--force强制执行绕过某些校验。前置条件与限制该命令仅在启用了编排器orchestrator模块时可用当前支持 Cephadm 或 Rook 两种编排器。检查当前启用的编排器ceph orch status另外文档明确指出闪烁指示灯可能不生效。是否有效取决于内核版本、SESSCSI Enclosure Services固件以及 HBA主机总线适配器的配置。也就是说lsmcli需要能够通过 SES 协议与背板通信否则命令虽执行但灯不会亮。自定义闪烁命令Jinja2 模板Ceph 默认调用lsmcli命令来控制 LED你可以通过ceph config-key自定义其模板ceph config-key set mgr/cephadm/blink_device_light_cmd template ceph config-key set mgr/cephadm/host/blink_device_light_cmd lsmcli local-disk-{{ ident_fault }}-led-{{on if on else off}} --path {{ path or dev }}第二条命令的形式支持按主机host粒度覆盖适合不同厂商背板命令不一致的场景。默认模板定义在 src/pybind/mgr/cephadm/templates/blink_device_light_cmd.j2其内容正是lsmcli local-disk-{{ ident_fault }}-led-{{on if on else off}} --path {{ path or dev }}模板支持以下参数参数类型含义on布尔值点亮true或熄灭falseident_fault字符串取值为ident或fault对应识别灯与故障灯dev字符串设备 ID例如SanDisk_X400_M.2_2280_512GB_162924424784path字符串设备路径例如/dev/sda从 src/pybind/mgr/cephadm/module.py 的实现看blink_device_light会先渲染对应主机host的模板再通过cephadm shell -- cmd_args在目标主机上执行渲染后的命令若执行失败会抛出OrchestratorError。仓库测试 src/pybind/mgr/cephadm/tests/test_cephadm.py 覆盖了默认模板、自定义全局模板以及按主机自定义模板三种场景验证了该配置键的解析逻辑。启用健康监控收集 SMART 指标Ceph 通过smartctl工具采集设备的健康指标。以 SATA 盘为例SMART 标准提供了一系列内部指标累计通电小时数、上下电次数、不可恢复读错误次数等SAS 与 NVMe 盘通过略有差异的标准暴露类似指标。NVMe 盘还会附加厂商私有数据例如写入放大、磨损信息。开启或关闭健康监控ceph device monitoring on ceph device monitoring off对应的模块选项是mgr/devicehealth/enable_monitoring默认true。关闭监控时模块会同时清空已设置的健康检查self.set_health_checks({})避免残留的告警卡住ceph -s状态。底层采集原理smartctl 与特权助手SMART 数据的获取并非由 mgr 直接执行而是由 OSD 守护进程完成。从 src/common/blkdev.cc 可以看到OSD 通过一个特权助手/usr/libexec/ceph/block-device-health执行smartctl -x --jsono dev-x输出全部 SMART 信息--jsono输出 JSON 格式。该助手是 sudoers.d/ceph-smartctl 中唯一授予ceph用户的 sudo 命令用于校验设备路径后执行固定的 smartctl 命令行从而避免任意命令注入。此外对于识别为 NVMe 的盘还会调用nvme命令获取厂商附加的 SMART 日志见block_device_run_vendor_nvme。devicehealth模块通过send_command向 OSD/MON 发送smart前缀的命令do_query_daemon_health_metrics拿到原始 JSON 后再解析关键字段。例如磨损等级wear level的提取逻辑位于 src/pybind/mgr/devicehealth/module.pySATA SSD从ata_device_statistics的第 7 页page number 7、偏移 8 处读取百分比并除以 100NVMe SSD读取nvme_smart_health_information_log.percentage_used并除以 100。指标采集Scraping与存储自动采集周期启用监控后设备指标会按固定周期自动采集scrape。默认每 24 小时采集一次可用以下命令调整ceph config set mgr mgr/devicehealth/scrape_frequency seconds在源码中scrape_frequency的默认值为86400秒即 24 小时。后台线程会按sleep_interval默认 600 秒周期性唤醒将上次采集时间对齐到采集周期到期后执行scrape_all()并顺带触发一次predict_all_devices()见 module.py。手动采集需要立即采集时可以手动触发# 手动采集所有设备 ceph device scrape-health-metrics # 采集单台设备 ceph device scrape-health-metrics device-id # 采集单个守护进程管辖的设备 ceph device scrape-daemon-health-metrics who其中who是osd.id或mon.name形式的守护进程名。从scrape_all()的实现看采集会遍历 OSDMap 中的所有 OSD 与 MonMap 中的所有 MON逐一请求其 SMART 数据并去重后入库。查询已存储的指标ceph device get-health-metrics devid [sample-timestamp]可选参数sample-timestamp用于取特定时间点的采样数据省略时返回全部历史采样。底层实现中指标保存在模块的数据库中Device与DeviceHealthMetrics两张表raw_smart字段保存原始 JSON并支持两个相关配置项配置项默认值说明mgr/devicehealth/pool_namedevice_health_metrics存放设备健康指标的池名mgr/devicehealth/retention_period86400 * 180180 天指标保留时长过期数据会被清理故障预测评估设备寿命预期Ceph 能够基于采集到的健康指标预测磁盘寿命与故障时间。预测模式通过以下配置指定ceph config set global device_failure_prediction_mode mode支持两种模式none关闭设备故障预测默认行为下若未启用任何预测模块即此模式local使用ceph-mgr守护进程内置的预训练预测模型。local模式对应 src/pybind/mgr/diskprediction_local/module.py 中的diskprediction_local模块。该模块的配置项包括配置项默认值说明predict_interval86400秒后台预测的运行周期sleep_interval600秒主循环唤醒间隔predictor_modelprophetstor使用的预训练模型名称预测流程为diskprediction_local通过remote(devicehealth, show_device_metrics, ...)拉取设备历史 SMART 数据累积到至少 6 个采样点后将数据输入预训练模型Predictor.create(self.predictor_model)模型文件位于models/目录下计算剩余寿命。由于预测是在后台周期进行的寿命预期值可能需要相当长的时间才会填充——这是正常的。查看所有设备的寿命预期ceph device ls查看单台设备的元数据与寿命区间ceph device info devid手动触发与外部数据导入显式强制预测某台设备的寿命ceph device predict-life-expectancy devid如果集群外已有可靠的故障信息来源例如厂商诊断工具也可以直接告知 Ceph 某台设备的寿命预期ceph device set-life-expectancy devid from [to]寿命预期以时间区间表示from为预期失效的最早时间to为最晚时间可省略表示区间终点未知。区间的设计是为了表达预测的不确定性——预测越不可靠区间越宽。健康告警DEVICE_HEALTH 系列当设备寿命预期进入危险区间时devicehealth模块会触发健康告警。核心阈值配置为ceph config set mgr mgr/devicehealth/warn_threshold seconds若设备预计在warn_threshold秒内失效则产生DEVICE_HEALTH告警。源码中该选项默认值为86400 * 14 * 6秒即 84 天。手动触发生成告警的检查ceph device check-health从check_health()的实现module.py看它会遍历所有带life_expectancy_max的设备结合 OSDMap 判断其 OSD 是否仍在in状态并最终调用set_health_checks()发布告警。与设备健康相关的告警在 doc/rados/operations/health-checks.rst 中有完整定义共三种健康检查含义应对方式DEVICE_HEALTH一个或多个 OSD 设备预计即将失效阈值由mgr/devicehealth/warn_threshold决定将 OSD 标记为out使数据迁出随后下架硬件若启用self_heal此步骤通常自动完成DEVICE_HEALTH_IN_USE设备已预计失效并被标记out但仍参与一个或多个 PG数据尚未迁完或集群接近满、CRUSH 结构无合适替代 OSD可关闭mgr/devicehealth/self_heal、调整mgr/devicehealth/mark_out_threshold或解决阻碍数据迁移的条件DEVICE_HEALTH_TOOMANY预计失效设备过多若全部自动标记out将跌破集群的mon_osd_min_in_ratio比例该比例用于防止级联out尽快扩容新 OSD 或分批替换故障盘也可临时调整mon_osd_min_in_ratio或mark_out_threshold压制告警但会提高数据不可恢复丢失的风险需要留意DEVICE_HEALTH仅针对当前仍标记为in的 OSD若设备已损坏但 OSD 仍up恢复可能处于降级状态必要时可考虑强制停止相关 OSD 守护进程以加速恢复——但这必须极其谨慎注意故障域约束避免破坏数据可用性。自动迁移self_heal 预迁移mgr/devicehealth/self_heal选项默认启用会自动把预计即将失效的设备上的数据迁走。启用后模块会把相关 OSD 标记为out从而触发数据自动迁移。触发条件由mgr/devicehealth/mark_out_threshold控制ceph config set mgr mgr/devicehealth/mark_out_threshold seconds若设备预计在mark_out_threshold秒内失效就会被自动标记out。源码中该选项默认值为86400 * 14 * 2秒即 28 天。从实现细节看mark_out_etc()module.py不只是执行osd out还会将相关 OSD 的primary-affinity权重设为0.0降低它们继续作为主副本承载写入的概率加速数据迁移收尾。防止级联失败mon_osd_min_up_ratio文档特别强调mon_osd_min_up_ratio配置项可以防止自愈过程级联成整体故障如果self_heal标记out的 OSD 数量过多导致in比例跌破阈值集群会立即停止批量标记并抛出DEVICE_HEALTH_TOOMANY健康检查与之配套的还有mon_osd_min_in_ratio同样是防止过多 OSD 被自动标记out的保护比例。此时应尽快向集群补充新 OSD 以防数据丢失或分批替换故障盘。配置参数速查表以下汇总设备管理相关核心配置默认值取自 devicehealth/module.py 与 diskprediction_local/module.py 源码配置项默认值说明mgr/devicehealth/enable_monitoringtrue是否监控设备健康指标ceph device monitoring on/off切换mgr/devicehealth/scrape_frequency86400秒24h自动采集设备指标的周期mgr/devicehealth/sleep_interval600秒后台主循环唤醒间隔mgr/devicehealth/pool_namedevice_health_metrics设备健康指标存储池mgr/devicehealth/retention_period180天指标保留时长mgr/devicehealth/warn_threshold84天预期失效时间小于该值则触发DEVICE_HEALTH告警mgr/devicehealth/mark_out_threshold28天预期失效时间小于该值则自动标记 OSDoutmgr/devicehealth/self_healtrue是否自动迁移即将失效设备上的数据device_failure_prediction_modenone故障预测模式none/localdiskprediction_local/predict_interval86400秒本地预测模型运行周期diskprediction_local/predictor_modelprophetstor本地预测所用预训练模型mon_osd_min_up_ratio/mon_osd_min_in_ratio集群默认防止self_heal批量标记out导致级联故障的保护比例小结Ceph 的设备管理能力覆盖了硬件生命周期的完整闭环ceph device ls/info建立设备与守护进程的对应关系device light借助编排器与lsmcli点亮故障盘 LED帮助现场精准换盘devicehealth模块通过smartctl定期采集 SMART 指标并持久化diskprediction_local用预训练模型预测寿命预期warn_threshold与self_heal则在磁盘彻底损坏前自动发出告警、迁移数据把硬件故障对集群可用性的冲击降到最低。结合 devicehealth 模块源码、cephadm 实现 与 health-checks 文档 深入阅读可以更完整地理解这些能力在集群内部的协作方式。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Dialog输入对话框完全指南密码验证与文本限制的5种实现Dialog输入对话框完全指南密码验证与文本限制的5种实现 空祖家的对话框工具Kongzue Dialog是一款功能强大的Android对话框库提如何高效使用FastEmbed专业向量嵌入实践指南如何高效使用FastEmbed专业向量嵌入实践指南 FastEmbed作为一款轻量级、快速的Python向量嵌入库专为生成高质量嵌入向量而设计。它支持多种先Ceph 集群运维实战指南启动、健康监控、数据放置与故障排查Ceph 集群运维实战指南启动、健康监控、数据放置与故障排查 Ceph 是分布式对象、块和文件存储平台其集群运维工作分布在四个层次以 systemd 启停存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Orleans 仓库贡献工作流详解:AGENTS.md 中的包兼容性验证、生成 API 表面与文档样例治理

Orleans 仓库贡献工作流详解:AGENTS.md 中的包兼容性验证、生成 API 表面与文档样例治理

后端微服务 【免费下载链接】orleans Cloud Native application framework for .NET 项目地址: https://gitcode.com/gh_mirrors/or/orleans 点击查看 免费下载 导读 本文以 Orleans 仓库根目录的 AGENTS.md 为主线,系统讲解维护者在提交代码时必须遵循…

2026/9/24 6:05:13 阅读更多 →
Agent时代,RAG怎么选?这份指南一次讲清!

Agent时代,RAG怎么选?这份指南一次讲清!

至少,它需要知道具体目标:最后要做成什么样子;需要知道验收标准:做到什么程度才算完成,Agent 应该怎么自查;还需要知道代码库之外的必要信息:那些停留在人脑、会议记录、聊天记录、历史决策里的…

2026/9/24 6:05:13 阅读更多 →
Prisma 数据建模完全指南:基于 SDL 的 Data Model 设计、字段约束与关系建模

Prisma 数据建模完全指南:基于 SDL 的 Data Model 设计、字段约束与关系建模

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 导读 本文以 Prisma 服务…

2026/9/24 6:04:12 阅读更多 →

最新新闻

ESP32 上跑 WebAssembly:WAMR 运行时原理与实操指南

ESP32 上跑 WebAssembly:WAMR 运行时原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:45:39 阅读更多 →
微信小程序 checkbox 和 radio 组件案例学习

微信小程序 checkbox 和 radio 组件案例学习

## 一、实验介绍本次案例学习微信小程序中 checkbox 复选框组件与 radio 单选框组件,实现对文本样式和字体大小的动态控制。复选框支持多选,可以同时设置文字加粗、倾斜、下划线;单选框只能选择一项,用来切换诗词的字体尺寸。本次…

2026/9/24 6:44:38 阅读更多 →
力扣集训day05

力扣集训day05

思路主要是结合归并排序的思路进行解答,大致就是1.先二分拆分(merge()),拆到拆无可拆,也就是左右边界重合为止,至于l>r这种情况,是用来判断空链表这种特殊情况的。2.然…

2026/9/24 6:44:38 阅读更多 →
创维E900-S变砖救砖指南:海思3798MV100短接强刷实测

创维E900-S变砖救砖指南:海思3798MV100短接强刷实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:44:38 阅读更多 →
GEE实战01期:制作北京及周边地区夏季 NDVI 分布图

GEE实战01期:制作北京及周边地区夏季 NDVI 分布图

本期关注:借助ee.ImangCollection完成影像集合与时空筛选。 核心流程:在不下载数据的背景下,在浏览器上完成影像调用,NDVI合成,地图显示,简单分析以及数据导出的过程。 1.案例背景 归一化植被指数&#…

2026/9/24 6:44:38 阅读更多 →
FPGA+FX3实现USB3.0高速数据传输:从原理到338MB/s实战调优

FPGA+FX3实现USB3.0高速数据传输:从原理到338MB/s实战调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:43:38 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →