从 Linux Raid1 成员磁盘恢复文件 - 尽可能糟糕

从 Linux Raid1 成员磁盘恢复文件 - 尽可能糟糕

我希望你一切都好。

我在一家 IT 公司担任技术人员,专注于 Windows 系统和云技术,因此遗憾的是我对 Linux 的了解非常有限。所以请原谅任何愚蠢的问题,但我会尽力提供帮助。另外,这是我第一次在这里发帖,所以如果我做错了什么,请告诉我。

故事是这样的:一位新客户打电话说他的服务器无法访问 -> 服务器已损坏(电源和主板损坏,即使使用新 PS,甚至没有 POST 蜂鸣声)。他以前的IT公司是一个人秀,他不幸去世了,所以没有得到那边的帮助。

服务器是一台已有 15 年历史的富士通,嵌入了 LSI 逻辑 RAID。在里面我们发现 2 个 2TB SATA HDD 连接到 MB。他的所有数据以及软件数据库文件都在此服务器上。当然没有备份..他不需要备份,因为一切都是镜像的..你知道。客户还表示,服务器操作系统是在 2-3 年前安装的。

因此,我开始使用一些恢复工具,例如 Diskinternals RAID Recovery,但这些工具并没有真正发挥作用。我只得到单个文件(其中一些是功能文档,因此磁盘本身似乎没问题),但没有文件夹等。要将客户的软件恢复到另一个系统,我们需要一个完整的文件夹、子文件夹和文件。

但我发现文件和文件夹只存在于 Linux 系统上。所以我认为之前的技术人员安装了Linux操作系统并为客户设置了网络共享。

因此,我将其中一个 Raid 成员磁盘的转储文件拉到另一个 HDD 上,并设置一台 Debian 机器进行进一步测试。我仍然不确定他是否设置了 linux / mdadm Raid 或者他是否使用板载 LSI Raid 控制器来完成此操作。

到目前为止,我还没有安装或重新组装磁盘。任何帮助将不胜感激。

  • mount /dev/sdb /mnt/mountpoint 带来错误 FS 错误、选项错误、超级块损坏
  • 磁盘在 /dev/ 中未显示为 md

lsblk:

sdb      8:16   0   1,8T  0 disk 
├─sdb1   8:17   0   240G  0 part 
└─sdb2   8:18   0   1,6T  0 part

fdisk -l

Festplatte /dev/sdb: 1,82 TiB, 2000398934016 Bytes, 488378646 Sektoren
Festplattenmodell: EFAX-68FB5N0    
Einheiten: Sektoren von 1 * 4096 = 4096 Bytes
Sektorgröße (logisch/physikalisch): 4096 Bytes / 4096 Bytes
E/A-Größe (minimal/optimal): 4096 Bytes / 4096 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x87c99aec

Gerät      Boot     Anfang       Ende   Sektoren Größe Kn Typ
/dev/sdb1  *          2048   62916607   62914560  240G fd Linux RAID-Autoerkennung
/dev/sdb2         62916608 3897729167 3834812560 14,3T fd Linux RAID-Autoerkennung
/dev/sdb3       3897729168 3907029167    9300000 35,5G fd Linux RAID-Autoerkennung

mdadm --query /dev/sdb

/dev/sdb: is not an md array

mdadm--组装--扫描

mdadm: No arrays found in config file or automatically

mdadm --检查 /dev/sdb

mdadm: No md superblock detected on /dev/sdb

预先感谢您提供任何帮助或提示,KofftheHoff

编辑1:

使用后

losetup --find --show --read-only --sector-size 512 --partscan /dev/sdb

mdadm --examine /dev/loop*

我觉得这个看起来很有希望:

/dev/loop0:
   MBR Magic : aa55
