12.3. 从系统中删除旧磁盘并安装替换磁盘

在容器主机上,使用您要替换的 OSD,从系统中删除旧磁盘并安装替换磁盘。

先决条件:

ceph-volume 命令存在于 Ceph 容器中,但没有安装到 overcloud 节点上。创建一个别名,使 ceph-volume 命令能够在 Ceph 容器内运行 ceph-volume 二进制文件。然后,使用 ceph-volume 命令清理新磁盘,并将它添加为 OSD。

流程

  1. 确保失败的 OSD 没有运行:

    systemctl stop ceph-osd@27
  2. 识别 ceph 容器镜像的镜像 ID,并将其存储在名为 IMG 的环境变量中:

    IMG=$(podman images | grep ceph | awk {'print $3'})
  3. ceph-volume 命令别名,使其在 $IMG Ceph 容器内运行,使用 ceph-volume 入口点和相关目录:

    alias ceph-volume="podman run --rm --privileged --net=host --ipc=host -v /run/lock/lvm:/run/lock/lvm:z -v /var/run/udev/:/var/run/udev/:z -v /dev:/dev -v /etc/ceph:/etc/ceph:z -v /var/lib/ceph/:/var/lib/ceph/:z -v /var/log/ceph/:/var/log/ceph/:z --entrypoint=ceph-volume $IMG --cluster ceph"
  4. 验证 aliased 命令是否已成功运行:

    ceph-volume lvm list
  5. 检查您的新 OSD 设备是否还没有作为 LVM 的一部分。使用 pvdisplay 命令检查设备,并确保 VG Name 字段为空。将 <NEW_DEVICE > 替换为新 OSD 设备的 /dev sections 路径:

    [root@overcloud-computehci-2 ~]# pvdisplay <NEW_DEVICE>
      --- Physical volume ---
      PV Name               /dev/sdj
      VG Name               ceph-0fb0de13-fc8e-44c8-99ea-911e343191d2
      PV Size               50.00 GiB / not usable 1.00 GiB
      Allocatable           yes (but full)
      PE Size               1.00 GiB
      Total PE              49
      Free PE               0
      Allocated PE          49
      PV UUID               kOO0If-ge2F-UH44-6S1z-9tAv-7ypT-7by4cp
    [root@overcloud-computehci-2 ~]#

    如果 VG Name 字段不为空,则设备将属于您必须删除的卷组。

  6. 如果设备属于卷组,请使用 lvdisplay 命令检查卷组中是否存在逻辑卷。将 <VOLUME_GROUP > 替换为您从 pvdisplay 命令检索到的 VG Name 字段的值:

    [root@overcloud-computehci-2 ~]# lvdisplay | grep <VOLUME_GROUP>
      LV Path                /dev/ceph-0fb0de13-fc8e-44c8-99ea-911e343191d2/osd-data-a0810722-7673-43c7-8511-2fd9db1dbbc6
      VG Name                ceph-0fb0de13-fc8e-44c8-99ea-911e343191d2
    [root@overcloud-computehci-2 ~]#

    如果 LV Path 字段不为空,则该设备会包含您必须删除的逻辑卷。

  7. 如果新设备是逻辑卷或卷组的一部分,请删除逻辑卷、卷组和逻辑卷以及设备关联作为 LVM 系统中的物理卷。

    • <LV_PATH > 替换为 LV Path 字段的值。
    • <VOLUME_GROUP > 替换为 VG Name 字段的值。
    • <NEW_DEVICE > 替换为新 OSD 设备的 /dev sections 路径。

      [root@overcloud-computehci-2 ~]# lvremove --force <LV_PATH>
        Logical volume "osd-data-a0810722-7673-43c7-8511-2fd9db1dbbc6" successfully removed
      [root@overcloud-computehci-2 ~]# vgremove --force <VOLUME_GROUP>
        Volume group "ceph-0fb0de13-fc8e-44c8-99ea-911e343191d2" successfully removed
      [root@overcloud-computehci-2 ~]# pvremove <NEW_DEVICE>
        Labels on physical volume "/dev/sdj" successfully wiped.
  8. 确保新 OSD 设备清理干净。在以下示例中,该设备为 /dev/sdj

    [root@overcloud-computehci-2 ~]# ceph-volume lvm zap /dev/sdj
    --> Zapping: /dev/sdj
    --> --destroy was not specified, but zapping a whole device will remove the partition table
    Running command: /usr/sbin/wipefs --all /dev/sdj
    Running command: /bin/dd if=/dev/zero of=/dev/sdj bs=1M count=10
     stderr: 10+0 records in
    10+0 records out
    10485760 bytes (10 MB, 10 MiB) copied, 0.010618 s, 988 MB/s
    --> Zapping successful for: <Raw Device: /dev/sdj>
    [root@overcloud-computehci-2 ~]#
  9. 使用新设备创建具有现有 OSD ID 的新 OSD,但传递 --no-systemd,以便 ceph-volume 不会尝试启动 OSD。这无法从容器中实现:

    ceph-volume lvm create --osd-id 27 --data /dev/sdj --no-systemd
  10. 启动容器外的 OSD:

    systemctl start ceph-osd@27