跳到内容

RustFS 磁盘故障排除指南

RustFS 通过类似纠删码的机制,确保在部分磁盘发生故障时仍能提供读写访问,并在更换磁盘后自动修复数据。

目录

  1. 卸载故障磁盘
  2. 更换故障磁盘
  3. 更新 /etc/fstab 或 RustFS 配置
  4. 重新挂载新磁盘
  5. 触发和监控数据修复
  6. 后续检查和注意事项

卸载故障磁盘

在更换物理硬盘之前,您需要从操作系统层面安全地卸载故障磁盘,以避免在更换过程中对文件系统或 RustFS 造成 I/O 错误。

bash
# Assume the failed disk is /dev/sdb
umount /dev/sdb

注意事项

  • 如果有多个挂载点,请分别执行 umount
  • 如果遇到“device is busy”,可以先停止 RustFS 服务
bash
systemctl stop rustfs

更换故障磁盘

在物理更换故障磁盘后,您需要对新磁盘进行分区和格式化,并应用与原磁盘相同的标签。

bash
# Format as ext4 and apply label DISK1 (must correspond to original label)
mkfs.ext4 /dev/sdb -L DISK1

要求

  • 新磁盘容量 ≥ 原磁盘容量;
  • 文件系统类型与其他磁盘保持一致;
  • 推荐使用标签 (LABEL) 或 UUID 进行挂载,以确保磁盘顺序不受系统重启的影响。

更新 /etc/fstab 或 RustFS 配置

确认 /etc/fstab 中的挂载项标签或 UUID 指向新磁盘。如果使用 RustFS 特定的配置文件(如 config.yaml),相应的条目也需要同步更新。

bash
# View current fstab
cat /etc/fstab

# Example fstab entry (no modification needed if labels are the same)
LABEL=DISK1 /mnt/disk1 ext4 defaults,noatime 0 2

技巧

  • 如果使用 UUID
bash
blkid /dev/sdb
# Get the new partition's UUID, then replace the corresponding field in fstab
  • 修改 fstab 后,务必验证语法
bash
mount -a # If no errors, configuration is correct

重新挂载新磁盘

执行以下命令批量挂载所有磁盘并启动 RustFS 服务

bash
mount -a
systemctl start rustfs

确认所有磁盘已正常挂载

bash
df -h | grep /mnt/disk

注意

  • 如果部分挂载失败,请检查 fstab 条目是否与磁盘标签/UUID 一致。

触发和监控数据修复

RustFS 检测到新磁盘后,将自动或手动触发数据修复过程。以下示例使用了一个假设的 rustfs-admin 工具

bash
# View current disk status
rustfs-admin disk status

# Manually trigger healing for the new disk
rustfs-admin heal --disk /mnt/disk1

# Real-time view of healing progress
rustfs-admin heal status --follow

同时,您可以通过查看服务日志来确认系统已识别并开始数据恢复

bash
# For systemd-managed installations
journalctl -u rustfs -f

# Or view dedicated log files
tail -f /var/log/rustfs/heal.log

注意事项

  • 修复过程将在后台完成,通常对在线访问的影响最小;
  • 修复完成后,该工具将报告成功或列出失败的对象。

后续检查和注意事项

  1. 性能监控
  • 修复期间 I/O 可能会有轻微波动,建议监控磁盘和网络负载。
  1. 批量故障
  • 如果在同一批磁盘中发生多次故障,请考虑更频繁地进行硬件检查。
  1. 定期演练
  • 定期模拟磁盘故障演练,确保团队熟悉恢复流程。
  1. 维护窗口
  • 当故障率较高时,安排专门的维护窗口以加快更换和修复速度。

根据 Apache 许可证 2.0 发布。