
손상된 블록이 많고 손상된 하드 드라이브가 있습니다. 나는 구조를 ddrescue
꽤 성공적으로 수행했습니다(99.5%). 안타깝게도:
- 어떤 이유로, 때때로
ddrescue
심하게 손상된 부분에 부딪힐 때 항상 그런 것은 아니지만 디스크가 "이상해져서" 디스크의 나머지 부분에 대한 읽기 오류만 반환하거나 정렬되지 않은 읽기 오류를 보고하고 종료됩니다. 컴퓨터를 다시 시작해야 해당 부분을 다시 읽을 수 있습니다. - 파티션 테이블을 포함하는 첫 번째 블록이 손상되고 커널이 파티션 테이블을 계속해서 읽으려고 시도하면 시스템 시작에 약 1시간이 걸립니다.
재미있는 점: 파티션 테이블을 전혀 읽을 필요가 없습니다. "전체 디스크" 복구를 수행하고 있습니다.
커널에 알리는 방법이 있습니까?
- 파티션 테이블을 읽지 않거나
- 재시도 횟수를 제한하려면?
시스템 시작 속도를 높이면 복구 속도가 크게 빨라집니다. 이 단계에서는 시스템이 한 시간 동안 시작된 다음 몇 분 동안 복구를 계속하다가 위에서 언급한 오류 중 하나로 인해 다시 시작되기 때문입니다(시작 스크립트로 이를 자동화했습니다).
dmesg
산출:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE
답변1
예전에 답변드린 것 같은데 지금은 찾을 수가 없네요...
초기 부팅 시뿐만 아니라 문제가 되는 드라이브를 이미 실행 중인 시스템에 핫플러그할 때에도 문제가 지속된다면 운이 없는 것입니다.
전체 Linux 설치에서는 드라이브를 연결할 때마다 드라이브에서 파티션, UUID 및 기타 메타데이터를 검색하는 것을 막을 수 없습니다. 커널은 파티션 테이블을 감지하고, udev는 디스크/uuid별 링크를 생성하는 등의 작업을 수행합니다.
그러나 파티션 테이블 지원은 커널( CONFIG_*_PARTITION
, , , , ... *
중 하나 )에서 선택 사항입니다. 따라서 모든 것을 지원하지 않거나 모두 비활성화하는 사용자 정의 커널을 컴파일한 다음 (UUID 검색 등을 방지하기 위해) ddrescue만 포함하는 최소 initramfs 환경에서 사용할 수 있습니다.MSDOS
EFI
MAC
losetup
또한 오프셋/크기 제한 또는 장치 매퍼( dmsetup
) 를 사용하여 에뮬레이션하지 않는 한 다른 드라이브의 파티션에 액세스할 수 없습니다 . 따라서 전체적으로 파티션 부족 문제를 해결해야 합니다.
- 재시도 횟수를 제한하려면?
재시도를 수행하는지 확실하지 않은 경우 /sys/block/*/device/timeouts
드라이브가 전혀 응답하지 않는 경우에만 유용할 수 있는 시간 초과(in)를 설정하는 것입니다.
제거할 수 없는 내장 장치의 경우 커널 매개변수를 사용하여 libata.force=<port.device>:disable
완전히 비활성화할 수도 있습니다.