现在做什么

现在做什么

一些背景

我的一个朋友在他的办公室使用 NAS Buffalo-LS-WVL,每个磁盘有两个 1TB。这两个磁盘似乎已作为 raid 1 挂载,但正如您将读到的那样,它们可能并非如此。 NAS出现了一些极其缓慢的问题,然后突然就不再工作了。我被叫去拯救他的数据。两个磁盘具有完全相同的分区:1 个物理分区和 6 个逻辑分区,数据位于第 6 个分区(0.95 TB 中大约 80 GB)。

磁盘/dev/sdd似乎会出现硬件问题(速度缓慢、扇区读取错误等),而 /dev/sde 是物理功能良好的磁盘。

目标是提取 NAS 中包含的数据。如果不是所有数据,提取的数据越多越好。这些数据对于我这位朋友的公司至关重要。

我已经尝试过了

  1. 第一次尝试:单独安装磁盘

    这是第一次尝试,希望它能起作用,我尝试获取每个磁盘并单独安装它,然后我收到了以下消息:

    root@ubuntu:~# mount /dev/sdd6 /mnt/n
    
    -or-
    
    root@ubuntu:~# mount /dev/sde6 /mnt/n
    

    两者都给了我同样的信息:

    mount: unknown filesystem type 'linux_raid_member'
    
  2. 第二次尝试:创建磁盘阵列 RAID 1 并尝试挂载它们

    好吧,如果我无法单独安装它们,那么我需要创建一个磁盘阵列。让我们假设(最合乎逻辑的)原始配置是 raid 1,并且一次使用一个磁盘:

    root@ubuntu:~# mdadm --create --run --level=1 --raid-devices=2 \
                      /dev/md/md-singolo-e6--create-missing /dev/sde6 missing
    

    给出:

    mdadm: /dev/sde6 appears to be part of a raid array:    
    level=raid0    
    devices=2    
    ctime=Mon Sep 26 10:23:48 2011    
    mdadm: Note: this array has metadata at the start and may not be suitable as a boot device.  If you plan to store '/boot' on this device please ensure that    your boot-loader understands md/v1.x metadata, or use    --metadata=0.90    
    mdadm: Defaulting to version 1.2 metadata    
    mdadm: array /dev/md/md-singolo-e6--create-missing started.
    

    所以,看起来最初的raid是0模式而不是1模式。坏新的,因为磁盘出现扇区问题。

    无论如何,我尝试挂载新创建的 RAID1 阵列(即使我知道这是没有意义的):

    root@ubuntu:~# mkdir /mnt/md-singolo-e6--create-missing    
    root@ubuntu:~# mount /dev/md/md-singolo-e6--create-missing \
                     /mnt/md-singolo-a6--create-missing/
    

    给了:

    mount: /dev/md127: can't read superblock
    

    另一个磁盘也给出了完全相同的结果。

  3. 第三次尝试:创建磁盘阵列磁盘阵列0并尝试安装它们

    好的,既然已经说过是 Raid0,那么我们就开始吧:

    root@ubuntu:~# mdadm --create --run --level=0 --raid-devices=2 \
                       /dev/md/md001hw /dev/sdd6 /dev/sde6 
    

    给出:

    mdadm: /dev/sdd6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 16:38:33 2013
    mdadm: /dev/sde6 appears to be part of a raid array:
    level=raid1
    devices=2
    ctime=Mon Oct 14 17:01:01 2013
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md/md001hw started.
    

    好的,创建后我尝试安装它:

    root@ubuntu:~# mount /dev/md/md001hw /mnt/n
    
    mount: you must specify the filesystem type
    

    此时指定的所有 ext2、3、4 均-t出现错误。

  4. 第四次尝试:创建磁盘映像并使用它们

    好的,由于磁盘有问题,最好处理数据分区的副本 (dd),并用 0(同步)填充,以防出现块读取错误(错误)。因此我创建了两个图像:

    这适用于好的磁盘(4MB 块,速度更快):

    root@ubuntu:~# dd bs=4M if=/dev/sde6 of=/media/pietro/4TBexthdd/sde6-bs4M-noerror-sync.img conv=noerror,sync
    

    这适用于有问题的磁盘(最小块大小,更安全)

    root@ubuntu:~# dd if=/dev/sde6 of=/media/pietro/4TBexthdd/sdd6-noerror-sync.img conv=noerror,sync
    

    获得这两个映像后,我尝试使用上面指定的命令将它们用作 RAID 0。无事可做,得到的答案是图像“不是块设备”并且它不会创建数组。

  5. 第五次尝试:逐字节挽救一些数据

    好的,如果正确的安装不起作用,让我们通过逐字节读取以及页眉和页脚信息来提取数据。我用了*最重要的是*在每个磁盘上执行此作业:对于磁盘 1:

    root@ubuntu:~# foremost -i /dev/sde6 -o /media/pietro/4TBexthdd/foremost_da_sde6/
    

    它会创建带有文件扩展名的子文件夹,但其中根本不包含任何内容。而对于磁盘 2(损坏的磁盘):

    root@ubuntu:~# foremost -i /dev/sdd6 -o /media/pietro/4TBexthdd/foremost_da_sdd6_disco2/
    

    子文件夹结构都不是由mostly 创建的。

    当我在 RAID 0 阵列上尝试时,结果相同:

    root@ubuntu:~# foremost -i /dev/md/md001hw -o /media/pietro/4TBexthdd/foremost_da_raid_hw/
    

    两个子文件夹结构均未创建。

