ceph pg inactive状态

本文详细介绍了在Ceph集群中进行OSD数据迁移的具体步骤,包括检查PG对应的OSD、停止OSD服务、导出并导入PG数据、标记完成及重启OSD服务等关键流程。

1.检查pg对应的哪三个osd
$ceph -w
$ceph osd find #查找第一个primary的osd

2.停止osd服务
$systemctl stop ceph-osd@OSD_ID

3.查看pg 1.1主副本里面的对象数,假设主本对象数多,则到主本所在osd节点执行
$ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/lib/ceph/osd/ceph-0/journal --pgid 1.1 --op export --file /home/pg1.1

4.将/home/pg1.1 scp到副本所在节点(有多个副本,每个副本都要这么操作),然后到副本所在节点执行
$ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op import --file /home/pg1.1

5.mark complete
$ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op mark-complete

6.最后启动osd
$ systemctl start ceph-osd@OSD_ID

请珍惜劳动成果,支持原创,欢迎大家交流,谢谢。欢迎点赞或者关注收藏,你每一次的点赞和收藏都是作者的动力,内容如有问题请私信随时联系作者,谢谢!

### Ceph批量修复PG的方法 在Ceph集群中,当多个PG处于不健康状态时,可以使用一些工具和命令来批量修复这些PG。以下是一些常见方法及其详细说明。 #### 使用 `ceph-objectstore-tool` 进行批量修复 `ceph-objectstore-tool` 是一个高级工具,可以用于操作底层的PG和对象数据[^1]。虽然该工具的操作是不可逆的,但在某些情况下,它可以帮助修复异常的PG。可以通过脚本自动化这一过程: ```bash #!/bin/bash # 获取所有需要修复的PG列表 pg_list=$(ceph pg dump_stuck inactive | awk '{print $1}') # 遍历每个PG并尝试修复 for pg in $pg_list; do osd_id=$(ceph osd map rbd $pg | jq -r '.osd') host=$(ceph osd find $osd_id | jq -r '.crush_location.host') echo "Repairing PG: $pg on OSD: $osd_id, Host: $host" # 在对应的OSD主机上执行修复 ssh $host "sudo ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-$osd_id --pgid $pg repair" done ``` 此脚本会获取所有未激活的PG,并逐一尝试修复它们。需要注意的是,在执行此类操作前,必须确保已经备份了相关数据[^1]。 #### 使用 `ceph pg repair` 命令 对于某些简单的PG问题,可以使用 `ceph pg repair` 命令进行修复。该命令会触发Ceph集群对指定PG的校验和修复操作[^4]。 ```bash # 修复单个PG ceph pg repair <pg-id> # 批量修复所有不健康的PG for pg in $(ceph pg dump_stuck inactive | awk '{print $1}'); do ceph pg repair $pg done ``` 此方法适用于那些由于数据不一致或元数据损坏导致的问题。 #### 调整PG状态以触发自动修复 如果某些OSD无法恢复(例如硬盘损坏),可以通过调整集群配置来触发自动修复过程。具体步骤如下: 1. **标记OSD为`out`**:将故障OSD从集群中移除。 ```bash ceph osd out <osd-id> ``` 2. **删除故障OSD**:如果确定该OSD无法恢复,则可以从集群中彻底删除。 ```bash ceph osd rm <osd-id> ``` 3. **重新平衡集群**:通过重新分布数据,Ceph会自动修复受影响的PG。 ```bash ceph osd pool set <pool-name> size <new-replica-count> ceph balancer mode active ceph balancer rebalance ``` 上述操作会触发Recovery和Backfill过程,从而修复受影响的PG[^3]。 #### 处理长时间未更新的PG 如果某些PG长时间未被更新,可能是因为对应的OSD未向Monitor报告状态。此时,可以通过以下方法解决[^5]: 1. **检查超时设置**: ```bash ceph config get mon osd_report_timeout ``` 2. **强制清除PG状态**: ```bash ceph pg <pg-id> mark_unfound_lost revert ``` 此命令会将丢失的对象标记为已丢失,并尝试从其他副本中恢复数据。 --- ### 注意事项 - 在执行任何修复操作之前,请确保备份了关键数据。 - 使用 `ceph-objectstore-tool` 时需格外小心,因为其操作不可逆[^1]。 - 如果问题涉及复杂的副本修复(如快照对象修复),建议参考官方文档或联系技术支持[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小Eason哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值