如何在 USB 硬盘 (NTFS, 1TB) 上读取 MFT?

Tho*_*ews 3 windows-7 ntfs hard-drive sectors hard-drive-recovery

我正在寻找一种高级方法来读取希捷 1TB 内部硬盘的 NTFS 文件系统上的 MFT 条目。平台为Windows 7。

我需要获取文件名、块大小和 LBA。

这是一项特殊的任务,因此我需要编写一个程序来执行此操作吗?

use*_*686 5

此信息可通过碎片整理 API访问第三方碎片整理工具可能会暴露它。在最近的 Windows 系统上(8.1 有效,7 未测试),您可以使用fsutil它来查询:

C:\> fsutil 文件 queryextents example.txt
VCN:0x0 集群:0x2 LCN:0x18f85e

还有另一个子命令可以转储文件中所有数据流的所有信息:

C:\> fsutil 卷文件布局example.exe

********* 文件 0x01390000000008dd *********
文件参考编号:0x01390000000008dd
文件属性:0x00000020:存档
...
流:::$FILE_NAME
    属性:0x00000000:*无*
    标志:0x0000000c:居民 | 未分配集群
    尺寸 : 80
    分配大小:80
Stream : ::$DATA  (主数据流)
    属性:0x00000000:*无*
    标志:0x00000000:*无*
    尺寸:1681920
    分配大小:1683456
    范围 : 1 范围
                        :1:VCN:0 集群:411 LCN:8527618

在这两个命令的输出中,对于每个“范围”(连续的簇范围),您将获得“虚拟簇号”(从文件开头的偏移量)、范围中的簇数和“逻辑簇号”(从卷的开头偏移)。

注:小文件,它适合在MFT库记录保存在其MFT记录(“居民”) ,将有范围为零。对于那些,您需要使用其他方式来挖掘 MFT 本身。(此外,在某些情况下,文件可能是稀疏的,只在磁盘上分配了一小部分;其余的只是假定为空字节。)

集群是文件系统级别的,因此您需要将它们转换为块设备级别的扇区;我的系统每个集群有 8 个扇区:

C:\> fsutil fsinfo ntfsinfo c:
...
每扇区字节数:512
每个簇的字节数:4096
...

C:\>设置/a 0x18f85e * (4096 / 512)
13091568

C:\>设置/a 0x18f85e * 4096
6702882816

这意味着您可以\\.\C:使用 HxD 等打开,并在扇区 13091568(或字节 6702882816)处找到文件的开头。