如何在另一台机器上作为 mdadm raid 1 一部分的磁盘上挂载/恢复数据?

Ada*_*dam 20 software-raid ubuntu mount data-recovery

一些背景

  • 磁盘本身是由朋友“处理”的,据说仍然完好无损,仍然可以安装/恢复
  • 该磁盘是 Ubuntu 12.04 上软件 raid 1 的一部分
  • 原始raid 1中的另一个磁盘被格式化并用于其他目的,使当前磁盘(有问题的磁盘)在技术上仍然是不再存在的raid的一部分

我已经尝试过的

  • 基本安装

    • 我向 fstab 添加了一个条目,将磁盘标记为 ext3/ext4 并尝试挂载。
    • 安装时出现以下错误

      wrong fs type, bad option, bad superblock on

    • 并在dmesg

      EXT4-fs (sdc1): VFS: Can't find ext4 filesystem

  • 我试图找到磁盘的文件系统类型并想出了

    $sudo file -s /dev/sdc
    /dev/sdc: x86 boot sector; partition 1: ID=0x83, starthead 254, startsector 63, 1953520002 sectors, code offset 0xb8

我需要帮助的地方/我的问题

  • 有没有办法在不损坏数据的情况下将磁盘转换为ext4?
  • 有没有简单的方法挂载Linux 83文件类型的磁盘并恢复数据?
  • 我有另一个磁盘当前可用,以防有可能以某种方式重建突袭
  • 我的主要目标是从磁盘恢复数据。我对所有选择持开放态度。

更新

一些命令的输出

  • fdisk -l /dev/sdc

    $fdisk -l /dev/sdc

    Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
    255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0005ed9c

    Device Boot Start End Blocks Id System
    /dev/sdc1 63 1953520064 976760001 83 Linux

  • 文件 -s /dev/sdc1

    $file -s /dev/sdc1
    /dev/sdc1: data

  • hexdump -C -n 32256 /dev/sdc(不确定这是否有帮助)

    $hexdump -C -n 32256 /dev/sdc`
    00000000  fa b8 00 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |................|
    00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
    00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
    00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001b0  00 00 00 00 00 00 00 00  9c ed 05 00 00 00 00 fe  |................|
    000001c0  ff ff 83 fe ff ff 3f 00  00 00 82 59 70 74 00 00  |......?....Ypt..|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00007e00
    
    Run Code Online (Sandbox Code Playgroud)

小智 16

这在 Ubuntu 14.04 中运行良好:

sudo -i
mdadm --assemble --scan
Run Code Online (Sandbox Code Playgroud)

你会得到:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)
Run Code Online (Sandbox Code Playgroud)

然后挂载并查看您的文件:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 7

Linux mdraid 有几种元数据格式。格式 0.9 和 1.0 将元数据放在包含设备的末尾,有效负载(文件系统)从设备的开头开始,可以直接访问,无需通过 RAID 层。格式 1.1 和 1.2 分别将元数据放在包含设备的中间和开头,因此有效负载处于偏移量。

Ubuntu 安装程序使用 1.2 元数据格式创建卷,因此您的数据在元数据之后而不是在设备的开头开始。

访问该数据的最简单方法是组装raid 设备。在 RAID-1 卷中,单个设备就足够了。

madadm -A /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

(停在这里,除非你喜欢痛苦。)

您还可以访问偏移量的数据。我认为这样做的唯一一点是,如果您必须在不支持 1.x mdraid 格式的非常旧的内核中工作。首先,确定偏移量mdadm -E /dev/sdc1:寻找线Data Offset : SSS sectors。一个 mdadm 扇区是 512 字节。

sectors=$(mdadm -E /dev/sdc1 | awk -F: '$1 ~ /Data offset/ {print $2}')
bytes=$(($sectors * 512))
losetup -f -o $bytes /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

无奈之下,对于 1.x 格式,数据偏移量存储在元数据的 128-135 字节中,little-endian¹。1.2 元数据是设备开始后的 4096 字节。

您还可以更改分区表以使其进一步启动。对你的算术非常小心。仅当您想在无法访问 raid 设备的旧系统中长期使用磁盘时才这样做。

¹还是平台字节序?我不知道。

  • `mdadm -A /dev/sdc1` 输出 `mdadm: device /dev/sdc1 存在但不是 md 数组。` 我更进一步使用 mdadm 并查看是否有任何其他信息...... `mdadm --misc --examine /dev/sdc1` 输出 `mdadm: 在 /dev/sdc1.` 上没有检测到 md 超级块。有没有办法可以重写这个磁盘上的超级块以将其标记为可用于 RAID 组装的磁盘? (3认同)

Ada*_*dam 6

令我惊讶的是,我能够/能够通过简单地使用最重要的.

在这里得到的帮助是无价的。在尝试了各种建议的组合以及我自己的混合之后,理想的方法(正常安装和使用磁盘)似乎不再是一种选择。在这种情况下,诉诸数据恢复是我的解决方案。


psu*_*usi 5

您似乎已经消除了 mdadm 超级块。如果它曾经存在并且格式为 1.1 或 1.2,则文件系统很可能位于偏移量 2048 扇区。您可以运行e2fsck /dev/sdc1?offset=2048以强制它从该偏移量开始查找文件系统。如果找到它,那么您可以修改分区表以指向文件系统实际启动的位置。您可以使用parted /dev/sdcunit s命令来使用扇区单位。 print表中,记下开始和结束扇区,然后是rm分区,然后重新创建它并mkpart使用相同的结束扇区,但将偏移量添加到开始扇区。

如果 2048 不起作用,您也可以尝试 1985。