我有大约 20TB MD 阵列,分布在 5 个 6TB 硬盘上。昨天,其中一个驱动器出现故障,系统停止启动。我不太擅长 Linux,所以过去每当发生这种情况时,我都会简单地重新安装 Debian,并运行使mdadm
阵列再次运行所需的任何必要命令(在从本地商店购买备用硬盘之后) )。具体来说,我从系统中删除旧驱动器,运行mdadm --assemble
然后将新驱动器添加到阵列中,以便在第二天左右对其进行配置。
这一次,当我运行时mdadm --assemble /dev/md0 /dev/sd{a,c,d,f}1 --force
,它未能抱怨No super block found on /dev/sdc1 (expected magic a92b4efc, got 00000000)
。
在某些情况下,这 4 个驱动器 (sd{a,c,d,f}) 是过去 3 个月内购买的新硬盘。第五个驱动器(我将其卸下并更换为新驱动器之一)已经使用了五年。
虽然 sdc 可能是故障驱动器(我即将测试),但更有可能是旧驱动器。我的备份也有点旧了,大约两个月前了。老实说,我什至不知道从哪里开始。我已经做了一些谷歌搜索,但这对这个凡人来说似乎非常神秘,我非常害怕一个错误的步骤可能会导致我丢失所有数据(如果我还没有)。
我可以提供我现在正在做的事情的日志。我当前的系统是在 Hyper-V 主机上运行的 Debian 12。将不胜感激任何帮助。
在我最近对阵列的工作中,我发现驱动器命名经常从一个启动更改为另一个启动 - 我的操作系统是在当时创建的
sda1
,并且在最近的启动中尝试从故障硬件中恢复时,我发现有时启动驱动器最终为sdc1
,有时为sdf1
(是的,该特定机器有很多驱动器)。在这种情况下,mdadm
报告您认为是某个集合的一部分的驱动器没有超级块,首先要确认的是系统上的哪个驱动器实际上构成了相关的 RAID 阵列。如果您正在运行 GUI,您应该有一个可用的工具,Disks
该工具将向您显示系统中的所有硬盘驱动器及其当前使用情况。从命令行,sudo parted -l
将向您显示该信息。一旦您确定哪个驱动器构成了您的五个磁盘组中仍然有效的四个驱动器,您就可以使用
mdadm --assemble --force /dev/md0 /dev/sd{a,c,d,f}1 missing
(使用您的示例,并假设您确认它实际上是sda1
、sdc1
、sdd1
、 以及sdf1
哪个驱动器组成了RAID 设置)。请注意驱动器名称关键字的使用missing
,这是一个标志mdadm
那里应该有另一个驱动器,但它(尚未)可用。严格来说,这可能没有必要;超级块将包含几何信息,将其显示为五磁盘阵列,并将尝试将其重建为降级阵列。其他人可能会说你必须小心匹配原始磁盘顺序;我自己的经验表明,虽然这在过去是必要的,但更现代的系统似乎将磁盘在阵列中的位置记录为超级块的一部分,即使设备名称发生变化(就像他们对我所做的那样),阵列也会自行重建成功地。就你的情况而言,我必须承认,我怀疑在你不注意的时候该阵列发生了一些事情。
sdc
我能看到最终可能出现恢复分区的唯一方法是它是否来自计算机。我很想知道当最近的驱动器发生故障时该阵列是否已经降级;我可能会花很多时间检查序列号,看看它是否是我认为应该放入其中的驱动器。无论发生什么情况,可以肯定的是,当驱动器添加到系统时,它实际上并未添加到阵列中;家庭办公室 RAID 硬件通常会自动将新驱动器添加到阵列中,无论谁进行了物理驱动器交换,都可能认为您的系统也做了同样的事情。我还会注意到评论中提到的一件事。谷歌确实在不久前发布过,同一批的驱动器往往会同时出现故障;由从一个供应商同时购买的大量磁盘组成的 RAID 阵列在阵列中的第一个驱动器发生故障后尝试重建阵列时可能会丢失第二个驱动器。如果我正在构建 RAID5 阵列,我会故意从多个不同的供应商(通常是多个不同的制造商)购买,以降低从同一批次获得多个驱动器的风险。随着时间的推移,您一直在更换驱动器,因此您很可能已经免受这种特定故障模式的影响。