我最近将一台服务器从 Fedora 6 升级到了 Fedora 14。除了安装操作系统的主硬盘之外,我还通过软件配置了 3 个 1TB 硬盘,用于 RAID5。升级后,我注意到其中一个硬盘已从 RAID 阵列中移除。我尝试使用 mdadm --add 将其添加回来,但它只是将其作为备用硬盘放入。我想我稍后再回来处理它。
然后,在执行重新启动时,系统根本无法安装 raid 阵列。我将其从 fstab 中删除,以便可以启动系统,现在我正尝试恢复 raid 阵列。
我运行了以下命令:
mdadm --create /dev/md0 --assume-clean --level=5 --chunk=64 --raid-devices=3 missing /dev/sdc1 /dev/sdd1
我知道我的块大小是 64k,“丢失”是指被踢出阵列的驱动器(/dev/sdb1)。
这似乎起了作用,并且 mdadm 报告阵列在缺少驱动器的情况下“干净、降级”地运行。
但是,我无法安装 RAID 阵列。当我尝试:
mount -t ext3 /dev/md0 /mnt/foo
我得到:
mount: wrong fs type, bad option, bad superblock on /dev/md0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
/var/log/messages 显示:
EXT3-fs (md0): error: can't find ext3 filesystem on dev md0.
有人知道下一步该尝试什么吗?
答案1
您可能将missing
驱动器放在了错误的位置。只有驱动器的位置正确,missing
才会起作用。只需运行:
mdadm --examine /dev/sdb1
这将输出(除其他信息外)RAID 中的编号是真的缺失。查找以下this
行:
Number Major Minor RaidDevice State
this 0 253 13 0 active sync /dev/dm-13
在本例中,它是 0 号(=第一个设备),active
因为我的 RAID 现在在线。现在你知道应该指定哪个驱动器了missing
。
但你仍然有两个选择:在职的驱动器可能也需要更换。但是,这些信息会丢失,因为它被您的重新组装尝试覆盖了。
答案2
我发现,mdadm --create /dev/md0 --assume-clean
只有使用与创建原始阵列时相同(或接近)的 mdadm 版本,才能正常工作。这是因为它们对数据和元数据使用不同的偏移量,即使超级块版本相同(如 1.2)
问题是 mdadm 输出总是说它重新创建了阵列,但是 /dev/md0 中包含的数据是错误的。
例如,使用最新的 mdadm 3.3.2 甚至之前的 3.2.5 对我来说不起作用,但回退到 mdadm 3.1.4(创建了数组)就可以了。
请注意,在重新创建阵列时,我还注意按正确的顺序指定驱动器(如中所述mdadm --examine /dev/sd?
),并使用覆盖文件进行所有测试(以免增加损坏),使用说明https://raid.wiki.kernel.org/index.php/Recovering_a_failed_software_RAID
在我的例子中,问题出在 6 磁盘 RAID5 上,它正在扩展到 7 磁盘,但它根本没有进展,所以被中止了,并且不会再组装mdadm: Failed to restore critical section for reshape, sorry.
,并且--force
和--invalid-backup
也没有帮助,所以我不得不使用--create --assume-clean