首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用mdadm修复两个RAID1磁盘上丢失的超级块

使用mdadm修复两个RAID1磁盘上丢失的超级块
EN

Unix & Linux用户
提问于 2022-04-28 06:44:39
回答 1查看 1.3K关注 0票数 2

我的RAID1数组在/dev/md128上运行良好,但在重新启动后似乎完全消失了,mdadm报告说这两个磁盘都缺少超级块。我的问题是如何解决这个问题?

背景:系统运行CentOS 7。有2xSSD (sdasdb)和2xHDD (sdcsdd)。应该有一个由RAID1和sdd组成的/dev/md128数组,但是什么也没有出现。在重新启动内核更新之前,它一直工作得很好。

数组未在/etc/mdadm.conf中列出:

代码语言:javascript
运行
复制
# 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

尝试手动组装数组:

代码语言:javascript
运行
复制
# 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两种驱动器的备件在手边。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-04-30 05:07:46

我把这个修好了,为了其他人的利益,这就是对我有用的东西。我是通过将其中一个RAID1磁盘挂载到数组之外来实现的。请小心,在开始之前,先取一份磁盘的副本。在我的例子中,RAID1包含一个LVM物理卷。

  1. 使用其中一个磁盘创建一个新数组,
代码语言:javascript
运行
复制
mdadm --create /dev/md128 --raid-devices=2 --level=1 /dev/sdc1 missing
  1. 重新创建LVM结构。您可以手动完成此操作,也可以通过自动备份进行还原:
代码语言:javascript
运行
复制
pvcreate vg00 /dev/md128
vgcfgrestore --list vg00
vgcfgrestore --force -f /etc/lvm/backup/vg00 vg00
  1. 重命名卷组(临时):
代码语言:javascript
运行
复制
vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00new
  1. 在另一个磁盘上查找文件系统的启动。我在/etc/mdadm.conf中没有任何东西,所以我无法很容易地获得这些信息。因此,我只是查找文件系统签名:
代码语言:javascript
运行
复制
grep -a -b -o LABELONE /dev/sdd1

签名在LVM规范中描述,该文档告诉我们它存储在第二个扇区中。我的扇区是512字节,所以我从上面返回的数字中减去512,然后创建一个只读循环设备:

代码语言:javascript
运行
复制
losetup -f /dev/sdd1 --read-only -o 134217728
  1. 扫描循环设备上的LVM数据:
代码语言:javascript
运行
复制
vgscan
lvscan

lsblklvdisplay这样的命令现在应该在vg00vg00new中显示卷。检查设备是否存在于/dev/vg00中,如果没有激活卷,lvchange -a y vg00/

  1. 将数据复制到RAID1。可以通过安装和cp完成,
代码语言:javascript
运行
复制
mkdir /data/old
mount -t  /dev/vg00/ /data/old
cp -pr /data/old/* /data/current/

或者,根据您的数据,您可能希望对每个逻辑卷使用dd

代码语言:javascript
运行
复制
dd if=/dev/vg00/vol1 of=/dev/vg00new/vol1 bs=1M conv=sparse

请注意,conv=sparse对于瘦配置LV非常重要,因为它避免了空间的完全分配。

  1. 现在循环装置可以断开,
代码语言:javascript
运行
复制
lvchange -a n vg00/
losetup -d loop0
  1. 这将使您只能在/dev/md128上使用D51,请与lsblk检查。将VG重命名为原来的名称:
代码语言:javascript
运行
复制
vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00

最后,在100%确保所有内容都被复制和正确工作并完成需要执行的任何fsck之后,将/dev/sdd1添加回RAID1数组。

代码语言:javascript
运行
复制
mdadm --manage /dev/md128 --add /dev/sdd1

@frostschutz用于解决方案的本质,在https://unix.stackexchange.com/a/98803/384096上找到

我仍然不知道这个问题是怎么发生的,这有点令人担心,但至少这个问题又开始了。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/700684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档