使用“mdadm”恢复硬件 RAID5

使用“mdadm”恢复硬件 RAID5

我有一个水螅液晶模组具有 4 个托架的 RAID 设备(4x 2TB Hitachi)。自 2010 年以来,我一直在 RAID5 模式下运行它。去年 5 月,该设备开始发出消息,表明一个驱动器已降级,我应该更换它。我也是。一个月后,第二个驱动器发出降级消息。所以我也换了这个。

第二个驱动器成功恢复后,一切似乎都运行正常。几天后,当我再次启动存储盒时,突然它不再检测到 RAID 模式。显示屏显示我尚未初始化任何磁盘或模式。

由于该设备已停产(我认为是从 2015 年起),我真的很沮丧。我希望制造商使用“标准 RAID 技术”,这样我就可以使用某些软件 RAID 替代方案(例如mdadm)来恢复此硬件 RAID。

在里面希望这有帮助

Hydra Super-S LCM 内部的 RAID 控制器采用向后奇偶校验旋转,RAID 条带为 512 个扇区,因此所有磁盘均以平衡方式访问,奇偶校验磁盘没有额外的工作负载。

在此输入图像描述

有谁知道是否有机会使用mdadm或类似的东西恢复这个特定的硬件 RAID5?

顺便提一句。另一个挑战可能是磁盘在某些 OSX 文件系统中进行格式化。不过,我已经准备好了一些 USB3 磁盘读取器,它当前已连接到我的 Ubuntu。该适配器能够同时连接所有 4 个驱动器。我只是害怕运行任何类似的东西,mdadm因为担心它会覆盖任何现有的文件系统表或 RAID 信息(或其剩余内容)。任何提示都将受到高度赞赏。

答案1

确保以只读模式运行实验:

重新创建 RAID 布局的天真尝试:

# mdadm --create /dev/md100 --assume-clean --metadata=0.90 --level=5 --chunk 256K --raid-devices=4 /dev/loop[0123]

用跟踪数据覆盖它(数据 = 十六进制偏移量):

# for ((i=0; 1; i+=16)); do printf "%015x\n" $i; done > /dev/md100
# hexdump -C /dev/md100
00000000  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 0a  |000000000000000.|
00000010  30 30 30 30 30 30 30 30  30 30 30 30 30 31 30 0a  |000000000000010.|
00000020  30 30 30 30 30 30 30 30  30 30 30 30 30 32 30 0a  |000000000000020.|
00000030  30 30 30 30 30 30 30 30  30 30 30 30 30 33 30 0a  |000000000000030.|

在这个布局中,块位于哪里?

# grep -ano $(printf "%015x" $((0 * 512*512))) /dev/loop[0123]
/dev/loop0:1:000000000000000 # Disk A 1
# grep -ano $(printf "%015x" $((1 * 512*512))) /dev/loop[0123]
/dev/loop1:1:000000000040000 # Disk B 2
# grep -ano $(printf "%015x" $((2 * 512*512))) /dev/loop[0123]
/dev/loop2:1:000000000080000 # Disk C 3
# grep -ano $(printf "%015x" $((3 * 512*512))) /dev/loop[0123]
/dev/loop3:16385:0000000000c0000 # Disk D 4
# grep -ano $(printf "%015x" $((4 * 512*512))) /dev/loop[0123]
/dev/loop0:16385:000000000100000 # Disk A 5

所以这很接近,但不完全像你的图片所示。这就是 RAID 布局的问题,它可能足够相似,甚至可能会挂载,但随后会显示文件中奇怪的损坏,因为只有少数块最终出现乱序。

使用mdadm默认的 4 磁盘 RAID5 布局left-symmetric,如果您读取前 4 个块,它实际上是从 4 个磁盘读取它们。在所示的布局中,它将从 3 个磁盘读取,因为块 4 再次位于第一个磁盘而不是第四个磁盘上。

因此,为了匹配您的图片,您必须尝试其他布局。

我们一起去吧left-asymmetric

# mdadm --create /dev/md100 --assume-clean --metadata=0.90 --level=5 --layout=left-asymmetric --chunk 256K --raid-devices=4 /dev/loop[0123]
# for ((i=0; 1; i+=16)); do printf "%015x\n" $i; done > /dev/md100
# mdadm --stop /dev/md100
# echo 3 > /proc/sys/vm/drop_caches
# for i in {0..23}; do grep -ano $(printf "%015x" $(($i * 512*512))) /dev/loop[0123]; done

输出(为了更好地理解而添加的注释):

/dev/loop0:1:000000000000000 # Disk A 1
/dev/loop1:1:000000000040000 # Disk B 2
/dev/loop2:1:000000000080000 # Disk C 3
# skips parity loop3
/dev/loop0:16385:0000000000c0000 # Disk A 4
/dev/loop1:16385:000000000100000 # Disk B 5
# skips parity loop2
/dev/loop3:16385:000000000140000 # Disk D 6
/dev/loop0:32769:000000000180000 # Disk A 7
# skips parity loop1
/dev/loop2:32769:0000000001c0000 # Disk C 8
/dev/loop3:32769:000000000200000 # Disk D 9
# skips parity loop0
/dev/loop1:49153:000000000240000 # Disk B 10
/dev/loop2:49153:000000000280000 # Disk C 11
/dev/loop3:49153:0000000002c0000 # Disk D 12
/dev/loop0:65537:000000000300000 # Disk A 13
/dev/loop1:65537:000000000340000 # Disk B 14
/dev/loop2:65537:000000000380000 # Disc C 15
# skips parity loop3
/dev/loop0:81921:0000000003c0000 # Disk A 16
/dev/loop1:81921:000000000400000 # Disk B 17
# skips parity loop2
/dev/loop3:81921:000000000440000 # Disk D 18
/dev/loop0:98305:000000000480000 # Disk A 19
# skips parity loop1
/dev/loop2:98305:0000000004c0000 # Disk C 20
/dev/loop3:98305:000000000500000 # Disk D 21
# skips parity loop0
/dev/loop1:114689:000000000540000 # Disk B 22
/dev/loop2:114689:000000000580000 # Disk C 23
/dev/loop3:114689:0000000005c0000 # Disk D 24

这种布局似乎更符合您的图片。也许,它会起作用。祝你好运。

相关内容