1

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 まで実行されますが、まばらなクラスターが実際に2 番目のクラスターが実行される直前に割り当てられ、1 つの連続したブロックになります。実際にどこにでも割り当てられるかどうかです。

それが理にかなっていることを願っています。情報やアドバイスをいただければ幸いです。

4

1 に答える 1

1

いいえ、これは $UsnJrnl がディスク上で 2576 個のクラスターを占有することを意味します。スパース クラスタは、ディスク上のスペースを占有しません。例のクラスタ 10 などのスパース クラスタを読み込もうとすると、NTFS はゼロを返します。

通常、ファイルは断片化される可能性があるため、ファイルの開始クラスターと終了クラスターを決定することはできません。例では、最初の 1408 クラスターがディスク上にまったく割り当てられておらず、そのファイルの 128 クラスターがディスク クラスター 510119 - 510247 を占有し、次にファイルの 2448 クラスタがディスク クラスタ 256 ~ 2704 を占有します。したがって、この場合、ファイルがクラスター X (ディスク上) で始まり、クラスター Y (ディスク上) で終わるとは言えません。ファイルが断片化されていない場合にのみ可能です (1 つのクラスター実行のみを使用する場合)。

于 2013-07-26T14:11:56.433 に答える