![Linux mdadm raid 阵列中的驱动器故障。帮助!](https://linux22.com/image/156708/Linux%20mdadm%20raid%20%E9%98%B5%E5%88%97%E4%B8%AD%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%95%85%E9%9A%9C%E3%80%82%E5%B8%AE%E5%8A%A9%EF%BC%81.png)
看起来我的系统正遭受某种灾难性故障,我现在很恐慌,不知道该怎么办。
我有一个 3 驱动器 raid 10 阵列。今天早上我注意到我在访问阵列时遇到了问题(我所有的照片都在那里)。我检查了 mdadm,它说有一个驱动器从阵列中删除(驱动器 2)。我认为这可能是因为计算机意外关闭(停电),导致驱动器被踢。
我尝试重新添加驱动器,结果成功了。然后我用 mdstat 检查了重建的进度,重建速度为 10 kb/s。是的。以这种速度重建 3 TB 驱动器需要数年时间。我检查 dmseg,发现驱动器 3 出现一堆 I/O 错误。驱动器 3 似乎出现某种硬件故障。我用磁盘工具检查了驱动器的运行状况(我认为它来自 gnome、gnome-disk-tool 或其他工具),它有近 6000 个坏扇区,但除此之外它说一切正常。
所以现在我很恐慌,认为驱动器 2 实际上仍然很好,现在当我读取它时,它正在重新同步,可能会破坏它所拥有的良好数据。然后我尝试关闭计算机(我读到它是保存的,即使 mdstat 正在重新同步)。
不幸的是,关闭功能不起作用。按“ESC”显示终端,它显示一堆“print_req_error:I/O错误,dev sdd,扇区......”类型错误。我不知道该怎么办。等等?这样的情况已经持续了30分钟。
有什么建议吗?
答案1
这是一个奇迹。不知何故,我让阵列恢复并运行。这就是我所做的:
- 正如原始帖子中提到的,系统没有关闭,因为它仍在尝试向故障驱动器写入内容。我听从了 user361233 的建议并拔掉了插头。
- 我不再惊慌。关闭电脑后,我可以思考接下来的步骤。
- 我去买了两个新的 3TB 驱动器。
- 我睡在上面,今天我用实时会话 USB (manjaro) 启动了计算机,同时只插入一个驱动器(所以我重新启动了 3 次,每个磁盘一次)。我使用 kde 分区管理器检查了磁盘的运行状况。 SMART 状态表明所有磁盘均正常。然后,我希望阵列的磁盘 3 发生的任何硬件故障至少暂时消失。
我插入了所有三个磁盘,然后重新启动(再次使用实时会话 USB)。回想起来,manjaro 并不是恢复环境的最佳选择,因为它已经安装了 mdadm,因此它已经尝试启动阵列(如 /dev/md127)。我在手动尝试启动阵列时发现了这一点。
mdadm --assemble --scan
当我这样做时,它抱怨已经有一个活动数组(或类似的东西)。我记得 /dev/md127 有时是如何自动启动的,所以我停止了该阵列并尝试手动启动我的阵列。
mdadm --stop /dev/md127 mdadm --assemble --scan
这也行不通。然后,我尝试实际指定每个磁盘上用于组装阵列的分区。
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1
这有效!然后我用 检查了阵列的状态
mdadm --examine /dev/md0
。奇怪的是,它说阵列已达到 3/3 磁盘。当我检查时,cat /proc/mdstat
没有迹象表明阵列的驱动器 2 正在重建(请记住,最初驱动器 2 是在断电后从阵列中踢出的驱动器)。某种奇迹发生了,当我关闭计算机时,驱动器 2 正在以极慢的速度重建,实际上一定很好,并且这次 mdadm 以某种方式将其接受到阵列中。然后,我尝试访问阵列以将数据复制到我购买的新磁盘上。它不起作用。仅列出目录的内容就会导致
ls
命令挂起。再次出现大量dmesg
与磁盘 3 (\dev\sdd) 相关的 I/O 错误。我尝试取消该
ls
命令,尝试了几次 CTRL-C 并等待了几分钟才恢复命令提示符。此时,我尝试再次使用 来检查数组mdadm --examine /dev/md0
。然后,它识别出磁盘 3 出现硬件故障,并将其从阵列中踢出。该阵列现在只有磁盘 1(/dev/sdb,完全健康的驱动器)和磁盘 2(/dev/sdc,在这一切开始时最初从阵列中踢出的驱动器)。我再次尝试访问该数组,现在它成功了!我可以使用
ls
,甚至使用文件浏览器列出所有文件。此时,我开始将所有重要文件复制到我购买的额外驱动器上。我现在已经快完成这个过程了。
最后,这是一个很好的提醒,请确保我定期在单独的设备上备份文件。我以前有这样做的习惯,但最近一两年我疏忽了。抱歉,如果这篇文章太长,而且不是最具体的。我不记得每个命令的确切输出。
长话短说我关掉电脑,不再惊慌。然后我有时间制定解决问题的计划。这是一个保持最新备份的好提醒。
答案2
很难回答你的问题,而且对于评论来说太长了,所以只是一些一般性的指示。
所以现在我很恐慌,认为驱动器 2 实际上仍然很好,现在当我读取它时,它正在重新同步,可能会破坏它所拥有的良好数据。
除非有内核错误,否则重新添加磁盘(与之前具有相同的角色和相同的偏移量)不会“破坏”数据。它只是重写了大部分已经存在的相同数据,没有造成任何损害。
- 如果阵列中缺少多个驱动器,角色可能会发生变化
- 偏移量通常只有在您添加之前的
sdx
值时才会改变sdx1
- 如果非常不幸,如果之前处于奇怪的状态,偏移量也可能会改变
即使驱动器是无辜的,有关被踢驱动器的主要问题是它不再是阵列的一部分。一旦阵列以写入模式安装,阵列上的数据就会被修改,并且被踢出的驱动器上的数据不会随之更新,因此它会变得过时,因此不再“好”。
我用磁盘工具检查了驱动器的运行状况(我认为它来自 gnome、gnome-disk-tool 或其他工具),它有近 6000 个坏扇区,但除此之外它说一切正常。
如果您的驱动器出现问题,您将无法进行数据恢复。如果这 6000 个坏扇区不是一夜之间出现的,那么你早就应该更换那个驱动器了。如果您不进行自我测试、监控并尽快更换任何出现故障的驱动器,RAID 就会失效。
获取新驱动器,用于ddrescue
从旧驱动器中复制可以复制的内容,然后使用写时复制覆盖进行数据恢复实验。使用覆盖,您可以在不修改原始文件的情况下进行写入(因此您不必重新进行磁盘复制,也不需要副本的副本)。但覆盖也需要可以工作的驱动器,而不能使用有错误的驱动器来实现。