NTFS ファイル圧縮の問題

NTFS ファイル圧縮の問題

Windows NTFS でフォ​​ーマットされた圧縮外付けドライブから、Mac OS X でフォーマットされた 2 番目の外付けドライブに誤って移動された写真ファイルが数百個あります。移動は Mac OS X オペレーティング システムで実行されました。残念ながら、ファイルの移動プロセスは、Windows ファイル システムによって元のファイルがすべて「解凍」されることなく完了しました。

現在「破損した」JPG および RAW ファイルとして認識されているこれらの写真ファイルを復元できる復元サービス、アプリケーション、または手動変換方法をご存知の方はいらっしゃいますか? 提供できる支援や提案があれば、ぜひお知らせください。

答え1

NTFS 圧縮は、マスター ファイル テーブル (MFT) に保存されているファイル メタデータのフラグによって示されます。このフラグを直接設定するのは困難です。通常、このフラグを変更すると、ファイル システム ドライバーがファイルを圧縮または解凍するからです。このフラグは手動で追加することもできます (ファイル属性 DWORD の 1 ビットだけです)。ただし、MFT を直接ハッキングするのはおそらく最善の方法ではありません。代わりに、次の操作を試してください。

  1. NTFS ボリューム (NTFS でフォ​​ーマットした場合はフラッシュドライブでも可) に、1 つ (または複数) の圧縮ファイルを作成します (Windows を使用)。この手順では、これらのファイルを 、 などと呼びrescue1ますrescue2
  2. NTFS ドライブを Mac システムに接続します (最初にファイルを解凍しないでください)。ボリュームを読み取り/書き込みでマウントします。マウント先は/mount/ntfs(実際には OS X をあまり使用していないため、外部ボリュームがマウントされる場所を覚えていません) とします。
  3. ファイルをコピーするツールを使用するコンテンツコマンドライン ユーティリティ などのツールを使用してdd、メタデータなしで圧縮されたファイルの内容を、NTFS ボリューム上の圧縮ファイルの内容にコピーします。コマンドは、 のようになりますdd if=/path/to/bad/file of=/mount/ntfs/rescue1 bs=4M
  4. ドライブを Windows に再接続し、圧縮ファイルが正しく開けるかどうかを確認します。開ける場合は、Windows で安全に解凍できます (インプレースで解凍するか、FAT32 フラッシュドライブなどの圧縮をサポートしていないドライブにコピーします)。
  5. この方法がうまくいけば、何百ものファイルすべてを救出するのに使用できます。必要な数の圧縮ファイルを NTFS ドライブに作成し、最も適切と思われる名前 (元の名前でも可) を付けて、Mac から内容をコピーするだけです。

NTFS ボリューム全体を圧縮する必要はないことに注意してください。圧縮すると、すべてのディレクトリが「圧縮」フラグを継承し、各ファイルがファイルのディレクトリからそれを継承するだけです。ただし、圧縮しても問題はありません。

ただし、バックアップした NTFS ボリュームまたは使い捨ての NTFS ボリュームを使用することをお勧めします。OS X NTFS ドライバーがそれほど悪い場合は、Windows ボリュームに書き込もうとすると MFT が破損する可能性があります。

上記の方法が機能しない場合は、より複雑な代替アプローチがあります。

  1. Windowsで圧縮ファイルをたくさん作成します。難しいのは、破損したファイルのサイズに合わせる必要があることです。30913バイトのファイルを復元したい場合は、圧縮されたNTFSファイルを圧縮後にそのサイズにする必要があります。正直に言うと、どのように調整すればよいかわかりません。少なくとも、レスキューファイルを少なくとも救出が必要なファイルと同じサイズ (ディスク上)。サイズを 4k 以内に一致させるのが最適です。これは、NTFS クラスター (ファイル データに使用される割り当てチャンク) の既定のサイズです。
  2. fsutilWindowsのユーティリティを使用して、範囲レスキュー ファイルのエクステントは、パーティション内でファイルのデータが格納されているボリューム上の実際のオフセットです。
    • コマンドはfsutil file queryextents <filename>、場所によっては管理者として実行する必要がある場合があります。
    • コマンドの出力は次のようになります。VCN: 0x0 Clusters: 0x2 LCN: 0x48000これは、ファイルが2つのクラスターを占有していることを示しています。論理クラスタ番号0x48000 (オフセット 4096*0x48000=1207959552) からボリューム オフセット 0x48001 まで、合計 8k (2 x 4k/クラスター) のスペースです。実際には、その末尾は通常未使用のスペースです。
    • 出力が複数行になる場合があります(これはファイルが断片化している場合に発生します。各ファイルのサイズを次のファイルを作成する前に決定した場合、新しくフォーマットされたボリュームでは発生しません)。最初の値(仮想クラスタ番号) はゼロではなく、そのエクステントが始まるファイル内のオフセット (クラスター単位) になります (たとえば、0x3 の場合、エクステントがファイルの 12k から始まることを意味します)。
  3. ドライブを取り外してOS Xに接続します。ない今回はボリュームをマウントします。代わりに、正しいボリューム識別子を見つけます。Linuxでは、これは次のようになります/dev/sdb1。(2番目のドライブ -> sdb1、最初のパーティション -> sdb1)。
  4. を使用してdd、不良な圧縮ファイルを生のボリュームに直接コピーします。
    • たとえば、ファイルに 2 つのエクステントがあるとします。
      • VCN: 0x0 Clusters: 0x15 LCN: 0x13c
      • VCN: 0x15 Clusters: 0x3f6 LCN: 0xab20
    • dd必要に応じてファイル名を調整して、以下のコマンドを使用します。dd マニュアルページ詳細については、を参照してください。ただし、現時点では、すべてのパラメータはddブロック サイズ ( bsparam ) の倍数になっているのが便利ですが、16 進数値は 10 進数に変換されていることに注意してください ( dd16 進数を正しく処理できるかどうかはわかりません。一部の dd のようなプログラムでは処理できますが、すべてではありません)。
      • dd if=/path/to/bad/file of=/dev/sdb1 bs=4K count=21 seek=316
      • dd if=/bath/to/bad/file of=/dev/sdb1 bs=4k count=1014 seek=337 skip=21
  5. ファイル データを RAW パーティションにコピーしたら、ドライブを Windows に接続して、圧縮 (復元) されたファイルを読み取ることができるようになります。ファイル サイズが正確に一致しなかった場合、ファイルの最後に少しゴミがあるかもしれませんが、問題にはならないはずです。

もう1つのアプローチ(おそらくより簡単だが、多くの最も簡単な方法は、NTFS 解凍を処理するルーチンを見つけることですntfs-3g。そのルーチンをファイルに直接実行します。または、ユーティリティのコピーntfsdiskedit(廃止されたようです) が見つかるかどうかを確認し、それを使用すれば、ファイルを (非圧縮ファイルとして) NTFS ボリュームにコピーした後、ファイルに「圧縮」ビットを手動で設定できるかどうかを確認します。

関連情報