从 RAID 1 成员恢复数据

从 RAID 1 成员恢复数据

我正在尝试从 RAID1 中的一个驱动器中恢复数据。首先介绍一些背景知识。

RAID1 由 2 个磁盘(/dev/sde/dev/sdf)组成。它是大约 6 年前使用 mdadm 构建的。最近几个月,mdadm 和 mdstat 开始报告 RAID 已降级:


$ sudo /sbin/mdadm --detail /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Tue Nov 29 11:41:44 2016
        Raid Level : raid1
        Array Size : 2930135488 (2794.39 GiB 3000.46 GB)
     Used Dev Size : 2930135488 (2794.39 GiB 3000.46 GB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Jul 3 07:39:36 2022
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : k2:0  (local to host k2)
              UUID : 4b8ef2c5:0f0e077b:a188f0e1:4c98a3dc
            Events : 85310

    Number   Major   Minor   RaidDevice State
       0       8       80        0      active sync   /dev/sdf
       -       0        0        1      removed

$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0]
      2930135488 blocks super 1.2 [2/1] [U_]
      bitmap: 19/22 pages [76KB], 65536KB chunk

unused devices: <none>

为了修复 RAID,我只需重新添加丢失的驱动器:

$ sudo mdadm /dev/md0 --re-add /dev/sde

在过去的几个月里,我多次运行过这个命令,没有任何问题。mdadm 可以正常运行几个星期,然后它会报告状态下降,然后我重新添加磁盘。

不幸的是,前几天,当我尝试重新添加磁盘时,出现大量错误,并且 RAID 无法启动。

因此目前,我有 2 个不属于任何 RAID 的磁盘:

  • 磁盘 1 是“更健康”的磁盘(未从 RAID 中删除的磁盘),具有最新的数据。
  • 磁盘 2 是从 RAID 中删除的磁盘,可能存在问题,并且由于 RAID 性能下降了几个星期,因此该磁盘已经有几周没有更新了。

我在新机箱上用全新的磁盘创建了全新的 RAID1。我想将数据从更健康、更新的磁盘(磁盘 1)传输到新的 RAID 上。我将磁盘 1 插入新机箱,但无论如何,我似乎无法安装该磁盘。

磁盘 1 目前位于/dev/sdb新盒子上。以下是fdiskgdisk的报告。

$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: ST3000DM001-1ER1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 98416A55-4676-458F-8130-2E221561239D

Device      Start        End    Sectors  Size Type
/dev/sdb1      34       2081       2048    1M Microsoft LDM metadata
/dev/sdb2    2082     262177     260096  127M Microsoft reserved
/dev/sdb3  262178 5860533134 5860270957  2.7T Microsoft LDM data

Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.

$ sudo gdisk -l /dev/sdb

GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 5860533168 sectors, 2.7 TiB
Model: ST3000DM001-1ER1
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 98416A55-4676-458F-8130-2E221561239D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2081   1024.0 KiB  4201  LDM metadata partition
   2            2082          262177   127.0 MiB   0C01  Microsoft reserved ...
   3          262178      5860533134   2.7 TiB     4200  LDM data partition

“LDM 数据分区”标签很奇怪。时间太久了,我记不清从哪里得到这个磁盘了,但这绝对是 RAID1 中状况较好的磁盘。

无论如何,我尝试使用显而易见的方法安装驱动器:

$ sudo mount /dev/sdb /mnt/hdd
mount: /mnt/hdd: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.

$ sudo mount /dev/sdb3 /mnt/hdd
mount: /mnt/hdd: wrong fs type, bad option, bad superblock on /dev/sdb3, missing codepage or helper program, or other error.

接下来,我探测磁盘以查看其上有什么类型的文件系统:

$ sudo fsck -N /dev/sdb
[/usr/sbin/fsck.ext2 (1) -- /dev/sdb] fsck.ext2 /dev/sdb

我尝试了使用 -t 选项(例如 -t ext2 和 -t ext4)和 sdb[1-3] 的各种组合的 mount 命令,但没有成功。

我也尝试使用该磁盘创建一个新的 RAID,但没有成功。

$ sudo mdadm --assemble --readonly /dev/md1 /dev/sdb
mdadm: Cannot assemble mbr metadata on /dev/sdb
mdadm: /dev/sdb has no superblock - assembly aborted

没有超级块值得担心。我只能想象,当我前几天尝试重新添加丢失的驱动器时,它被吹走了(见上文)。

由于磁盘标签提到了 LDM,我认为我可以尝试 ldmtool:

$ sudo ldmtool create all
[]

我现在有点不知所措。一个想法是使用 dd 将磁盘克隆到我的新 RAID 上。由于 RAID 是 ext4 文件系统,也许 dd 会复制我可以使用的数据?也许像这样?

$ sudo dd if=/dev/sdb3 of=/dev/md0 bs=100M conv=sync,noerror status=progress

关于如何将数据从磁盘 1 传输到新的 RAID,还有其他想法/建议吗?

答案1

根据@Terrance的建议,我安装了TestDisk。它能够访问旧的RAID分区并恢复文件。我发布了一些截图供参考。

选择磁盘:

选择磁盘

选择分区:

选择分区

选择分区后,我就可以列出文件并将文件复制到新磁盘。复制目录产生了一些意外结果,所以我不得不选择单个文件。总而言之,它运行良好,我能够从旧的 RAID 1 磁盘恢复所有文件。

相关内容