mdadm + lvm2:意外破坏了所有超级块

mdadm + lvm2:意外破坏了所有超级块

我不小心用垃圾覆盖了所有 RAID1 超级块。我认为发生这种情况是因为当 Ubuntu 将我置于某种硬盘恢复模式时,我按 ALT-CTRL-DEL 启动了。我的显示器无法工作,我“盲目”地这样做了。

查看我的 RAID 分区,我看到以下内容:

# mdadm --examine /dev/sdc2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 00000000:00000000:00000000:00000000
  Creation Time : Fri Nov  1 18:59:05 2013
     Raid Level : -unknown-
   Raid Devices : 0
  Total Devices : 1
Preferred Minor : 127

    Update Time : Fri Nov  1 18:59:05 2013
          State : active
 Active Devices : 0
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 1
       Checksum : 6b1f0d22 - correct
         Events : 1


      Number   Major   Minor   RaidDevice State
this     0       8       34        0      spare   /dev/sdc2

   0     0       8       34        0      spare   /dev/sdc2

很明显,超级块已被垃圾完全覆盖。两个磁盘(sdb2、sdc2)看起来相同,信息是垃圾,uuid 全部为零,raid 级别:未知,raid 设备:0 等。

我最好的选择是:

mdadm --create --assume-clean --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc2

我可以像这样使用 mdadm --create 重新创建 RAID 阵列吗?

在 RAID 堆栈上,我有一个 LVM2 物理卷。我能否以某种方式从各个磁盘或备份磁盘映像访问我的 LVM2 数据?

GRUB 能够从磁盘找到我的 initrd 和内核映像,/boot 位于 LVM2 之上的 ext4 根分区文件系统上,它不是一个单独的分区。所以我相信数据基本完好,超级块已经消失了。

编辑:将 --assume-clean 添加到 mdadm 命令行

答案1

如果它是0.90超级块格式,您应该能够直接使用成员(如果您愿意,可以在只读模式下)。这样您就可以访问数据,然后您可以仅使用另一个磁盘创建一个新的 RAID-1,复制数据,然后将原始磁盘添加到 RAID。

如果是其他东西(例如1.2元数据),您首先必须找到实际分区的偏移量,然后才能安装它。例如,如果是 LVM,您将得到如下偏移量:

# grep -a -b --only-matching LEVELONE /dev/disk
1049088:LABELONE

减去 512,因为 PV 上的第一个扇区是空闲的;如果它实际上是0.901.0元数据,那么 grep 应该显示 512: 相反,这意味着0;的实际偏移量。如果你得到更大的东西,你的 RAID 正在使用其他格式。

在这种情况下,您可以创建具有正确偏移量的循环设备:

# losetup -f --show --read-only --offset $((1049088-512)) /dev/disk
/dev/loop0
# file -s /dev/loop0
LVM2 ...

这应该是你的 PV 和vgscan/vgchange -a y应该处理其余的事情。


至于mdadm --create,如果你知道自己在做什么,就可以做到。你必须非常非常小心地对待它。这只是最后的手段。

如果偏移量是0确保您使用0.90元数据(如果您确定这就是您正在使用的);如果偏移量是其他的,请确保mdadm --create将再次使用相同的偏移量。它mdadm的默认值通常不会随着时间的推移而改变。因此,直接在命令行上使用 指定它--data-offset

另外,只使用一个磁盘创建它。将另一个磁盘保留为missing。这是一种更好的方法,--assume-clean因为您可以先检查创建是否成功(设备上的数据是否/dev/md?可用?),然后正确同步另一个磁盘。

相关内容