먼저 다음 명령을 실행하여 AF/512e HDD 이미징을 시작했습니다.
ddrescue -n /dev/sdb2 drive_c.img mapfile.log
완료되면 mapfile.log를 백업하고 드라이브의 물리적 섹터 크기인 4K를 사용하여 직접 디스크 액세스의 분할 단계를 실행하기로 결정했습니다.
ddrescue -d -b4096 -r3 /dev/sdb2 drive_c.img mapfile.log
512바이트 섹터 크기를 선택하면 불량 섹터를 더 많이 지울 수 있나요?
이 글을 쓰는 동안 분할 단계는 완료되었으며 불량 섹터가 두 번째로 재시도되고 있습니다. 물론, 맵파일에 있는 거의 모든 불량 블록의 크기는 n×4K입니다. 동일한 명령을 실행하지만 512b 섹터를 사용하면 더 많은 정보를 얻을 수 있습니까?
생각과 혼란
우선, 직접 디스크 액세스를 사용하는 것이 적절한지조차 확신할 수 없습니다.
ddrescue의 정보 파일은 다음과 같은 상황에서 직접 디스크 액세스 스위치를 호출합니다.
로그 파일의 위치와 크기는 항상 섹터 크기의 배수입니다.
이것은 의미한다
커널은 디스크 액세스를 캐싱하고 그룹화합니다.
따라서 내 커널이 "그룹화" 요청하는 경우 맵 파일의 가장 작은 블록은 8K 또는 16K여야 합니다. 그러나 내 경우에는 맵 파일에 읽을 수 없는 512바이트 블록이 많이 포함되어 있어 첫 번째 실행이 완료된 후 복구되었습니다.
두 번째 실행에서는 대부분의 512b 블록이 4K 블록으로 병합되었습니다. 예를 들어, 분할 단계 이전에 분할되지 않은 블록에 인접한 512b 불량 섹터는 인접한 불량 섹터와 병합됩니다. 제가 보기에는 괜찮은 것 같습니다. 아마도 트리밍 단계 중에 하드 드라이브의 헤드가 4K 섹터를 읽을 수 없으므로 ddrescue에 대해 512b 불량 섹터를 반환합니다. 트림은 바로 거기서 끝나고 512b 섹터 뒤의 블록은 비분할로 표시됩니다.
특이한 점은 아래 스크린샷과 같이 512b 불량 섹터가 있다는 것입니다.
헤드가 4K 섹터를 읽을 수 있지만 그 중 1/8만 읽을 수 없다고 선언하는 이유는 무엇입니까? 헤드가 물리적 섹터를 자동으로 읽는다는 인상을 받았습니까? 그래서 한 부분이 나쁘면 산업 전체가 나쁘다.
이는 분명히 의문을 제기합니다. ddrescue를 실행하여 직접 액세스 여부에 관계없이 4K "부분적으로 손상된" 섹터에서 데이터를 가져올 수 있지만 섹터 크기는 512b입니까?
분명히 뭔가 잘못된 것 같습니다.
그런데 이게 제가 처음으로 올리는 질문이라 포럼 형식에 맞지 않거나 질문이 너무 많으면 양해해 주시기 바랍니다. 하지만 그 외에는 고급 포맷, 직접 디스크 액세스, 커널 캐싱 등과 같은 주요 질문과 관련된 모든 주제에 대한 의견을 듣고 싶습니다. 제가 찾은 모든 것은 현실과 너무 멀거나 노골적인 가정이기 때문입니다. 독자들로부터.
건배!
답변1
ddrescue의 작성자인 Antonio Diaz와 이메일을 교환했는데 그는 "고급 포맷" 드라이브(예: 4096바이트의 물리적 섹터가 있지만 512바이트의 "논리 섹터"가 있는 드라이브)에 사용할 올바른 매개변수를 알려주었습니다. 예:
-b4096
한 번에 하나의 4096바이트 섹터만 읽으려면(느리게!) 다음을 지정할 수도 있습니다.
-c1
Antonio는 StackExchange에서 활동하지 않지만 다음 이메일 메일링 목록을 통해 ddrescue를 지원합니다.
https://www.mail-archive.com/[이메일 보호됨]/
으로 이메일을 보내면[이메일 보호됨]그러면 귀하의 이메일이 해당 요약 페이지에 표시되며, 그의 답변도 잘 정리된 형식으로 표시됩니다(물론 귀하의 이메일 주소는 제외). 또한 Antonio를 괴롭히기 전에 이 페이지에서 검색하여 문제나 질문에 대한 이전 토론을 찾아볼 수 있습니다. (그는 매우 바쁘므로 시간을 낭비하지 마십시오!)
ddrescue 로그 파일에 512바이트의 "잘못된" 영역이 포함된 이유는 원래 기본 섹터 크기가 512바이트인 ddrescue를 실행했기 때문입니다. 이는 심각한 문제는 아니지만 ddrescue가 드라이브에 512바이트 섹터가 있다고 생각하고 실행된 읽기가 읽기 오류로 인해 0바이트의 데이터를 반환하는 경우 ddrescue는 512바이트 중 첫 번째 바이트만 사용할 수 없다고 가정하고 나머지는 읽습니다. 어떤 가정도 하지 마세요. 따라서 로그 파일에서 512바이트만 오류로 표시됩니다.
답변2
~에 따르면위키피디아, 패리티가 분산될 수 있으며 ECC는 일부 데이터를 복구할 수 있습니다. 디스크마다 ECC 알고리즘이 다를 수 있습니다. 512비트 섹터 오류의 경우 4K 섹터가 부분적으로만 손상되었을 가능성이 있으며, ECC에서는 4K 섹터의 7/8을 수정하고 검증할 수 있습니다.