ディスクイメージをマウントせずにディスクイメージからファイルを抽出するには?

ディスクイメージをマウントせずにディスクイメージからファイルを抽出するには?

読み取り権限を持つディスクイメージ(おそらく分割されている)があるとしましょう。ただし、ループバック*を介してインストールする権限がありません。理論的には、データは実際に存在しますが、データはすでに存在します。 Linuxカーネルに似たコード、パーティションエディタ、イメージをmount解析し、パーティションを見つけ、ファイルシステムを解釈し、ファイルを抽出する独自のコードを書くことができます。しかし、そのようなツールはGNU / Linuxシステムにすでに存在していますか?

*実際に私はそれを処理するためのツールを作成していますsudosudo

(ファイルシステムによって答えが変わるのはext2-4私にとってより重要です。しかし、広く使用されている複数のファイルシステムへの答えが好まれます。)

答え1

7z(p7zipでは)は完全ではありませんが、多くの一般的なVMディスクイメージ、パーティションスキーム、およびファイル形式でディスクおよびファイルシステムイメージを解凍できます。 https://www.7-zip.org/リストがあります(Windowsで利用可能 - p7zipはLinux / Posixポートです)

これは通常2段階のプロセスです。

$ 7z l [raw HD image file]

Path = [raw HD image file]
Type = MBR
Physical Size = 42949672960

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
                    .....    104857600    104857600  0.ntfs
                    .....  42842718208  42842718208  1.ntfs
                    .....      1048576      1048576  2
------------------- ----- ------------ ------------  ------------------------
                           42948624384  42948624384  3 files

次のステップ:

$ 7z x [raw image file] 0.ntfs
Extracting archive: [raw Image file]

ついに

$ 7z l 0.ntfs
   
Scanning the drive for archives:
1 file, 104857600 bytes (100 MiB)

Listing archive: 0.ntfs

--
Path = 0.ntfs
Type = NTFS
Physical Size = 104857600
Label = System Reserved
File System = NTFS 3.1
Cluster Size = 4096
Sector Size = 512
Record Size = 1024
Created = 2013-09-10 16:20:30
ID = 591300999067013540

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2013-09-10 16:20:30 ..HS.       262144       262144  [SYSTEM]/$MFT
[Lots of files]
2013-09-10 16:23:30 .RHSA         8192         8192  BOOTSECT.BAK
------------------- ----- ------------ ------------  ------------------------
2014-10-14 16:35:50           23880514     23957604  56 files, 31 folders
2013-09-10 16:20:30            1314956      1318920  3 alternate streams
2014-10-14 16:35:50           25195470     25276524  59 streams

答え2

拡張[234]

/dev/whateverのルートディレクトリにファイルがある場合foo

debugfs -f <(echo cat /foo) /dev/whatever | tail -n +2 > /restore/file

一般的なアプローチ

一般的なアプローチは、2つのディスクドライブ(RAWモードのファイル)で仮想マシンを作成することです。 1つは画像用(仮想マシンに読み取り専用で提供されています)、もう1つは回復ファイル用(ネットワークを使用して転送できない場合)です。文書)。

ファイルシステムに簡単にアクセスできるように、イメージから起動できる必要があります(そうでない場合:3つのディスクドライブ(1つの起動用)を持つ仮想マシンを作成します)。

マウントできないため、ファイルシステムがなくても認識できる形式でデータを作成する必要があります。

tar -cf /dev/vdc /etc/passwd

ホストシステムでは、イメージファイルを簡単に読み取ることができます。

tar -xf imagefile.img

tarアーカイブの終わりを識別し、ファイルの残りの部分は無視してください。

関連情報