Nat*_*ger 13 linux raid mdadm software-raid
Synology 有一个定制版本的 md 驱动程序和 mdadm 工具集,它向内核中的 rdev->flags 结构添加了“DriveError”标志。
净效应 - 如果您不幸遇到阵列故障(第一个驱动器),并结合第二个驱动器上的错误 - 即使从驱动器读取正在工作,阵列也会进入不允许您修复/重建阵列的状态美好的。
在这一点上,从这个数组的角度来看,我并不是真的担心这个问题,因为我已经把内容拉下来并打算重建,但更多的是希望在未来有一个解决方案,因为这是我第二次被它咬了,我知道我在论坛上看到其他人问过类似的问题。
Synology 支持的帮助不大(而且大多没有响应),并且根本不会分享有关处理盒子上的 raidsets 的任何信息。
/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>
Run Code Online (Sandbox Code Playgroud)
来自 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
Run Code Online (Sandbox Code Playgroud)
如您所见 - /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
Run Code Online (Sandbox Code Playgroud)
这使数组恢复到此状态:
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]
Run Code Online (Sandbox Code Playgroud)
然后我重新添加了/dev/sda5:
mdadm --manage /dev/md2 --add /dev/sda5
Run Code Online (Sandbox Code Playgroud)
之后它开始重建:
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
Run Code Online (Sandbox Code Playgroud)
请注意“丢失”驱动器的位置与丢失插槽的确切位置相匹配。
一旦完成,我想我可能会拉出有问题的驱动器并再次重建它。
我正在寻找关于是否有任何“不那么可怕”的方法来进行这种修复的任何建议 - 或者是否有人在 Synology 阵列上经历过这种经历并且知道如何强制它重建而不是让 md 设备脱机和从头开始重新创建数组。
小智 3
只是我遇到同样问题后发现的解决方案的补充。我关注了dSebastien的博客文章,了解如何重新创建数组:
我发现重新创建数组的方法比上面的方法效果更好。然而,重新创建阵列后,该卷仍然没有显示在 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
Run Code Online (Sandbox Code Playgroud)