손상된 디스크에서 파티션 테이블 읽기 건너뛰기/단축

손상된 디스크에서 파티션 테이블 읽기 건너뛰기/단축

내 하드 드라이브가 손상되었고 손상된 블록이 많이 있습니다. 나의 구조는 ddrescue매우 성공적이었습니다(성공률은 99.5%). 안타깝게도:

  • 항상 그런 것은 아니지만 어떤 이유로 인해 ddrescue심각하게 손상된 섹션이 발견되면 디스크가 "미쳐버리고" 디스크의 나머지 부분에 대해 읽기 오류를 반환하거나 정렬되지 않은 읽기 오류를 보고하고 컴퓨터를 종료해야 합니다. 이 섹션을 다시 읽으려면 다시 시작해야 합니다.
  • 파티션 테이블을 포함하는 첫 번째 블록이 손상되었으며 커널이 파티션 테이블 읽기를 계속해서 다시 시도하므로 시스템이 부팅되는 데 약 1시간이 걸립니다.

재미있는 사실: 파티션 테이블을 전혀 읽을 필요가 없습니다. "전체 디스크" 복구를 수행하고 있습니다.

커널에게 알릴 수 있는 방법이 있나요?

  • 파티션 테이블을 읽지 못하거나
  • 재시도 횟수를 제한하시겠습니까?

시스템 부팅 가속은 복구 속도를 크게 향상시킵니다. 이 단계에서는 시스템이 한 시간 동안 부팅된 다음 몇 분 동안 계속 복구된 다음 위의 오류 중 하나로 인해 재부팅됩니다(시작 스크립트를 통해 이 작업을 자동화했습니다).

dmesg산출:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE

답변1

예전에 이 질문에 답한 것 같은데 지금은 찾을 수가 없네요...

초기 부팅 시뿐만 아니라 문제가 있는 드라이브를 이미 실행 중인 시스템에 핫 플러그할 때에도 문제가 지속된다면 운이 없는 것입니다.

전체 Linux 설치에서는 모든 연결에서 드라이브의 파티션, UUID 및 기타 메타데이터가 검색되는 것을 방지하기 위해 할 수 있는 일이 거의 없습니다. 커널은 파티션 테이블을 감지하고 udev는 디스크/uuid별 링크 등을 생성합니다.

그러나 파티션 테이블 지원은 커널에서 선택 사항입니다( 는 CONFIG_*_PARTITION, , , ... 중 하나입니다 *). 따라서 모든 커널을 지원하지 않거나 비활성화하는 사용자 정의 커널을 컴파일한 다음 ddrescue만 포함하는 최소 initramfs 환경에서 이를 사용할 수 있습니다(UUID 스캔도 방지 등).MSDOSEFIMAC

losetup또한 오프셋/크기 제한이나 장치 매퍼( dmsetup)를 사용하여 에뮬레이트 하지 않는 한 다른 드라이브의 파티션에 액세스할 수 없습니다 . 따라서 전체적으로 파티션 누락 문제를 해결해야 합니다.

  • 재시도 횟수를 제한하시겠습니까?

재시도할지는 확실하지 않습니다. 시간 제한을 설정하는 것이 가능합니다( /sys/block/*/device/timeouts). 이는 드라이브가 전혀 응답하지 않는 경우에만 유용할 것 같습니다.

제거할 수 없는 내장 장치의 경우 libata.force=<port.device>:disable커널 매개변수를 사용하여 완전히 비활성화할 수도 있습니다.

관련 정보