如何在尝试运行修复或恢复工具之前备份损坏的磁盘

如何在尝试运行修复或恢复工具之前备份损坏的磁盘

我有两个损坏的磁盘扩展4文件系统,无 RAID。我认为它们在逻辑上已损坏。在尝试任何操作来修复它们或从中恢复数据之前,我想将备份制作成映像或新磁盘,以防我使用错误的恢复工具进一步损坏磁盘。

问题

  1. 我如何在 Ubuntu 中进行备份?

  2. 如果我需要将映像恢复到磁盘,我可以将它们恢复到任何更大的磁盘吗?或者我必须将它们恢复到原始磁盘(以便运行磁盘修复工具或数据恢复工具)?

答案1

  1. 使用ddrescue语法如下:

    ddrescue -b 512 -c 65536 /dev/sdy /dev/sdx /path/to/mapfile
    

    笔记:

    • -b 512应与源设备的物理扇区大小匹配。-b 4096如适用,请使用。

    • 上例中/dev/sdx是目标设备。它将被覆盖。

  2. 可以将整个磁盘的映像还原到更大的磁盘。但至少存在两个可能的问题:

    • 谷氨酰胺磷酸酶(如果使用)将其备份存储在磁盘的最末端。复制到更大的磁盘后,备份 GPT 会位于错误的位置。类似工具gdisk应该可以让您轻松修复 GPT。

    • 较大的磁盘可能使用与源磁盘相同的逻辑扇区大小,也可能不使用。如果不匹配,则分区表(如果有)将与数据不匹配。问题将类似于这个答案(但不是由于 USB 外壳;罪魁祸首是新磁盘本身的“错误”逻辑扇区大小)。

      如果逻辑扇区大小匹配,则应该没有问题。如果您的源磁盘根本不使用分区表(超级软盘,请比较这个答案),应该没问题。

笔记:

  • 如果您怀疑源磁盘的物理状态不健康,那么合理的方法是ddrescue获取尽可能多的数据,然后使用副本(副本)。

  • 创建常规文件的副本(/some/regular/file而不是/dev/sdx示例中的副本)可能是一个好主意。我更喜欢这种方法,它有以下优点:

    • 您可以创建一个稀疏文件(ddrescue -S)。如果目标文件系统支持压缩,那么您可以创建一个压缩文件。无论如何,您可能需要更少的空间来进行复制。

    • 如果目标文件系统支持奶牛,一个合理的方法是保留一份完整的副本 ( chattr -i),并根据需要从中创建尽可能多的 CoW 副本 ( cp --reflink=always)。恢复工具可能会更改其处理的图像上的任何内容,因此应在这些次要副本上使用。

    如果我是你,我会在新磁盘上创建 Btrfs,并将旧磁盘复制到那里的常规文件。我做过几次类似的事情。

    另一方面,如果恢复工具无法处理常规文件,或者需要为分区创建单独的文件,或者需要特定的扇区大小,那么您可能需要losetupkpartx/或类似的工具。弄清楚这一点需要额外的努力;因此,您可能更喜欢复制到块设备。但如果您愿意学习,并确保保留主副本,则不会有任何风险:您可以尝试使用可消耗的辅助副本。

    在最坏的情况下,如果您完全迷失了方向,您可以将主副本复制到块设备,这就像从源块设备复制到目标块设备一样,即您最初想做的事情。请注意,由于这个中间文件系统,您将图像存储为常规文件,因此可能需要更多块设备(磁盘)。

    可以将分区(而不是整个磁盘)复制到单独的常规文件中:您可以ddrescue单独运行/dev/sdy1/dev/sdy2等等。从此类文件中恢复数据可能更容易一些,但恢复原始所有的磁盘可能会更硬。

  • 您的源磁盘包含 ext4 文件系统,使用ddrescueddcp任何安全的方式复制它们。如果需要复制的磁盘包含 Btrfs,那么你需要格外小心因为两个具有相同 UUID 的 Btrfs 文件系统将被操作系统视为具有相同文件系统的两个设备。

相关内容