文档

硬盘故障恢复

MinIO 支持对故障硬盘进行热插拔,用新的健康硬盘替换。MinIO 会检测并修复这些硬盘,无需重启任何节点或整个部署。 MinIO 修复 仅在被替换的硬盘上进行,在大多数情况下对部署性能的影响微乎其微或可以忽略不计。

MinIO 修复可确保恢复到硬盘上的所有数据的一致性和正确性。

驱动器的独占访问

MinIO 要求对提供给对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或个人都不应直接对提供给 MinIO 的驱动器或卷,或者 MinIO 放置在它们上面的对象或文件执行任何操作。

除非得到 MinIO 工程团队的指示,否则不要使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个。这类操作极有可能导致大范围的损坏和数据丢失,超出 MinIO 的修复能力。

以下步骤提供了更详细的硬盘更换流程。这些步骤假设 MinIO 部署中的每个节点都按照文档化的先决条件,使用 /etc/fstab 和每个硬盘的卷标来管理硬盘。

1) 卸载故障硬盘

使用 umount 卸载每个故障硬盘。例如,以下命令卸载位于 /dev/sdb 的硬盘。

umount /dev/sdb

2) 更换故障硬盘

从节点硬件上移除故障硬盘,并用已知的健康硬盘替换。更换的硬盘必须满足以下要求:

  • 格式化为 XFS 并且为空。

  • 硬盘类型相同(例如 HDD、SSD、NVMe)。

  • 性能相等或更高。

  • 容量相等或更大。

使用容量更大的替换硬盘不会增加集群的总存储空间。MinIO 使用服务器池最小硬盘的容量作为所有硬盘的容量上限。

以下命令将一个硬盘格式化为 XFS,并为其分配一个与故障硬盘相匹配的卷标。

mkfs.xfs /dev/sdb -L DRIVE1

MinIO 强烈建议 使用基于卷标的挂载方式,以确保硬盘顺序在系统重启后保持一致。

3) 检查并更新 fstab

检查 /etc/fstab 文件,并根据需要进行更新,使故障硬盘的条目指向新格式化的替换硬盘。

  • 如果使用基于卷标的硬盘分配方式,请确保每个卷标都指向正确的新格式化硬盘。

  • 如果使用基于 UUID 的硬盘分配方式,请根据新格式化的硬盘更新每个挂载点的 UUID。您可以使用 lsblk 查看硬盘的 UUID。

例如,考虑以下情况:

$ cat /etc/fstab

  # <file system>  <mount point>  <type>  <options>         <dump>  <pass>
  LABEL=DRIVE1     /mnt/drive1    xfs     defaults,noatime  0       2
  LABEL=DRIVE2     /mnt/drive2    xfs     defaults,noatime  0       2
  LABEL=DRIVE3     /mnt/drive3    xfs     defaults,noatime  0       2
  LABEL=DRIVE4     /mnt/drive4    xfs     defaults,noatime  0       2

注意

依赖于挂载外部存储的云环境实例,如果一个或多个远程文件挂载返回错误或失败,可能会遇到启动失败。例如,一个挂载了持久性 EBS 卷的 AWS ECS 实例,如果一个或多个 EBS 卷挂载失败,使用标准的 /etc/fstab 配置可能会导致启动失败。

您可以设置 nofail 选项来屏蔽启动时的错误报告,并允许实例在存在一个或多个挂载问题的情况下启动。

对于具有本地连接磁盘的系统,您不应使用此选项,因为屏蔽硬盘错误会阻止 MinIO 和操作系统以正常方式响应这些错误。

对于前面的示例命令,无需对 fstab 进行任何更改,因为位于 /mnt/drive1 的替换硬盘与故障硬盘使用了相同的卷标 DRIVE1

4) 重新挂载更换后的硬盘

使用 mount -a 重新挂载在本流程开始时卸载的硬盘。

mount -a

该命令应导致所有被替换的硬盘被重新挂载。

5) 监控 MinIO 的硬盘检测和修复状态

对于由 systemd 管理的安装,使用 mc admin logs 命令 journalctl -u minio 来监控重新挂载硬盘后的服务器日志输出。输出应包含识别每个已格式化空硬盘的消息。

使用 mc admin heal 来监控部署的整体修复状态。MinIO 会积极修复被替换的硬盘,以确保从降级状态快速恢复。

6) 后续步骤

监控集群是否出现进一步的硬盘故障。某些批次的硬盘可能会在相近的时间内接连发生故障。对于硬盘故障率高于预期的部署,应安排专门的维护来更换已知有问题的批次。可以考虑使用 MinIO SUBNET 与 MinIO 工程团队协作,以获得任何此类操作的指导。

English 中文