我需要帮助/我的问题

  • 第一个也是最重要的问题:如何拯救数据?有人有任何我没有尝试过的提示吗?
  • 你们中有人能提出与我所做的不同的建议吗?

其他问题:

  • 我是新手mdadm,我做的一切都正确吗?
  • 2011 年 9 月 26 日创建的原始阵列实际上是在 Raid 0 模式下创建的吗?
  • 为什么我无法使用分区映像创建阵列?

附录

dmesg这是从故障磁盘 ( ) 读取时的输出/dev/sdd

[  958.802966] sd 8:0:0:0: [sdd] Unhandled sense code
[  958.802976] sd 8:0:0:0: [sdd]  
[  958.802980] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  958.802984] sd 8:0:0:0: [sdd]  
[  958.802987] Sense Key : Medium Error [current] 
[  958.802994] sd 8:0:0:0: [sdd]  
[  958.802999] Add. Sense: Unrecovered read error
[  958.803003] sd 8:0:0:0: [sdd] CDB: 
[  958.803006] Read(10): 28 00 00 d5 c7 e0 00 00 f0 00
[  958.803021] end_request: critical target error, dev sdd, sector 14010336
[  958.803028] quiet_error: 36 callbacks suppressed
[  958.803032] Buffer I/O error on device sdd, logical block 1751292
[  958.803043] Buffer I/O error on device sdd, logical block 1751293
[  958.803048] Buffer I/O error on device sdd, logical block 1751294
[  958.803052] Buffer I/O error on device sdd, logical block 1751295
[  958.803057] Buffer I/O error on device sdd, logical block 1751296
[  958.803061] Buffer I/O error on device sdd, logical block 1751297
[  958.803065] Buffer I/O error on device sdd, logical block 1751298
[  958.803069] Buffer I/O error on device sdd, logical block 1751299
[  958.803074] Buffer I/O error on device sdd, logical block 1751300
[  958.803078] Buffer I/O error on device sdd, logical block 1751301
[  961.621228] sd 8:0:0:0: [sdd] Unhandled sense code
[  961.621236] sd 8:0:0:0: [sdd]  
[  961.621238] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  961.621241] sd 8:0:0:0: [sdd]  
[  961.621243] Sense Key : Medium Error [current] 
[  961.621248] sd 8:0:0:0: [sdd]  
[  961.621251] Add. Sense: Unrecovered read error
[  961.621254] sd 8:0:0:0: [sdd] CDB: 
[  961.621255] Read(10): 28 00 00 d5 c8 d0 00 00 10 00
[  961.621266] end_request: critical target error, dev sdd, sector 14010576
[  964.791077] sd 8:0:0:0: [sdd] Unhandled sense code
[  964.791084] sd 8:0:0:0: [sdd]  
[  964.791087] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  964.791090] sd 8:0:0:0: [sdd]  
[  964.791092] Sense Key : Medium Error [current] 
[  964.791096] sd 8:0:0:0: [sdd]  
[  964.791099] Add. Sense: Unrecovered read error
[  964.791102] sd 8:0:0:0: [sdd] CDB: 
[  964.791104] Read(10): 28 00 00 d5 c8 00 00 00 08 00
[  964.791114] end_request: critical target error, dev sdd, sector 14010368
[  964.791119] quiet_error: 22 callbacks suppressed
[  964.791122] Buffer I/O error on device sdd, logical block 1751296

答案1

我讨厌传递坏消息,但是……

