如何在驱动器处于“E”状态的 Synology NAS 上恢复 mdadm 阵列?

如何在驱动器处于“E”状态的 Synology NAS 上恢复 mdadm 阵列?

Synology 有一个定制版本的 md 驱动程序和 mdadm 工具集,它在内核中的 rdev->flags 结构中添加了一个“DriveError”标志。

净效应 - 如果您不幸遇到阵列故障(第一个驱动器),并且第二个驱动器也出现错误 - 即使从驱动器读取数据工作正常,阵列也会进入不允许您修复/重建阵列的状态。

此时,从这个数组的角度来看,我并不真正担心这个问题,因为我已经删除了内容并打算重建,但更多的是希望将来能找到解决这个问题的途径,因为这是我第二次遇到它,而且我知道我在论坛上看到其他人问过类似的问题。

Synology 支持没有什么帮助(并且大多数时候没有响应),并且根本不会分享任何有关处理盒子上的 raidset 的信息。

/proc/mdstat 的内容:

ds1512-ent> cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md2 : active raid5 sdb5[1] sda5[5](S) sde5[4](E) sdd5[3] sdc5[2]
      11702126592 blocks super 1.2 level 5, 64k chunk, algorithm 2 [5/4] [_UUUE]

md1 : active raid1 sdb2[1] sdd2[3] sdc2[2] sde2[4] sda2[0]
      2097088 blocks [5/5] [UUUUU]

md0 : active raid1 sdb1[1] sdd1[3] sdc1[2] sde1[4] sda1[0]
      2490176 blocks [5/5] [UUUUU]

unused devices: <none>

来自 mdadm --detail /dev/md2 的状态:

/dev/md2:
        Version : 1.2
  Creation Time : Tue Aug  7 18:51:30 2012
     Raid Level : raid5
     Array Size : 11702126592 (11160.02 GiB 11982.98 GB)
  Used Dev Size : 2925531648 (2790.00 GiB 2995.74 GB)
   Raid Devices : 5
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Fri Jan 17 20:48:12 2014
          State : clean, degraded
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           Name : MyStorage:2
           UUID : cbfdc4d8:3b78a6dd:49991e1a:2c2dc81f
         Events : 427234

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       21        1      active sync   /dev/sdb5
       2       8       37        2      active sync   /dev/sdc5
       3       8       53        3      active sync   /dev/sdd5
       4       8       69        4      active sync   /dev/sde5

       5       8        5        -      spare   /dev/sda5

如您所见 - /dev/sda5 已重新添加到阵列中。(它是彻底发生故障的驱动器)- 但即使 md 将该驱动器视为备用驱动器,它也不会重建它。在这种情况下,/dev/sde5 是具有 (E) DiskError 状态的问题驱动器。

我尝试过停止 md 设备、运行强制重组、从设备中删除/重新添加 sda5 等。行为没有变化。

我能够使用以下命令完全重新创建阵列:

mdadm --stop /dev/md2
mdadm --verbose \
   --create /dev/md2 --chunk=64 --level=5 \
   --raid-devices=5 missing /dev/sdb5 /dev/sdc5 /dev/sdd5 /dev/sde5

这使得阵列回到这个状态:

md2 : active raid5 sde5[4] sdd5[3] sdc5[2] sdb5[1]
      11702126592 blocks super 1.2 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]

然后我重新添加了/dev/sda5:

mdadm --manage /dev/md2 --add /dev/sda5

之后它开始重建:

md2 : active raid5 sda5[5] sde5[4] sdd5[3] sdc5[2] sdb5[1]
      11702126592 blocks super 1.2 level 5, 64k chunk, algorithm 2 [5/4] [_UUUU]
      [>....................]  recovery =  0.1% (4569508/2925531648) finish=908.3min speed=53595K/sec

请注意“丢失”驱动器的位置与丢失插槽的精确位置相匹配。

一旦完成,我想我可能会拔出有问题的驱动器并重新构建它。

我正在寻找任何建议,以了解是否存在任何“不太可怕”的方法来执行此修复 - 或者是否有人经历过 Synology 阵列的这种体验,并且知道如何强制它重建,而不是使 md 设备脱机并从头开始重新创建阵列。

答案1

这只是我在遇到相同问题后找到的解决方案的补充。我遵循了塞巴斯蒂安有关如何重新创建数组的博客文章:

