디스크 이미지를 마운트하지 않고 디스크 이미지에서 파일을 추출하는 방법은 무엇입니까?

디스크 이미지를 마운트하지 않고 디스크 이미지에서 파일을 추출하는 방법은 무엇입니까?

읽기 권한이 있는 디스크 이미지(아마도 분할되어 있음)가 있다고 가정해 보겠습니다. 그러나 루프백*을 통해 설치할 권한이 없습니다. 이론적으로는 데이터가 실제로 존재하지만 데이터는 이미 존재합니다. Linux 커널과 유사한 코드, 파티션 편집기 및 mount이미지를 구문 분석하고, 파티션을 찾고, 파일 시스템을 해석하고, 파일을 추출하는 나만의 코드를 작성할 수 있습니다. 하지만 그러한 도구가 GNU/Linux 시스템에 이미 존재합니까?

*실제로 저는 이를 처리하기 위한 도구를 작성하고 있으며 (a) 해당 도구의 사용자가 해당 도구를 사용할 수 있다고 가정하고 (b) 필요하지 않은 곳으로 sudo이동하도록 요구하고 싶지 않습니다 .sudo

( 파일 시스템에 따라 답변이 달라지는 것이 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

일반적인 접근

일반적인 접근 방식은 두 개의 디스크 드라이브(원시 모드의 파일)로 가상 머신을 생성하는 것입니다. 하나는 이미지용(가상 머신에 읽기 전용으로 제공됨)이고 다른 하나는 복구 파일용(네트워크를 사용하여 전송할 수 없는 경우)입니다. 문서) .

파일 시스템에 쉽게 액세스할 수 있도록 이미지에서 부팅할 수 있어야 합니다(그렇지 않은 경우: 디스크 드라이브 3개(부팅용 1개)가 있는 가상 머신 생성).

마운트가 불가능하므로 파일 시스템 없이도 인식할 수 있는 형태로 데이터를 작성해야 합니다.

tar -cf /dev/vdc /etc/passwd

호스트 시스템에서는 이미지 파일을 간단히 읽을 수 있습니다.

tar -xf imagefile.img

tar아카이브의 끝을 식별하고 파일의 나머지 부분은 무시하십시오.

관련 정보