를 기반으로 @의 derobert의 대답 , 내가 프로그램 (쓴 취지 에서 입력 스트림을 구문 분석) dd
뭔가를 각 분야를 스캔을한다는 내선 파티션의 시작처럼 보인다.
최소한 dd
하드 디스크에서 읽을 수있는 속도만큼 작동 합니다. 요약 버전은 다음과 같습니다.
가장 간단한 사용법은 블록 크기를 개선하기 위해 명령을 sudo dd if=/dev/xxx | ext2scan
수정 dd
하거나 검색 할 영역을 선택하는 것입니다.
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main() {
unsigned char const MAGIC[2] = {0x53, 0xef};
unsigned char const ZEROS[512] = {0};
long long int sector = 0;
char buf[4][512];
int empty1, empty2;
while (read(STDIN_FILENO, buf[sector&3], 512) > 0) {
if (!memcmp(buf[sector&3] + 0x38, MAGIC, 2)) {
printf("Found a possible ext2 partition at sector %lld", sector-2);
empty1 = !memcmp(buf[(sector-2)&3], ZEROS, 512);
empty2 = !memcmp(buf[(sector-1)&3], ZEROS, 512);
if (empty1 && empty2) printf(" (first two sectors are empty :)\n");
}
sector++;
}
}
참고 : 파티션의 시작뿐만 아니라 그 안에 수퍼 블록 이 있습니다.
두 경우 모두 dumpe2fs
결과를 분석하는 데 사용 하는 것이 좋습니다 . 의심스러운 수퍼 블록의 시작을 파일 (최소한 비공식 테스트에 따라 최소 6 개 섹터)에 덤프 할 수 있으며 수퍼 블록 dumpe2fs
인 경우 다른 수퍼 블록의 상대 위치를 알려줍니다 .