问:我是 mdadm 新手,我所做的一切都正确吗?

答:不。事实上,你几乎以最具破坏性的方式做了所有事情。您过去常常--create销毁阵列元数据,而不是使用--assemble它可能允许您读取数据(至少在磁盘能够读取数据的范围内)。这样做时,您会丢失关键元数据(特别是磁盘顺序、数据偏移量和块大小)。

此外,--create可能在关键文件系统结构之上潦草地写了数组元数据。

最后,在您的步骤 (3) 中,我看到 mdadm 抱怨两个磁盘上的 RAID1 — 我希望这是您在两个磁盘上分别尝试 (2) 造成的。我真诚地希望您不要让 RAID1 开始尝试同步磁盘(例如,如果您将两个磁盘都添加到同一个 RAID1 阵列中)。

现在做什么

看来您终于创建了驱动器的映像。你应该这样做第一的,至少在尝试超越基本的任何事情之前--assemble。但不管怎么说,

  • 如果坏驱动器的映像丢失了大部分/所有扇区,请确定是否值得进行专业数据恢复。文件(和文件系统元数据)在 RAID0 中跨驱动器分割,因此您确实需要同时恢复两者。专业恢复可能能够读取驱动器。

  • 如果图像除少数扇区外大部分正常,请继续。

制作图像文件的副本。仅处理图像文件的副本。我怎么强调都不为过,你可能会多次销毁这些副本,你需要能够重新开始。而且您不想再次对磁盘进行映像,尤其是因为其中一个磁盘出现故障!

回答您的其他问题之一:

问:为什么我无法使用分区镜像创建阵列?

答:要组装(或创建)图像文件数组,您需要使用环回设备。您可以使用 将图像附加到环回设备losetup。阅读联机帮助页,但它会类似于losetup --show -f /path/to/COPY-of-image.现在,您可以mdadm在循环设备上使用(例如/dev/loop0)。

确定原始数组布局

您需要找出最初用于创建数组的所有 mdadm 选项(因为您之前销毁了该元数据--create)。然后,您可以使用--create这些选项在两个环回设备上运行。您需要弄清楚元数据版本 ( -e)、RAID 级别 ( -l, 似乎为 0)、块大小 ( -c)、设备数量 ( -n, 应该为 2) 以及设备的确切顺序。

最简单的方法是获取两个新磁盘,然后将其放入 NAS,并让 NAS 在其上创建一个新阵列。最好使用与最初使用的相同的 NAS 固件版本。 IOW,重复初始设置。然后将磁盘拉出,并mdadm -E在其中一个成员上使用。这是 RAID10 阵列的示例,略有不同。我省略了一些行来突出显示您需要的行:

        Version : 1.0                 # -e
     Raid Level : raid10              # -l
   Raid Devices : 4                   # -n

     Chunk Size : 512K                # -c

   Device Role : Active device 0                         # gets you the device order
   Array State : AAAA ('A' == active, '.' == missing)

注意:我假设您在这里使用 ext2/3/4;如果没有,请使用适合 NAS 实际使用的文件系统的实用程序。

尝试使用这些选项创建(在环回设备上)。看看e2fsck -n还认不认识。如果没有,请停止该阵列,然后使用设备以其他顺序重新创建它。再试e2fsck -n一次。

如果两者都不起作用,您应该返回到您认为正确的顺序,并尝试备份超级块。联机e2fsck帮助页告诉您要使用什么号码;你几乎肯定有 4K 块大小。如果所有备份超级块均不起作用,请停止阵列,然后尝试其他磁盘顺序。如果这不起作用,您可能做出了错误的--create选择;从图像的新副本开始并尝试一些不同的选项 - 我会首先尝试不同的元数据版本。

运行 e2fsck 后,查看文件系统损坏的严重程度。如果它完全被丢弃,这可能意味着您的块大小错误(停止并重新创建数组以尝试更多)。

把数据复制下来。

我建议让 e2fsck 尝试修复文件系统。这确实有破坏文件系统的风险,但是,这就是您处理副本的原因!然后你可以安装它,并复制数据。请记住,某些数据可能已损坏,并且损坏可能是隐藏的(例如,文档的页面可能已被 NULL 替换)。

我无法从 NAS 获取原始参数

那你就有麻烦了。您的另一种选择是进行猜测,直到最终起作用,或者充分了解磁盘格式以使用十六进制编辑器找出它。可能有一两个实用程序可以帮助解决此问题;我不知道。

或者,聘请数据恢复公司。

相关内容