我有一些旧硬盘(一些 IDE,大多数 SATA)。几年前,我启动它们并尝试通过取消删除程序恢复所有文件,并获得了一些文件。我不相信自己做得很好,所以现在我想再试一次。
我的假设是逐个扇区的方法是最好的,因为这样应该捕获每一位数据,然后我可以尝试多次尝试恢复可能保留在映像中的任何文件。我知道尝试自己的恢复会降低专业恢复成功的机会,但我真的只是希望恢复一些我依稀记得的童年文件,所以这并不那么重要。
考虑到可能有许多失败的扇区,创建旧驱动器的某种扇区映像的最安全方法是什么?
我熟悉 Linux,并且在我的笔记本电脑上安装了 Mint 双引导,但我从未使用过 DD,而且我不确定是否应该学习使用它或寻找其他工具。
一般来说,至少有两种策略:
使用指定的工具复制整个磁盘以处理读取错误。标准工具是 GNU
ddrescue
,我已经多次使用它来镜像块设备。GNU
ddrescue
不关心分区表或文件系统,它的工作是读取尽可能多的驱动器,同时在发生读取错误时首先尝试挽救好的部分。(我听说过有关HDDSuperClone的好消息,但我从未使用过它。)
在最好的情况下,您将获得驱动器的完美映像,包括以前删除的文件系统或文件的任何残留物;因此,任何取消删除或恢复此类文件的尝试都将与您使用原始驱动器的效果相同或更高。可能“在更高程度上”,因为假设原始驱动器可能会在压力下失败,但是一旦创建并正确存储在健康驱动器上的副本/图像是牢固的,并且可以在没有任何风险的情况下使用。
在最坏的情况下,创建完整映像的唯一尝试将是导致源驱动器损坏的压力。为了降低这种风险,还有其他策略。
使用理解所需文件系统的工具复制所需的文件系统,并故意跳过文件系统不使用的驱动器部分。这个想法是,尝试读取文件系统当前未使用的扇区是没有意义的,因为即使成功读取也不会给你任何东西,同时仍然是一个可能在整个操作完成之前杀死磁盘的压力。
为此,文件系统的基本结构必须完好无损。您需要一个特定于文件系统类型的工具。对于 NTFS,请参阅此问题:How can I find out thoseectors areused by files on NTFS?
此策略故意跳过文件系统当前未使用的扇区。一般来说,您可能无法删除的大部分数据都存在于这些扇区中,这些数据将会丢失。该策略旨在最大化复制文件系统当前状态的机会,但仅此而已。
您提到尝试“通过取消删除程序恢复所有文件”。你想再试一次。如果是这样,那么第一个策略就是适合您的策略。
笔记:
使用第一种策略,您可以复制整个块设备(例如
/dev/sdc
在 Linux 中)。我假设有一个分区表。如果分区表完好无损,那么复制到另一个块设备(例如/dev/sde
)将在那里“创建”分区(内核将/dev/sde1
在之后为您提供等等partprobe
)并且使用它们将非常简单。将整个分区块设备复制到常规文件稍后会出现一些问题,因为您需要知道如何访问常规文件中存在的“分区”(如果您想这样做,在 Linux 中,工具是 ,losetup --partscan
,partx
)kpartx
。因此,如果您想复制到常规文件,通常最好将每个分区复制到单独的文件。使用第二种策略,您可以复制几乎总是存在于分区内的文件系统(例如
/dev/sdc1
在 Linux 中)。就我个人而言,我更喜欢复制到 Btrfs 上的常规文件。首先,我将副本设置为不可变 (
chattr +i
),以防万一。接下来,我创建副本 (cp --reflink=always
) 的重新链接副本。然后我使用这个“辅助”副本,因此即使需要修改图像的工具也可以工作,但我仍然有不可变的副本可以重新开始,以防出现任何问题。这种谨慎是可能的,无需重新链接,通过实际复制,因此在任何文件系统中都是如此;不过,重新链接可以大大节省时间和磁盘空间。尽管如此,Windows 和 Windows 中的(恢复)工具可能要求副本存在于块设备上。我对 Windows 的了解还不够深入,无法判断现在它可以多么轻松地假装一个常规文件是一个块设备(就像 Linux 可以使用的那样
losetup
)。在某些操作系统(例如 Windows)中使用常规文件磁盘副本的一种通用方法是将副本作为“HDD”连接到运行该操作系统的虚拟机。如果克隆驱动器上有 Btrfs,则不要在原始驱动器仍处于连接状态时尝试安装副本(反之亦然)。原因是它们将共享标识文件系统的 UUID,并且根据设计,它们将被解释为单个文件系统的一部分,而不是两个不同的文件系统。请参阅如何复制 btrfs 文件系统以获取一些有用的想法。