我有一个 6 设备 raid 5 阵列,其中 1 个磁盘出现故障,然后由于断电,机器关闭,当它启动时,所有磁盘都显示为备用磁盘,并显示以下 mdadm -E 输出。
/dev/sda5:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : b480fe0c:c9e29256:0fcf1b0c:1f8c762c
Name : GATEWAY:RAID5_500G
Creation Time : Wed Apr 28 16:10:43 2010
Raid Level : -unknown-
Raid Devices : 0
Avail Dev Size : 976768002 (465.76 GiB 500.11 GB)
Used Dev Size : 976765954 (465.76 GiB 500.10 GB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : active
Device UUID : a8499a91:628ddde8:1cc8f4b9:749136f9
Update Time : Sat May 19 23:04:23 2012
Checksum : 9950883c - correct
Events : 1
Device Role : spare
Array State : ('A' == active, '.' == missing)`
该 md 设备是 LVM 卷组的物理卷的一部分。
我正在尝试使用 mdadm --create --assume-clean 重新创建阵列,并使用 1 个缺失的设备。我正在通过检查所创建设备的 UUID 来检查设备是否正确创建,如果设备正确创建,则 UUID 将匹配。
我尝试了几种我认为正确的磁盘顺序组合,但我觉得我被这样一个事实绊住了:我用来创建这个 md 设备的 mdadm 是 2.x 系列,而现在使用的是 3.x(我可能最初使用了一些我不记得的默认值)所有“默认值”在各个版本中都发生了哪些变化,以便我可以尝试这些?比如块大小?我们可以手动配置超级/数据偏移量吗?当我们执行 mdadm --create --assume-clean 时,这些是否重要?
谢谢,Anshu
答案1
尽管在最好的情况下,mdadm 应该能够在组装或检查时检测你的超级块格式版本,但你可以尝试使用-e 0.90
mdadm 的参数明确指定较旧的超级块格式版本,然后看看会发生什么- 检查对此有话要说。
这超级块偏移量具有硬编码位置与设备末端(在您的情况下为分区)有关,如果设备末端已被移动(即通过更改分区大小或将原始复制到更大的磁盘),mdadm 将无法找到正确的副本。
看起来您的超级块也有点混乱了 - 如果是这种情况,您将无法在没有手动操作的情况下“组装”。您应该检查所有驱动器是否有有效的超级块 - 某个地方可能有副本,这将为您在重建 MD 阵列时省去大量的反复试验。
恢复的一般方法是使用mdadm --build
64K 的块大小(旧的 mdraid 默认值,后来更改为 512K)、设备数量和假定的 RAID 级别作为常量参数,并打乱设备顺序,除非您获得一个有效的文件系统。不用说,您应该使用副本这样您就不会通过发出不专业的命令而不可逆转地更改数据。