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