尝试重建具有故障驱动器的 RAID 5 阵列,`/dev/sdc1 没有超级块 - 组装中止`

尝试重建具有故障驱动器的 RAID 5 阵列,`/dev/sdc1 没有超级块 - 组装中止`

我有大约 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 可能是故障驱动器(我即将进行测试),但更有可能是旧驱动器。我的备份也有点旧了,大约 2 个月了。说实话,我甚至不知道从哪里开始。我在谷歌上搜索过,但对于我这个凡人来说,这一切似乎都很神秘,我非常害怕一个错误的步骤可能会导致我丢失所有数据(如果我还没有丢失的话)。

我可以提供我现在正在做的事情的日志。我当前的系统是在 Hyper-V 主机上运行的 Debian 12。如能得到任何帮助将不胜感激。

答案1

最近,在我处理阵列的过程中,我发现驱动器命名经常在每次启动时发生变化 - 我的操作系统是在当时的 上创建的sda1,在最近尝试从故障硬件中恢复时,我发现启动驱动器有时最终会变成 ,sdc1有时会变成sdf1(是的,那台特定的机器有很多驱动器)。在这种情况下,mdadm报告您认为是集合一部分的驱动器没有超级块,首先要确认的是系统上的哪个驱动器实际上构成了所讨论的 RAID 阵列。如果您正在运行 GUI,则应该有一个名为的工具Disks,它将显示系统中的所有硬盘驱动器及其当前使用情况。从命令行,sudo parted -l将显示该信息。

一旦确定哪些驱动器构成了五磁盘组中仍然有效的四个,您就可以使用(mdadm --assemble --force /dev/md0 /dev/sd{a,c,d,f}1 missing使用您的示例,并假设您确认它实际上是sda1、、,并且组成了 RAID 组)。请注意驱动器名称关键字的使用,这是一个标志,表示那里应该有另一个驱动器,但它(尚)不可用。严格来说,这可能不是必要的;超级块将包含几何信息,显示这是一个五磁盘阵列,并将尝试将其重建为降级阵列。其他人可能会说您必须小心匹配原始磁盘顺序;我自己的经验表明,虽然这在过去是必要的,但更现代的系统似乎将磁盘在阵列中的位置记录为超级块的一部分,即使设备名称发生变化(就像我的情况一样),阵列也会成功重建。sdc1sdd1sdf1missingmdadm

就你的情况而言,我必须承认我怀疑在你不注意的时候该阵列发生了一些事情。我能想到的唯一可能sdc最终出现恢复分区的方法是它来自计算机。我很想知道当较新的驱动器发生故障时该阵列是否已经降级;我可能会仔细检查序列号以查看它是否是我认为放在那里的驱动器。无论如何,可以肯定的是,当驱动器添加到系统时,它实际上并没有添加到阵列中;家庭办公室 RAID 硬件通常会自动将新驱动器添加到阵列中,无论谁进行了物理驱动器交换,都可能认为你的系统也做了同样的事情。

我还要指出评论中提到的一件事。Google 确实在一段时间前发布过,来自同一批次的驱动器确实往往会同时发生故障;由从同一供应商处同时购买的一批磁盘组成的 RAID 阵列很可能在阵列中的第一个驱动器发生故障后尝试重建阵列时丢失第二个驱动器。如果我要构建 RAID5 阵列,我会故意从几个不同的供应商处购买,而且通常会从几个不同的制造商处购买,以降低从同一批次购买多个驱动器的风险。由于您一直在更换驱动器,因此您很可能已经免受这种特定故障模式的影响。

相关内容