无法从 Windows、Mas OSX 或 Linux 访问损坏的 NTFS 文件夹

Corrupt NTFS folder not accessible from either Windows, Mas OSX or Linux

我有一个 2TB 外置硬盘,里面有大量来自 GoPro 和 Sony Handycam 的视频文件以及其他备份内容。最近,在尝试从我的 Mac 进行备份时(通过 OSXFUSE 使用一些 hack 来允许写入 NTFS 文件系统,直到现在它一直在为我工作)我发现我的一个文件夹丢失了一些文件夹。我删除了外部 HD 并尝试从 Ubuntu 中恢复它,但在 Ubuntu 中我对内容的可见性更低。请参阅下面的屏幕截图。紫色的 2 个文件夹不再作为文件夹,它们的名称已缩短,它们应显示为 'Navimag Ferry' 和 'Sony Hanicam'(Handycam 的错别字)。

当我 运行 ls -al 我得到以下内容

在我看来,信息是存在的,因为可用的 space 没有改变。

到目前为止,我已经尝试了以下方法:

sudo ntfsfix /dev/sda1

给出以下输出

Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/sda1 was processed successfully.

sudo testdisk /dev/sda1

使用 testdisk 我在 analyse 中使用了 quick search 函数,然后是 deeper search 但都返回了 Structure: Ok.

此外,我使用了 undelete 功能,但找不到丢失的文件或文件夹。

在我看来,数据和目录结构之间的 link 丢失了,但我不确定如何找回这个 link。

有什么想法吗??

谢谢,

斯图

小免责声明/介绍

我是 a MSc thesis related to forensic NTFS reconstruction when metadata is partially damaged 的​​作者,也是 RecuperaBit 的作者,我将在本回答的后面提到开源软件。

(可能)发生了什么

The 2 folders coloured purple no longer act as folders and their names have been shortened

NTFS 文件记录(称为 MFT 条目)包含一些关键元素:

  • 标志 → 一些描述文件的位。特别是,一位对应 "Is this a folder?" 问题,另一位对应 "Is this deleted or still allocated?".
  • $FILE_NAME attribute(s) → 每个文件都有一个或多个文件名,因为NTFS兼容DOS 8.3名称。
  • $STANDARD_INFORMATION 属性 → 这包含 MAC(修改、访问、创建)次和更多。

此外,每个目录包含一个 $INDEX_ROOT 和可能的几个 $INDEX_ALLOCATION 列出子名称的属性(但不是 MAC 次)。

从你的输出来看,在我看来,这两个目录的 MFT 条目已经丢失。您仍然将它们视为 camera uploads 中的元素,因为它们位于其中一个索引属性中,但是当系统尝试读取记录以向您显示日期时,它会失败。

NTFS 驱动程序与任何其他 "normal" OS 实用程序一样访问文件系统:它是自上而下的。破坏一个节点,您将丢失任何子树(基本上是那些目录的内容)。

这就是高级数据恢复软件可以提供帮助的地方。

正在恢复文件

由于这是一个编程相关网站,我将简要说明您将如何编写一个能够读取缺少某些 MFT 条目的 NTFS 分区的软件:

  • 扫描整个驱动器,尝试将任何以 FILE 开头的扇区对解析为有效的 MFT 条目(我在这里进行了一些简化)
  • 通过对任何节点执行此操作来构建自下而上的树:
    • 读取父节点的id
    • 如果您有一个具有上述 ID 的节点,link 子节点到父节点
    • 否则,在 Lost Files 下创建一个 Folder_<id> 目录,并将 link 子目录
  • 读取要恢复的每个文件的 $DATA 属性并将它们复制到其他地方

有关文件系统重建算法技术的更多详细信息,请查看我在上面 link 编辑的论文。

您可以尝试的工具

我在软件推荐网站上提到了一些程序 in this answer。这些专门针对严重损坏的驱动器,它们包括:

  • DMDE(商业版,Windows,但有 Linux 的控制台版本)
  • Restorer Ultimate(商业,对于 Windows 和 OS X)
  • RecuperaBit(开源,基于 Python):它 运行 在 Linux 上是肯定的,但它已经在 Windows 上进行了简单的测试... 就像 一次 。它也应该 运行 在 OS X 上。

根据我的(有偏见的)意见和 my test results RecuperaBit 是磁盘显示严重损坏的最好的。你的有点损坏,不过我想提供一个关于如何恢复两个特定文件夹的简要指导。

恢复这两个目录

首先,运行 RecuperaBit 在磁盘上。我强烈建议 运行 将它放在比特流副本上,但它不会写入任何内容,因此您可以尝试直接在设备上 运行 它:

mkdir /media/user/External/recovered_files
cd [full path of recuperabit]
pypy main.py /dev/sdb -o /media/user/External/recovered_files -s /media/user/External/savefile.save

这里我假设 /dev/sdb 是损坏的驱动器,并且您想将文件保存在安装在 /media/user/External 上的另一个驱动器中。如果你直接运行块设备上的工具,我想你需要sudo

扫描过程将花费很长时间(高枕无忧,2TB 很多!),但是如果您第二次 运行 工具,结果将保存到 savefile.save。键入 recoverable 以找出您需要恢复的分区的标识符。标识符由 RecuperaBit 提供,不反映分区 table.

假设它是 #2,保存内容的 CSV 转储:

csv 2 contents.csv

程序将打印保存文件的路径。使用 LibreOffice 打开它并找到您要恢复的文件夹的 ID。例如,根目录的 ID 为 5,但如果您只遗漏两个目录,您可能不想获取所有文件的副本。

假设损坏的目录有 id 124。返回 RecuperaBit 并输入:

restore 2 124

其中#2仍然是分区标识符。它将列出正在恢复的文件。您可以导航到输出目录并检查是否有您想要的内容。如果不是,请重试:您可能选择了错误的标识符。