블록 장치에서 파티션 정보 복구

블록 장치에서 파티션 정보 복구

나는 최근에 dd 명령을 사용하여 1TB 외장 하드 드라이브의 처음 100MB 정도를 덮어썼습니다. 이는 내 파티션 테이블이 손실되었을 수 있음을 의미합니다. fdisk -l은 파티션 정보를 표시하지 않습니다.

그러나 dd 명령을 실행할 때 실제로 드라이브가 마운트되어 있으므로 파일 탐색기를 사용하여 드라이브(모든 파티션)의 데이터에 액세스할 수 있습니다. 외장 하드 드라이브가 여전히 컴퓨터에 연결되어 있습니다. 이로 인해 파티션 테이블이 복구 가능하다고 믿게 되었습니다.

이 주제에 대한 검색에서는 파티션 테이블을 복원할 수 있는 데이터 복구 도구를 권장하지만 이러한 옵션은 드라이브가 컴퓨터에서 연결 해제되었다고 가정합니다.

/proc/partitions를 보면 각 블록 장치의 크기는 제공되지만 섹터의 오프셋은 제공되지 않습니다.

노틸러스에서 파일 구조를 볼 수 있으므로 파티션 오프셋을 알아야 한다고 가정합니다. 이 정보를 공개할 수 있는 방법이 있나요?

답변1

/sys정확히 말하면 에서 파티션 정보를 얻을 수 있습니다 /sys/block/<disk>/<partition>/{start,size}.

이 셸 기능은 다음과 같이 도움이 될 수 있습니다.

print_partitions()
{
    local disk="$1"
    local part
    local template="%-6s %16s %16s %16s\n"

    printf "$template" Part. "First sector" "Last sector" "# sectors"
    for part in "/sys/block/$disk/"sd*; do
        st="$(cat "$part/start")"
        sz="$(cat "$part/size")"
        end=$((st + sz - 1))
        printf "$template" "${part##*/}" "$st" "$end" "$sz"
    done
}

용법:

$ print_partitions sdd
Part.      First sector      Last sector        # sectors
sdd1               2048          2099199          2097152
sdd3            2099200       3907029167       3904929968

참고: 여기의 섹터는 512바이트 섹터입니다.

파티션 전체 덤프의 경우:

for disk in /sys/block/sd*; do
    print_partitions "${disk##*/}"
    echo
done

첫 번째 파티션의 시작 부분에서 외부 슈퍼블록과 같은 귀중한 정보를 덮어썼을 수도 있지만 이는 또 다른 이야기 의 문제입니다 .

관련 정보