在出现故障前更换 RAID 硬盘(3 岁!)

Eve*_*ady 5 raid mdadm grub2 hard-disk sfdisk

我认为对我的 RAID 设置做的明智之举是在驱动器开始出现故障和它们开始变旧之前更换驱动器......我真的买不起很多云备份空间,我想由于磨损,我的驱动器有保证的最终故障。

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

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

步骤1:

找出/dev/sda我要更换的设备(即),通过物理拔掉它并检查/proc/mdstat以找出/dev/sdx失败的设备。

第二步:

重新插入并使用sfdisk复制分区表

sfdisk -d /dev/sdx > partition.layout
Run Code Online (Sandbox Code Playgroud)

第三步:

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

第四步:

sfdisk /dev/sdx < partition.layout
Run Code Online (Sandbox Code Playgroud)

第五步:

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

mdadm --add /dev/md0 /dev/sdx1
mdadm --add /dev/md1 /dev/sdx2
Run Code Online (Sandbox Code Playgroud)

第六步:

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

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

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

编辑:

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

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

fro*_*utz 12

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

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

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

就我个人而言,我根本不这样做。那么如果磁盘已经使用了 3 年呢?磁盘的寿命比那要长得多,新磁盘也会死掉。

定期(自动)测试磁盘并在磁盘出现第一个未决/不可纠正/重新分配的扇区、自检读取错误或其他问题后更换磁盘,这一点更为重要。

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

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

  • “MBR”将是一个比“MSDOS”更好的术语(在本答案中使用它的方式)。 (2认同)

max*_*zig 6

您的第一步是不必要的,并且仍然不能保证/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
Run Code Online (Sandbox Code Playgroud)

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

# hdparm -i /dev/sda

/dev/sda:

 Model=SAMSUNG HD103UJ, FwRev=1AA01113, SerialNo=S13PJ0123456789
Run Code Online (Sandbox Code Playgroud)

(我编辑了实际序列号)

我还可以通过查看以下符号链接来获取序列号/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
Run Code Online (Sandbox Code Playgroud)

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

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

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

ProTip #2:选择异构驱动器,即使用来自独立制造商的型号、已经具有不同开机时间的驱动器等。从而降低由于系统问题而导致多次故障的可能性。

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