在发生故障之前更换 raid 硬盘(3 年前!)

在发生故障之前更换 raid 硬盘(3 年前!)

我认为,对我的 raid 设置进行明智的做法是在驱动器开始出现故障和开始变旧之前更换驱动器......我真的负担不起大量的云备份空间,而且我想避免我的驱动器因磨损而最终出现故障。

我有 3 个带有 GPT、grub 的 2TB 驱动器、一个小型系统 raid1 分区和一个大型 raid5 主分区。我正在使用 Arch Linux。

我打算一次更换一个驱动器。我想发布我的行动计划,看看是否有人能想到它不起作用的原因,或者是否有更好的方法来做到这一点。

步骤1:

/dev/sda通过物理拔下电源插头并检查/proc/mdstat找出发生故障的设备来找出我要更换的设备(即) /dev/sdx

第二步:

重新插上电源并使用 sfdisk 复制分区表

sfdisk -d /dev/sdx > partition.layout

第三步:

放入相同大小的新物理驱动器

第四步:

sfdisk /dev/sdx < partition.layout

第五步:

用于mdadm根据 arch wiki 上的说明将新驱动器添加到阵列。

mdadm --add /dev/md0 /dev/sdx1
mdadm --add /dev/md1 /dev/sdx2

第六步:

重新安装grub?等待重新同步完成,然后对其他 2 个驱动器重复整个过程?

我想我的问题主要是,这会成功吗?我有什么遗漏的吗?我不想错过一些明显的事情并丢失所有数据。

非常感谢您的任何帮助/见解。

编辑:

只是为了将讨论结果放在同一个地方,我想说,我想出了如何让 mdadm 和 smartmontools (smartd) 监控,并在我的硬盘开始出现问题时通过电子邮件通知我。我使用已同步到手机的 Gmail 帐户设置了 ssmtp。

由于我已经购买了新驱动器,因此我将保留它们,并在出现问题时更换它们。据我了解,最终所有硬盘都会出现故障。感谢您提供有关如何执行此操作(不降低阵列性能)的建议和提示。一旦我有能力进行升级,我将使用带有 ECC 主板/内存等的 ZFS。并感谢您在这方面的提示。非常感谢你们真的很有帮助:D

答案1

这是一个坏主意,因为您故意降低 RAID 性能,并且重新同步可能会意外失败。最好将新磁盘连接到系统(这样您就有n+1磁盘),然后用于mdadm --replace同步它。这样,RAID 在此期间就不会降级。

您不必通过故障/删除驱动器来找出哪个是哪个。您可以在 中看到设备的角色编号mdadm --examine,在 mdstat 输出[UUU]中角色编号为[012];您可以使用hdparm或检查驱动器的序列号smartctl,并与驱动器本身的标签进行比较。

对于分区来说,现在使用 GPT 可能比 MSDOS 更好。如果您不仅要更换磁盘,还要升级它们的大小,那么您可能别无选择,因为 MSDOS 分区几乎止步于 2TB。

就我个人而言,我根本不这样做。如果磁盘已经使用了 3 年怎么办?磁盘的寿命比这长得多,而新磁盘同样会失效。

更重要的是定期(自动)测试磁盘,并在磁盘出现第一个挂起/无法纠正/重新分配的扇区、自测试中读取错误或其他问题时更换磁盘。

更重要的是备份您不想丢失的任何数据。

您也可以切换到 RAID6 以获得更多冗余,但只要您主动检查错误,两个磁盘同时失效的情况就不太可能发生。不要让你的重建成为你多年来的第一次阅读测试。

答案2

您的第一步是不必要的,并且仍然不能保证始终/dev/sdX保持稳定(即它指向同一设备)。在最坏的情况下,再次插入会触发一些长时间运行的重新同步操作。

更好、更可靠的方法是使用驱动器的序列号(S/N、SN)。它们打印在驱动器上并且可以从系统中查询。

例如,查看一个随机系统:

# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sda2[0] sdb2[2]
      976245464 blocks super 1.2 [2/2] [UU]
      bitmap: 1/8 pages [4KB], 65536KB chunk

然后我可以通过以下方式获取 sda 的序列号:

# hdparm -i /dev/sda

/dev/sda:

 Model=SAMSUNG HD103UJ, FwRev=1AA01113, SerialNo=S13PJ0123456789

(我修改了实际的序列号)

我还可以通过查看下面的符号链接来获取序列号/dev/disk/by-id

# ls -l /dev/disk/by-id | grep 'sda$'
lrwxrwxrwx. 1 root root  9 2016-08-05 09:49 ata-SAMSUNG_HD103UJ_S13PJ0123456789 \
  -> ../../sda

因此,我可以记下要更换的驱动器的序列号,关闭系统电源,然后用匹配的序列号(印在驱动器标签上)更换驱动器。

专业提示#1:添加新驱动器时,将序列号写在额外的标签上,并将该标签放在直接可见的一侧(例如连接器一侧)。

/dev/disk/by-id/...将新设备添加到 RAID 时,这些链接也很方便。

专业提示#2:选择异构驱动器,即使用来自独立制造商、已经具有不同通电时间的驱动器等。因此,您可以降低由于系统问题而发生多次故障的可能性。

专业提示 #3:使用 BTRFS 或 ZFS 等校验和文件系统。除了校验和的好处之外,它们还支持更换驱动器,而无需先将其卸下。

答案3

不,我不会抢先更换硬盘。

对于您的情况,我建议切换到专用 RAID 文件系统;我个人最喜欢的是 ZFS,但我想 BTRFS 也可以。

使用 ZFS,您可以安装新的 HDD,将其作为热备用添加到池中,让 ZFS 定期“清理”(自动检查错误)您的 HDD,并在清理中看到错误时激活热备用。然后ZFS会自动初始化它,完成后你就可以撕掉有缺陷的了。只要池中的 HDD 不是相同的制造/运行,您就可以合理地确定它们不会同时发生故障(当然,这取决于您的偏执程度)。

下次,不用说,您应该在安装 HDD 时对其进行标记,以便无需移除即可找到它们...;)

如果您与现有解决方案并行执行所有这些操作(前提是您的机箱有足够的空间容纳两个额外的 HDD),那么您就为未来做好了准备。您可以将所有数据迁移到新磁盘,然后将旧磁盘用作未来的热备用。

(注意:如果您使用 ZFS(此处仅用作示例),请在 google 中搜索“zfs ecc”并明智地选择)。

相关内容