我发现重新创建阵列的方法比上述方法效果更好。但是,重新创建阵列后,卷仍未显示在 Web 界面上。我的 LUN 均未显示。基本上显示一个未配置任何内容的新阵列。我联系了 Synology 支持,他们远程登录以解决问题。不幸的是,他们在我离开控制台时进行了远程登录。不过,我确实设法捕获了会话,并查看了他们所做的操作。在尝试恢复部分数据时,驱动器再次崩溃,我又回到了同样的情况。我按照 dSebastien 的博客中所述重新创建了阵列,然后查看了 synology 会话以执行更新。运行以下命令后,我的阵列和 LUN 出现在 Web 界面上,我能够使用它们。我几乎没有 Linux 经验,但这些是我在自己的情况下执行的命令。希望这可以帮助其他人,但请自行承担风险。最好联系 Synology 支持人员,让他们为您修复此问题,因为这种情况可能与您的情况不同

DiskStation> synocheckiscsitrg
synocheckiscsitrg: Pass 

DiskStation> synocheckshare
synocheckshare: Pass SYNOICheckShare()
synocheckshare: Pass SYNOICheckShareExt()
synocheckshare: Pass SYNOICheckServiceLink()
synocheckshare: Pass SYNOICheckAutoDecrypt()
synocheckshare: Pass SYNOIServiceShareEnableDefaultDS()

DiskStation> spacetool --synoblock-enum
****** Syno-Block of /dev/sda ******
//I've removed the output. This should display info about each disk in your array

DiskStation> vgchange -ay
  # logical volume(s) in volume group "vg1" now active

DiskStation> dd if=/dev/vg1/syno_vg_reserved_area of=/root/reserved_area.img
24576+0 records in
24576+0 records out

DiskStation> synospace --map_file -d
Success to dump space info into '/etc/space,/tmp/space'

DiskStation> synocheckshare
synocheckshare: Pass SYNOICheckShare()
synocheckshare: Pass SYNOICheckShareExt()
synocheckshare: Pass SYNOICheckServiceLink()
synocheckshare: Pass SYNOICheckAutoDecrypt()
synocheckshare: Pass SYNOIServiceShareEnableDefaultDS()

DiskStation> synocheckiscsitrg
synocheckiscsitrg: Not Pass, # conflict 

DiskStation> synocheckiscsitrg
synocheckiscsitrg: Pass 

答案2

另有补充:我在我的单磁盘/RAID 级别 0 设备上遇到了非常类似的问题。

Synology 支持非常很有帮助,恢复了我的设备。以下是发生的事情,希望这对其他人有所帮助:

我的磁盘在某个特定块上出现读取错误,系统日志(dmesg)中的消息如下:

[4421039.097278] ata1.00: read unc at 105370360
[4421039.101579] lba 105370360 start 9437184 end 5860528064
[4421039.106917] sda3 auto_remap 0
[4421039.110097] ata1.00: exception Emask 0x0 SAct 0x2 SErr 0x0 action 0x6
[4421039.116744] ata1.00: edma_err_cause=00000084 pp_flags=00000003, dev error, EDMA self-disable
[4421039.125410] ata1.00: failed command: READ FPDMA QUEUED
[4421039.130767] ata1.00: cmd 60/00:08:b8:d2:47/02:00:06:00:00/40 tag 1 ncq 262144 in
[4421039.130772]          res 41/40:00:f8:d2:47/00:00:06:00:00/40 Emask 0x409 (media error) <F>
[4421039.146855] ata1.00: status: { DRDY ERR }
[4421039.151064] ata1.00: error: { UNC }
[4421039.154758] ata1: hard resetting link
[4421039.667234] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl F300)
[4421039.887286] ata1.00: configured for UDMA/133
[4421039.891777] ata1: UNC RTF LBA Restored
[4421039.895745] ata1: EH complete

几秒钟后,我Volume 1 has crashed从我的设备收到了一封可怕的邮件。

-- 免责声明:请务必用您的设备名称替换设备名称,不要简单地复制粘贴这些命令,因为这可能会使情况变得更糟!--

停止 smb 后,我可以以只读方式重新挂载分区并运行带有 badblocks check 的 e2fsk(-c):

umount /dev/md2
e2fsck -C 0 -v -f -c /dev/md2

(也可以使用e2fsck -C 0 -p -v -f -c /dev/md2尽可能无人值守的方式运行,虽然这在我的情况下不起作用,因为必须手动修复错误。所以我不得不重新启动 e2fsck。结论:如果出现磁盘错误,-p 没有多大意义)

尽管 e2fsck 能够修复错误,并且 smartctl 也显示 Raw_Read_Error_Rate 不再增加,但设备仍然无法以读写模式挂载该卷。DSM 仍然显示“卷崩溃”

所以我向支持人员开了一张票。一开始花了很长时间才让事情顺利进行,但最后他们通过重建 RAID 阵列解决了这个问题:

synospace --stop-all-spaces
syno_poweroff_task -d 
mdadm -Sf /dev/md2
mdadm -AfR /dev/md2 /dev/sda3

在执行任何操作之前, 请务必检查您的设备名称(/dev/mdX和)。将显示相关信息。/dev/sdaXcat /proc/mdstat

相关内容