我的RAID1数组在/dev/md128
上运行良好,但在重新启动后似乎完全消失了,mdadm
报告说这两个磁盘都缺少超级块。我的问题是如何解决这个问题?
背景:系统运行CentOS 7。有2xSSD (sda
,sdb
)和2xHDD (sdc
,sdd
)。应该有一个由RAID1和sdd
组成的/dev/md128
数组,但是什么也没有出现。在重新启动内核更新之前,它一直工作得很好。
数组未在/etc/mdadm.conf
中列出:
# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all
ARRAY /dev/md/boot level=raid1 num-devices=2 UUID=a2f6b6fe:31c80062:67e7a858:a21502a9
ARRAY /dev/md/boot_efi level=raid1 num-devices=2 UUID=ffbc39c9:ff982933:b77aece5:b44bec5f
ARRAY /dev/md/root level=raid1 num-devices=2 UUID=b31f6af6:78305117:7ca807e7:7691d745
ARRAY /dev/md/swap level=raid0 num-devices=2 UUID=f31db9e8:e136e642:1ae8f2d0:7178c956
尝试手动组装数组:
# mdadm --verbose --assemble /dev/md128 /dev/sdc1 /dev/sdd1
mdadm: looking for devices for /dev/md128
mdadm: no recogniseable superblock on /dev/sdc1
mdadm: /dev/sdc1 has no superblock - assembly aborted
# mdadm -E /dev/sdc1
mdadm: No md superblock detected on /dev/sdc1.
# mdadm -E /dev/sdd1
mdadm: No md superblock detected on /dev/sdd1.
检查过的其他内容:smartctl
没有显示错误(这两个驱动器都有3个月的历史,并且很少使用),mdadm -E /dev/sdc
在设备级别没有显示任何超级块。恢复到较旧的内核,没有任何更改。我很乐意添加其他的输出,只是不想让问题变得不必要的冗长。
任何想法都值得赞赏!在此期间,我计划dd
两种驱动器的备件在手边。
发布于 2022-04-30 05:07:46
我把这个修好了,为了其他人的利益,这就是对我有用的东西。我是通过将其中一个RAID1磁盘挂载到数组之外来实现的。请小心,在开始之前,先取一份磁盘的副本。在我的例子中,RAID1包含一个LVM物理卷。
mdadm --create /dev/md128 --raid-devices=2 --level=1 /dev/sdc1 missing
pvcreate vg00 /dev/md128
vgcfgrestore --list vg00
vgcfgrestore --force -f /etc/lvm/backup/vg00 vg00
vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00new
/etc/mdadm.conf
中没有任何东西,所以我无法很容易地获得这些信息。因此,我只是查找文件系统签名:grep -a -b -o LABELONE /dev/sdd1
签名在LVM规范中描述,该文档告诉我们它存储在第二个扇区中。我的扇区是512字节,所以我从上面返回的数字中减去512,然后创建一个只读循环设备:
losetup -f /dev/sdd1 --read-only -o 134217728
vgscan
lvscan
像lsblk
和lvdisplay
这样的命令现在应该在vg00
和vg00new
中显示卷。检查设备是否存在于/dev/vg00
中,如果没有激活卷,lvchange -a y vg00/
。
cp
完成,mkdir /data/old
mount -t /dev/vg00/ /data/old
cp -pr /data/old/* /data/current/
或者,根据您的数据,您可能希望对每个逻辑卷使用dd
,
dd if=/dev/vg00/vol1 of=/dev/vg00new/vol1 bs=1M conv=sparse
请注意,conv=sparse
对于瘦配置LV非常重要,因为它避免了空间的完全分配。
lvchange -a n vg00/
losetup -d loop0
/dev/md128
上使用D51
,请与lsblk
检查。将VG重命名为原来的名称:vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00
最后,在100%确保所有内容都被复制和正确工作并完成需要执行的任何fsck
之后,将/dev/sdd1
添加回RAID1数组。
mdadm --manage /dev/md128 --add /dev/sdd1
@frostschutz用于解决方案的本质,在https://unix.stackexchange.com/a/98803/384096上找到
我仍然不知道这个问题是怎么发生的,这有点令人担心,但至少这个问题又开始了。
https://unix.stackexchange.com/questions/700684
复制相似问题