Partition[0] :     62914560 sectors at         2048 (type fd)
Partition[1] :   3834812560 sectors at     62916608 (type fd)
Partition[2] :      9300000 sectors at   3897729168 (type fd)
/dev/loop0p1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 7e3b9767:71d0e46d:6fe589d3:47671ff3
           Name : schobert-fs:0
  Creation Time : Wed Mar 27 18:49:49 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 62881792 (29.98 GiB 32.20 GB)
     Array Size : 31440896 (29.98 GiB 32.20 GB)
    Data Offset : 32768 sectors
   Super Offset : 8 sectors
   Unused Space : before=32680 sectors, after=0 sectors
          State : clean
    Device UUID : 34f9240c:3f35c4a9:b20f6259:5a6a295e

    Update Time : Fri Dec  2 16:10:26 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 9882cebb - correct
         Events : 430


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/loop0p2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 1c73d398:e5404786:1cba7820:fb5e4cd5
           Name : schobert-fs:1
  Creation Time : Wed Mar 27 18:50:09 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 3834550416 (1828.46 GiB 1963.29 GB)
     Array Size : 1917275200 (1828.46 GiB 1963.29 GB)
  Used Dev Size : 3834550400 (1828.46 GiB 1963.29 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=16 sectors
          State : clean
    Device UUID : 038f5d97:741a9a29:c4803eec:d5502d4b

Internal Bitmap : 8 sectors from superblock
    Update Time : Wed Nov 30 10:19:49 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 5dcb018a - correct
         Events : 12662


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/loop0p3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 00bd818b:55eed0df:3ad0c7d3:0c7a3a97
           Name : schobert-fs:2
  Creation Time : Wed Mar 27 18:50:31 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 9291808 (4.43 GiB 4.76 GB)
     Array Size : 4645888 (4.43 GiB 4.76 GB)
  Used Dev Size : 9291776 (4.43 GiB 4.76 GB)
    Data Offset : 8192 sectors
   Super Offset : 8 sectors
   Unused Space : before=8104 sectors, after=32 sectors
          State : clean
    Device UUID : 1577f59e:d2022fbc:d0b79765:f127efbc

    Update Time : Wed Nov 30 00:01:49 2022
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : dc81c5d0 - correct
         Events : 92


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
mdadm: No md superblock detected on /dev/loop1.
mdadm: No md superblock detected on /dev/loop2.
mdadm: No md superblock detected on /dev/loop3.
mdadm: No md superblock detected on /dev/loop4.
mdadm: No md superblock detected on /dev/loop5.
mdadm: No md superblock detected on /dev/loop6.
mdadm: No md superblock detected on /dev/loop7.
mdadm: cannot open /dev/loop-control: Invalid argument

感谢@frostschutz,也感谢拉取图像的提示。我现在正在使用转储的磁盘,原始磁盘保持不变。

@gabor.zed 这些不同的名称 schobert-fs:0 /schobert-fs:1 /schobert-fs:2 证明你的假设吗?或者 : 之后的数字只是一个标记,它在 raid 中是什么驱动器?

lsblk 现在带来了这个:

NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0   1,8T  1 loop 
├─loop0p1 259:0    0    30G  1 part 
├─loop0p2 259:1    0   1,8T  1 part 
└─loop0p3 259:2    0   4,4G  1 part

fdisk 现在看起来也很合理:

Festplatte /dev/loop0: 1,82 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x87c99aec

Gerät        Boot     Anfang       Ende   Sektoren Größe Kn Typ
/dev/loop0p1 *          2048   62916607   62914560   30G fd Linux RAID-Autoerkennung
/dev/loop0p2        62916608 3897729167 3834812560  1,8T fd Linux RAID-Autoerkennung
/dev/loop0p3      3897729168 3907029167    9300000  4,4G fd Linux RAID-Autoerkennung

我什至现在在 /dev/ 中列出了 3 个 md 设备

MD125 MD126 MD127

mdadm --query --detail  /dev/md126

/dev/md125:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:2
              UUID : 00bd818b:55eed0df:3ad0c7d3:0c7a3a97
            Events : 92

    Number   Major   Minor   RaidDevice

       -     259        2        -        /dev/loop0p3


mdadm --query --detail /dev/md126

/dev/md126:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:1
              UUID : 1c73d398:e5404786:1cba7820:fb5e4cd5
            Events : 12662

    Number   Major   Minor   RaidDevice

       -     259        1        -        /dev/loop0p2


mdadm --query --detail /dev/md127

/dev/md127:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 1
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 1

              Name : schobert-fs:0
          UUID : 7e3b9767:71d0e46d:6fe589d3:47671ff3
        Events : 430

Number   Major   Minor   RaidDevice

   -     259        0        -        /dev/loop0p1

md设备不能自己挂载吧?奇怪的是他说 md 设备是 Raid0。现在不知道该怎么办。

至少当我尝试时:

mount -o ro -t auto /dev/md125 /mnt/raid1

我得到:

mount: /mnt/raid1: Der Superblock von /dev/md125 konnte nicht gelesen werden.

无法读取超级块

我想我必须在访问它之前以某种方式组装突袭?

编辑2:@frostschutz 我按照要求运行:

file -s /dev/md*

/dev/md125: empty
/dev/md126: empty
/dev/md127: empty

blkid

/dev/sda1: UUID="ae7d369d-cf6b-4f84-a010-5d8a4c6fac80" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="248a7be6-01"
/dev/sda5: UUID="e49af320-e5fc-45fa-91b4-528b231f0bbd" TYPE="swap" PARTUUID="248a7be6-05"
/dev/sdb1: PARTUUID="87c99aec-01"
/dev/loop0p1: UUID="7e3b9767-71d0-e46d-6fe5-89d347671ff3" UUID_SUB="34f9240c-3f35-c4a9-b20f-62595a6a295e" LABEL="schobert-fs:0" TYPE="linux_raid_member" PARTUUID="87c99aec-01"
/dev/loop0p2: UUID="1c73d398-e540-4786-1cba-7820fb5e4cd5" UUID_SUB="038f5d97-741a-9a29-c480-3eecd5502d4b" LABEL="schobert-fs:1" TYPE="linux_raid_member" PARTUUID="87c99aec-02"
/dev/loop0p3: UUID="00bd818b-55ee-d0df-3ad0-c7d30c7a3a97" UUID_SUB="1577f59e-d202-2fbc-d0b7-9765f127efbc" LABEL="schobert-fs:2" TYPE="linux_raid_member" PARTUUID="87c99aec-03"

编辑3:

因此,因为我认为所有数据都位于接下来的 md126 上,所以我运行:

mdadm --stop /dev/md126
mdadm: stopped /dev/md126

之后我尝试自动组装并将 md126 重新组合在一起,它似乎可以工作,因为它在 /dev/md/ 下提出了 raidname 和一个新设备

mdadm --assemble --scan
mdadm: /dev/md/schobert-fs:1 has been started with 1 drive (out of 2).

然后我尝试安装它,但它一直说不能安装,因为它是只读的。这是有道理的,因为循环设备处于只读模式。但是,当我使用选项 -o ro 以只读模式安装它时,它不应该运行吗?

mount -o ro /dev/md/schobert-fs\:1 /mnt/raid1
mount: /mnt/raid1: /dev/md126 konnte nicht im Lese-Schreib-Modus eingehängt werden, (Medium) ist schreibgeschützt..

编辑4:

万岁,我明白了!

找到mount手册最后的提示:

-r, --只读

以只读方式挂载文件系统。同义词是-o ro。

请注意,根据文件系统类型、状态和内核行为,系统仍可能写入设备。例如,如果文件系统脏了,Ext3 或 ext4 将重播其日志。为了防止这种写访问,您可能需要使用 ro,noload 挂载选项挂载 ext3 或 ext4 文件系统,或将块设备设置为只读模式,请参阅命令 blockdev(8)。

[…]

无恢复/无负载

安装时不要加载轴颈。请注意,如果文件系统未完全卸载,则跳过日志重播将导致文件系统包含不一致的情况,从而导致许多问题。

所以我跑了:

mount -o ro,noload /dev/md/schobert-fs\:1 /mnt/raid

瞧,所有文件都在那里!

非常感谢@frostschutz 和@gabor.zed 帮助我!

祝大家有美好的一天。

答案1

这里的主要问题不是 RAID,而是伪造的分区表。分区表是为 512 字节扇区创建的,但驱动器被检测为 4K 本机扇区。所以所有分区偏移量和大小都是完全错误的。

您也许可以使用 losetup 来解决这个问题:

losetup --find --show --read-only --sector-size 512 --partscan /dev/sdb

然后查看循环设备是否具有有效的分区和 mdadm 元数据:

mdadm --examine /dev/loop*

然后从那里继续,希望没有进一步的问题。

如果驱动器可能有缺陷,您也可以考虑ddrescue先提取映像。图像文件通常也默认为 512 字节扇区处理。

将所有内容设为只读或使用写时复制覆盖

相关内容