硬重启后,我的 raid10 阵列(由 4 个磁盘分区组成)无法重新组装。经过多次尝试,我尝试了“核”选项,将超级块归零,然后使用以下选项重新创建阵列--assume-clean
:
% cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [linear] [multipath]
md3 : active raid10 sda4[0] sdd4[3] sdc4[2] sdb4[1]
951117824 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 0/8 pages [0KB], 65536KB chunk
% mdadm --zero-superblock /dev/sd[abcd]4
% mdadm --create /dev/md3 --level=raid10 --raid-devices=4 --assume-clean /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4
这“有效”,但重新启动 LVM 后无法找到 /dev/md3 上的任何 LVM 分区,这可能意味着阵列未正确重新创建。
由于磁盘分区的呈现顺序mdadm --create
很重要,我编写了一个小脚本,按照 sda4、sdb4、sdc4 和 sdd4 的顺序尝试了所有 24 种可能的排列,然后在每种情况下pvscan
(而不是重新启动!)查看是否实际检测到 md3 上的 LVM 物理卷,即:
mdadm --stop /dev/md3
mdadm --create --assume-clean /dev/md3 --level=10 --raid-devices=4 /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4
pvscan
mdadm --stop /dev/md3
mdadm --create --assume-clean /dev/md3 --level=10 --raid-devices=4 /dev/sda4 /dev/sdb4 /dev/sdd4 /dev/sdc4
pvscan
mdadm --stop /dev/md3
mdadm --create --assume-clean /dev/md3 --level=10 --raid-devices=4 /dev/sda4 /dev/sdc4 /dev/sdb4 /dev/sdd4
pvscan
......
不幸的是,pvscan
从未检测到 md3 上的 LVM 卷,尽管我不确定它是否能够对突然激活的 RAID 阵列执行此操作...此外,/dev/md3 上没有非 LVM 分区可供我尝试直接挂载进行测试。
我发现有几种情况,人们能够在对磁盘进行零超级块处理后重新组装阵列,例如创建新阵列后恢复 RAID 5 数据,而不是重新使用或者mdadm 已重新启动,阵列丢失?无法组装?。这让我充满希望,除非在硬重启期间阵列真的被损坏了,否则有办法恢复该阵列,在这种情况下,我希望确切地知道。提前感谢任何建议!