运行NTFS稀疏文件数据($ UsnJrnl)

时间:2013-07-25 08:25:01

标签: windows parsing filesystems ntfs

我正在对NTFS和Windows进行一些研究,我对如何处理NTFS稀疏文件感到有些困惑。我目前正在查看$ UsnJrnl,它用于更新事务日志。

我的理解是,稀疏文件就像文件系统中的任何其他文件一样,但是文件将包含大部分零,而不是将零写入磁盘并且实际上浪费空间,只计算存储包含零的簇数。

例如,在我的测试系统上运行$ UsnJrnl的数据是:(使用Winhex获得)

Cluster start: 0
Number of clusters: 1408
(Sparse)

Cluster start:  510119
Number of clusters: 128

Cluster start:  256
Number of clusters: 2448

这意味着$ UsnJrnl文件在磁盘上占用了总共3984个群集,但其中1408个是稀疏的,因此它们实际上并不存在于磁盘上。

这是否意味着1408零填充簇紧接在从510119开始的128个簇之前?

基本上我要做的是能够确定磁盘上文件的确切开始和结束偏移量,例如它从集群x运行到集群512822,但是我不确定是否稀疏群集实际上是在第二个群集运行之前直接分配的,使其成为一个连续的块,如果它们实际上可以分配到任何地方。

我希望这是有道理的,任何信息或建议都会非常感激!

1 个答案:

答案 0 :(得分:1)

不,这意味着$ UsnJrnl在磁盘上占用了2576个集群。如果您尝试读取稀疏集群,稀疏集群不占用磁盘上的任何空间,例如在您的示例中,群集10,NTFS只返回零。

通常,您无法确定文件的开始和结束群集,因为文件可能会碎片化 - 您的示例表明根本没有在磁盘上分配1408个群集,然后该文件的128个群集占用磁盘群集510119 - 510247,然后2448个文件簇占用磁盘簇256-2704;所以在这种情况下你不能说文件从集群X开始(在磁盘上)并以集群Y(在磁盘上)结束 - 只有当文件没有碎片时(当它只使用一个集群运行时)它才有可能。