ext3(또는 ext2/4, 원하는 유형 선택) 파일 시스템에서 특정 inode에 해당하는 원시 바이트 데이터를 하드 드라이브에서 직접 추출하는 방법은 무엇입니까?
dd
디스크에서의 위치를 결정하기 위해 inode 번호를 부여받은 다음(파티션 시작 부분의 오프셋 또는 다른 LBA 오프셋 등) 시스템 호출과 같은 일부 유틸리티를 사용할 수 있습니까 ? 파일 시스템에서 작동합니까? ) 파일로 참조하지 않고도 해당 데이터를 읽을 수 있습니까?
나는 이것이 일종의 드라이버 수준 유틸리티를 사용하여 수행될 수 있다고 가정합니다.
답변1
debugfs의 명령은 imap
inode가 어디에 있는지 알려줄 수 있습니다. 예:
$ debugfs -R 'imap <128901>' /dev/whatever
debugfs 1.42.5 (29-Jul-2012)
Inode 128901 is part of block group 16
located at block 524344, offset 0x0400
inode 128901의 원시 덤프를 얻으려면 바이트를 검색 524344*block_size + 0x0400
하고 읽어야 합니다 inode_size
. stats
in 명령 debugfs
이나 별도의 유틸리티를 사용하여 치수를 얻을 수 있습니다 dumpe2fs
.
stats
또는 매번 실제로 호출(또는 대화식으로 실행) dumpe2fs
하지 않고도 잘 수행되는 자체 함수를 구축할 수 있도록 모든 inode 저장 영역의 전체 목록을 제공합니다 . 계산을 수행할 때 인덱스 노드 0이 없다는 점을 기억하십시오. inode 1은 첫 번째 inode 블록의 바이트 0에서 시작합니다.imap
debugfs
외부 프로그램 없이 C 프로그램에서 이 작업을 수행하려면 libext2
모든 표준 ext2 유틸리티에서 사용하는 라이브러리를 살펴봐야 합니다. 나는 그것을 직접 사용하지는 않았지만 imap
libext2 문서와 debugfs의 소스 코드를 영감으로 사용하여 자신만의 유사한 함수를 매우 쉽게 작성할 수 있을 것이라고 생각합니다.
...그게 바로 내가 생각해낸 것인데, 아마 당신은 아직 안 했을 수도 있겠네요문자 그대로이는 inode의 원시 데이터를 원한다는 의미입니다. 아마도 당신은 inode가 설명하는 파일의 내용을 원할 것입니다. 이 경우에는 더욱 쉽습니다. debugfs
이를 달성하기 위한 내장 명령이 있습니다:
debugfs -R 'cat <128901>' /dev/whatever
inode 번호가 128901인 파일의 내용을 인쇄합니다.
답변2
debugfs
나는 비슷한 것을하고 싶었고 다른 답변과 비슷한 접근 방식을 사용했지만 다음을 사용했습니다 (내 루트 파일 시스템은 /dev/nvme0n1p4
).
$ debugfs
debugfs: open /dev/nvme0n1p4
debugfs: stat /usr/bin/docker-current
debugfs: inode_dump <9445675> # After getting the inode number from the output above
또한 다음을 수행하여 inode를 수동으로 찾을 필요 없이 동일한 출력을 제공할 수도 있습니다.
debugfs: inode_dump /usr/bin/docker-current
0000 ed81 0000 2819 f200 e805 ab5d ed28 7d5d ....(......].(}]
0020 be5c 585d 0000 0000 0000 0100 1079 0000 .\X].........y..
0040 0000 0800 0100 0000 0af3 0200 0400 0000 ................
0060 0000 0000 0000 0000 0008 0000 0060 8f02 .............`..
0100 0008 0000 2207 0000 0050 8f02 0000 0000 ...."....P......
0120 0000 0000 0000 0000 0000 0000 0000 0000 ................
0140 0000 0000 76bb 0b93 0000 0000 0000 0000 ....v...........
0160 0000 0000 0000 0000 0000 0000 0000 0000 ................
0200 2000 0000 0025 6ad3 0000 0000 2c57 e8ca ....%j.....,W..
0220 ed28 7d5d 18db 8a5f 0000 0000 0000 0000 .(}]..._........
0240 0000 0000 0000 0000 0000 0000 0000 0000 ................
*