mdadm 在 99.9% 时停止重建 RAID5 阵列

mdadm 在 99.9% 时停止重建 RAID5 阵列

我最近在我的 QNAP TS-412 NAS 中安装了三个新磁盘。

这三个新磁盘应该与已经存在的磁盘组合成一个 4 磁盘 RAID5 阵列,因此我开始了迁移过程。

经过多次尝试(每次大约需要 24 小时)后,迁移似乎成功了,但导致 NAS 无响应。

那时我重置了 NAS。从那时起,一切都变得糟糕起来:

  • NAS 启动但将第一个磁盘标记为故障并将其从所有阵列中移除,使它们处于瘫痪状态。
  • 我对磁盘进行了检查,没有发现任何问题(这很奇怪,因为它几乎是新的)。
  • 管理界面没有提供任何恢复选项,所以我想我只能手动进行。

我已使用mdadm/dev/md4/dev/md13/dev/md9)成功重建了所有 QNAP 内部 RAID1 阵列,仅留下 RAID5 阵列;/dev/md0

我已经尝试过多次,使用以下命令:

mdadm -w /dev/md0

(由于从 NAS 移除后阵列以只读方式安装,因此必需/dev/sda3。无法在 RO 模式下修改阵列)。

mdadm /dev/md0 --re-add /dev/sda3

之后阵列开始重建。但它在 99.9% 时停滞,而系统非常慢和/或无响应。(使用 SSH 登录大多数时候都会失败)。

当前状况:

[admin@nas01 ~]# cat /proc/mdstat                            
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md4 : active raid1 sdd2[2](S) sdc2[1] sdb2[0]
      530048 blocks [2/2] [UU]

md0 : active raid5 sda3[4] sdd3[3] sdc3[2] sdb3[1]
      8786092608 blocks super 1.0 level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
      [===================>.]  recovery = 99.9% (2928697160/2928697536) finish=0.0min speed=110K/sec

md13 : active raid1 sda4[0] sdb4[1] sdd4[3] sdc4[2]
      458880 blocks [4/4] [UUUU]
      bitmap: 0/57 pages [0KB], 4KB chunk

md9 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      530048 blocks [4/4] [UUUU]
      bitmap: 2/65 pages [8KB], 4KB chunk

unused devices: <none>

(现在已经停滞2928697160/2928697536了几个小时)

[admin@nas01 ~]# mdadm -D /dev/md0
/dev/md0:
        Version : 01.00.03
  Creation Time : Thu Jan 10 23:35:00 2013
     Raid Level : raid5
     Array Size : 8786092608 (8379.07 GiB 8996.96 GB)
  Used Dev Size : 2928697536 (2793.02 GiB 2998.99 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Jan 14 09:54:51 2013
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

 Rebuild Status : 99% complete

           Name : 3
           UUID : 0c43bf7b:282339e8:6c730d6b:98bc3b95
         Events : 34111

    Number   Major   Minor   RaidDevice State
       4       8        3        0      spare rebuilding   /dev/sda3
       1       8       19        1      active sync   /dev/sdb3
       2       8       35        2      active sync   /dev/sdc3
       3       8       51        3      active sync   /dev/sdd3

检查后/mnt/HDA_ROOT/.logs/kmsg发现,实际问题似乎在于/dev/sdb3

<6>[71052.730000] sd 3:0:0:0: [sdb] Unhandled sense code
<6>[71052.730000] sd 3:0:0:0: [sdb] Result: hostbyte=0x00 driverbyte=0x08
<6>[71052.730000] sd 3:0:0:0: [sdb] Sense Key : 0x3 [current] [descriptor]
<4>[71052.730000] Descriptor sense data with sense descriptors (in hex):
<6>[71052.730000]         72 03 00 00 00 00 00 0c 00 0a 80 00 00 00 00 01 
<6>[71052.730000]         5d 3e d9 c8 
<6>[71052.730000] sd 3:0:0:0: [sdb] ASC=0x0 ASCQ=0x0
<6>[71052.730000] sd 3:0:0:0: [sdb] CDB: cdb[0]=0x88: 88 00 00 00 00 01 5d 3e d9 c8 00 00 00 c0 00 00
<3>[71052.730000] end_request: I/O error, dev sdb, sector 5859367368
<4>[71052.730000] raid5_end_read_request: 27 callbacks suppressed
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246784 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246792 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246800 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246808 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246816 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246824 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246832 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246840 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246848 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5:md0: read error not correctable (sector 5857246856 on sdb3).
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.
<4>[71052.730000] raid5: some error occurred in a active device:1 of md0.

对于范围内的各个(随机?)扇区,上述序列以稳定的速率重复585724XXXX

我的问题是:

  • 为什么它在接近尾声时就停滞了,但仍然使用了这么多的资源导致系统停滞(md0_raid5md0_resync进程仍在运行)。
  • 有什么方法可以查明是什么原因导致其失败/停止?<-- 可能是由于sdb3错误。
  • 我怎样才能完成操作而不丢失 3TB 的数据?(比如跳过有问题的扇区sdb3,但保留完整的数据?)

答案1

它很可能在完成之前就停滞了,因为它需要故障磁盘返回某种状态,但却没有得到。

无论如何,仅使用 4 个磁盘中的 3 个,您的所有数据都是(或应该)完整的。

您说它会从阵列中弹出有故障的磁盘 - 所以它应该仍在运行,尽管处于降级模式。

你能夠安裝它嗎?

您可以通过执行以下操作来强制运行阵列:

  • 打印出数组的详细信息:mdadm -D /dev/md0
  • 停止阵列:mdadm --stop /dev/md0
  • 重新创建阵列并强制 md 接受它:“mdadm -C -n md0 --assume-clean /dev/sd[abcd]3”

只要满足以下条件,后一步就是完全安全的:

  • 你不写入数组,并且
  • 您使用了与之前完全相同的创建参数。

最后一个标志将阻止重建并跳过任何完整性测试。
然后您应该能够安装它并恢复您的数据。

答案2

显而易见的方法是更换有故障的磁盘,重新创建阵列并重播在阵列扩展操作之前所做的备份。

但既然你似乎没有这个选择,那么下一个最好的选择是:

  • 获取一个具有足够空间的 Linux 系统来容纳所有磁盘的原始空间(如果我没记错的话,是 12 TB)
  • 将数据从磁盘复制到此系统,目标可能是文件或块设备,这对来说并不重要mdraid。如果您的sdb3设备有缺陷,您可能需要使用ddrescue而不是简单的dd来复制数据。
  • 尝试从那里重新组装和重建阵列

另外,看看这个博客页面了解有关如何评估 RAID 5 阵列中多个设备故障情况的一些提示。

相关内容