NAS에서 고장난 2TB WD 드라이브를 복구하기 위해 ddrescue를 시작했습니다. 로그 파일을 지정했지만 안타깝게도 부팅 가능한 플래시 드라이브에서 우분투를 평가판 모드로 실행하고 별도로 마운트된 드라이브에 로그 파일을 쓰지 않아서 11% 정도 전원이 꺼졌을 때 로그 파일이 손실된 것을 발견했습니다.
매뉴얼 14장에서 생성 모드가 작동할 것 같아서 다음을 실행했습니다.
ddrescue --generate-mode infile outfile mapfile
복구 중인 드라이브는 새 드라이브이므로 드라이브에 오래된 데이터가 없기 때문에 제대로 작동할 것으로 기대했습니다.
이제 SSD에 설치된 Ubuntu를 실행하고 있으므로 생성된 맵 파일을 사용하여 다음과 같이 ddrescue를 다시 실행했습니다.
ddrescue -f -n -r1 /dev/sda /dev/sdb /tmp/ddrescue.log
복구 프로세스가 중단된 지점인 11.5% 지점 부근에서 다시 시작되었기 때문에 이는 대부분 효과가 있었던 것으로 보입니다. 하지만 내 관심사는 충돌이 발생하기 전에 ddrescue가 하나의 읽기 오류를 식별하고 약 20MB의 트리밍되지 않은 블록을 표시했지만 새 맵 파일로 프로세스를 시작할 때 표시된 읽기 오류가 0개이고 트리밍되지 않은 블록이 0개 있다는 것입니다. 이제 8시간 동안 실행한 후 2개의 오류와 트리밍되지 않은 블록의 29696B가 표시되지만 ddrescue가 이미 구조된 것으로 표시된 이전 데이터 부분을 확인하지 않기 때문에 이것이 새로운 읽기 오류라고 가정합니다.
ddrescue가 후속 패스에서 원래 읽기 오류를 발견합니까, 아니면 그 오류가 영원히 사라지고 해당 블록을 찾아 다시 시도하는 유일한 방법은 새 맵 파일로 모든 것을 처음부터 다시 시작하는 것입니까?
전부는 아니더라도 기존 드라이브에서 최대한 많은 것을 복구하고 싶기 때문에 필요한 경우 다시 시작할 의향이 있습니다.
이에 대한 도움을 주셔서 감사합니다.
답변1
에 대한 --generate-mode
:
Ddrescue는 경우에 따라 대략적인
mapfile
, 에서infile
및 의 (부분) 사본을 생성할 수outfile
있으며 이는 정확한mapfile
. 이는 모두 0을 포함하는 섹터가 구출되지 않았다고 단순히 가정함으로써 가능합니다.
(원천)
첫 번째 시도에서는 원본 디스크의 잘못된 섹터에 해당하는 대상 디스크의 섹터에 기록되지 않았습니다. 마찬가지로, 건너뛴 항목에 해당하는 섹터에는 기록되지 않았습니다. 대상 디스크가 아직 기록되지 않은 섹터에서 모두 0을 반환한다고 가정하면 나중에 ddrescue --generate-mode
이러한 모든 조각을 "구출되지 않음"으로 분류합니다.
--generate-mode
섹터가 소스 디스크의 시도되지 않은 섹터, 트리밍되지 않은 섹터, 스크래핑되지 않은 섹터 또는 불량 섹터에 해당하기 때문에 섹터가 0으로 가득 차 있는지 알 수 없습니다. 또는 복사되었지만 우연히 모두 0이 포함된 정상 섹터입니다. 그것이 아는 것은 0으로 가득 찬 섹터가 있다면 outfile
읽지 않았을 가능성이 있다는 것입니다.아마도그것은 읽을 수 있습니다. --generate-mode
대략적인 을 생성할 때 해당 섹터를 시도되지 않은 것으로 간단히 분류하므로 실제로 를 사용하는 mapfile
미래는 해당 섹터를 읽으려고 시도(또는 재시도)합니다.ddrescue
mapfile
궁극기는 ddrescue
일부 섹터를 불필요하게 다시 읽을 수 있습니다. 읽었지만 우연히 모두 0을 포함하여 시도 --generate-mode
되지 않은 섹터처럼 보이는 섹터. 이는 일반적으로 사소한 불편입니다.
시작할 때 대상 디스크에 0이 아닌 섹터가 없으면 처음부터 다시 시작할 필요가 없습니다. 그러한 부문은 --generate-mode
그렇지 않더라도 구조된 데이터라고 믿게 될 것입니다. 새 디스크인 대상 디스크에 0만 포함되어 있다고 생각합니다. 당신의 믿음이 옳다면 처음부터 다시 시작할 필요가 없습니다.
당신의 믿음이 맞다면 첫 번째 시도에서 잘못된 섹터는 --generate-mode
"구출되지 않음"으로 분류되었으며 최종(아직 실행 중)은 ddrescue
시도했거나 다시 읽으려고 시도하는 것입니다.