AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 700684
Accepted
tater
tater
Asked: 2022-04-28 22:44:39 +0800 CST2022-04-28 22:44:39 +0800 CST 2022-04-28 22:44:39 +0800 CST

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

  • 772

我的 RAID1 阵列工作正常,/dev/md128但在重新启动后似乎完全消失了,mdadm报告两个磁盘都缺少超级块。我的问题是如何解决这个问题?

背景:运行 CentOS 7 的系统。有 2xSSD ( sda, sdb) 和 2xHDD ( sdc, sdd)。应该有一个 RAID1 阵列,/dev/md128但没有显示。在重新启动以进行内核更新之前,它一直运行良好。sdcsdd

未列出的数组/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两个驱动器都放在手头上。

raid mdadm
  • 1 1 个回答
  • 328 Views

1 个回答

  • Voted
  1. Best Answer
    tater
    2022-04-30T21:07:46+08:002022-04-30T21:07:46+08:00

    我解决了这个问题,为了其他人的利益,这对我有用。我通过在阵列外部安装一个 RAID1 磁盘来做到这一点。小心,在开始之前复制磁盘。在我的例子中,RAID1 包含一个 LVM 物理卷。

    1. 使用其中一个磁盘创建一个新阵列,
    mdadm --create /dev/md128 --raid-devices=2 --level=1 /dev/sdc1 missing
    
    1. 重新创建 LVM 结构。您可以手动执行此操作或从自动备份中恢复:
    pvcreate vg00 /dev/md128
    vgcfgrestore --list vg00
    vgcfgrestore --force -f /etc/lvm/backup/vg00 vg00
    
    1. 重命名卷组(临时):
    vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00new
    
    1. 在另一个磁盘上找到文件系统的开始。我没有任何东西,/etc/mdadm.conf所以我无法轻易获得这些信息。所以我只是寻找文件系统签名:
    grep -a -b -o LABELONE /dev/sdd1
    

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

    losetup -f /dev/sdd1 --read-only -o 134217728
    
    1. 扫描循环设备上的 LVM 数据:
    vgscan
    lvscan
    

    lsblk和之类的命令现在应该在和lvdisplay中显示卷。检查设备是否存在,如果不存在则激活卷,.vg00vg00new/dev/vg00lvchange -a y vg00/<volname>

    1. 将数据复制到 RAID1。可以通过安装和来完成cp,
    mkdir /data/old
    mount -t <fstype> /dev/vg00/<volname> /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 很重要,因为它避免了完全分配空间。

    1. 现在可以断开循环设备,
    lvchange -a n vg00/<volname>
    losetup -d loop0
    
    1. 这应该只留下你vg00new,/dev/md128检查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找到

    我仍然不知道问题是如何发生的,这有点令人担忧,但至少这让它再次运行。

    • 2

相关问题

  • Linux raid 重启后消失

  • 可以识别RAID配置的linux +工具[重复]

  • 如何识别是否在 OS 磁盘上配置了 raid1 或 raid 镜像

  • 在这种情况下,在 fstab 中配置 UUID 会出现问题

  • 物理链路 (Phys) 和 HDD 插槽

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve