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

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

一些背景

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

我已经尝试过了

  • 基本安装

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

      wrong fs type, bad option, bad superblock on

    • 并且在消息

      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文件类型磁盘并恢复数据?
  • 我目前还有另一个空闲磁盘,以防有可能以某种方式重建 raid
  • 我的主要目标是从磁盘恢复数据。我对所有选择持开放态度。

更新

一些命令的输出

  • 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
    

答案1

这在 Ubuntu 14.04 中运行得非常好:

sudo -i
mdadm --assemble --scan

你会得到:

mdadm: /dev/md/1 has been started with 1 drive (out of 2)

然后安装并查看您的文件:

cd /mnt && mkdir to-restore-md1 && mount /dev/md1 to-restore-md1
ls -la to-restore-md1

答案2

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

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

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

madadm -A /dev/sdc1

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

您还可以按偏移量访问数据。我认为这样做的唯一一点是,如果您必须在不支持 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

无奈之下,在 1.x 格式中,数据偏移量存储在元数据的第 128-135 字节中,即小端优先。 1.2 元数据是设备开始后的 4096 字节。

您还可以更改分区表以使其进一步启动。算术时要非常小心。仅当您想在无法访问 RAID 设备的旧系统中长期使用该磁盘时,才需要执行此操作。

或平台字节顺序我不知道。

答案3

令我惊讶的是,我能够通过简单地使用来恢复数据最重要的

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

答案4

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

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

相关内容