ddrescue 프로세스를 재개하는 방법?


9

1TB USB HD를 복구해야합니다. 나는 ddrescue이것을 달성하기 위해 사용하고 있습니다. ddrescue시작한 후에 다시 시작할 수있는 방법이 있습니까?

나는 명령을 사용하고 있습니다 :

ddrescue /dev/sdd1 ./bye1t.dd_rescue.image

답변:


14

ddrescue 를 재개 할 수 있지만 그렇게하려면 로그 파일이 필요합니다. 로그 파일은 ddrescue가 지금까지 진행 한 진행 상황을 기록하고 ddrescue를 다시 시작하면 로그 파일을 읽고 중단 된 지점에서 시작합니다.

로그 파일은 세 번째 매개 변수입니다.

ddrescue /dev/sdd1 ./bye1t.dd_rescue.image ~/sdd1.log

다음에 ddrescue가 실행될 때 로그 파일없이 ddrescue 실행을 이미 시작하고 취소 한 경우, 이미 복구 된 내용에 대한 기록이 없으므로 처음에 시작됩니다.

참고 : ddrescuedd_rescue 는 다른 프로그램입니다.


1
처음에 로그 파일로 시작하여 동일한 명령을 다시 실행하면 마지막 로그 위치에서 자동으로 다시 시작됩니까? / edit : 마지막 위치에서 시작합니다.
Qwerty

6

로그 파일을 지정하지 않은 경우에도 다음과 같은 희망이있을 수 있습니다.

생성 모드

따라서 튜토리얼을 읽지 않고 로그 파일없이 ddrescue를 시작했습니다. 이제 이틀 후 컴퓨터가 다운되어 ddrescue가 얼마나 많은 데이터를 저장했는지 알 수 없습니다. 더 나쁜 것은 구조를 다시 시작할 수 없다는 것입니다. 처음부터 다시 시작해야합니다.

또는 드라이브를 복사하기 시작했으며 dd conv=noerror,sync현재 위에서 설명한 상황과 동일합니다. 이 경우 sync변환 인수를 사용하여 호출하지 않으면 dd에서 만든 사본을 사용할 수 없습니다 .

절망하지 마십시오 (아직). Ddrescue는 경우에 따라 입력 파일과 (부분) 복사본에서 대략적인 로그 파일을 생성 할 수 있으며, 이는 거의 정확한 로그 파일만큼 좋습니다. 이것은 모든 0을 포함하는 섹터가 구출되지 않았다고 가정하여 간단히 만듭니다.

그러나 사본의 대상이 드라이브 또는 파티션 인 경우 (또는 기존 일반 파일 및 잘림이 요청되지 않은 경우), 처음부터 ddrescue를 다시 시작해야합니다. (물론 이번에는 로그 파일과 함께) 그 이유는 드라이브에 아직 덮어 쓰지 않은 오래된 데이터가있을 수 있기 때문에 시도하지 않고 0이 아닐 수 있기 때문입니다.

예를 들어, 먼저 다음 명령 중 하나를 시도한 경우 :

ddrescue infile outfile

또는

dd if=infile of=outfile conv=noerror,sync

이 명령으로 대략적인 로그 파일을 생성 할 수 있습니다.

ddrescue --generate-mode infile outfile logfile

디스크가 복구되고 있는가?
요새

3

다른 사람들이 말했듯이 항상 로그 파일을 세 번째 매개 변수로 지정해야 다시 시작할 수 있습니다. 그렇게하지 않았으므로 여기에서는 도움이되지 않습니다. 프로세스가 어느 시점에 도달했는지 아는 경우 --input-position--output-position매개 변수를 사용하여 해당 지점부터 시작할 수 있습니다 (두 매개 변수를 모두 같은 값으로 설정해야합니다. 그렇지 않으면 출력이 손상됩니다).


2

로그 파일을 세 번째 매개 변수로 지정하지 않았으므로 재개를 자동으로 수행 할 수 없습니다. 이미 구출 된 섹터를 알고 있다면 구문을 쉽게 로그 파일을 만들 수 있습니다. 로그를 지정하는 동안 다른 파일로 다른 더미 복구를 시작하고 다른 영역을 읽도록하십시오. 그런 다음 첫 번째 파일에서 이미 구조화 된 영역을 나타내도록 로그를 편집하십시오. 이제 이전 명령을 다시 실행하지만 로그 파일 이름을 세 번째 매개 변수로 지정하십시오. 그런 다음 ddrescue는 시도되지 않은 첫 번째 섹터에서 다시 시작됩니다.


2

https://wiki.archlinux.org/index.php/Disk_cloning에 따르면 conv=noerror,sync스위치 를 사용하면 dd실제로 읽기 오류가 발생한 위치가 아니라 블록 끝에 0 추가 하는 것으로 보입니다 . 이는 2013-08-29의 Miles Wolbe의 답변과는 상반됩니다.

예를 들어, 올바른 순서가 198123283있고 중간에 읽기 오류가 있으면 198283000, not이 198000283됩니다.

따라서 실제로 읽기 오류가있는 경우 제안 된 방법은 정확하지 않습니다. 읽을 수있는 영역은 0으로 채워지지만 "구조 된"것으로 간주됩니다.

그건 그렇고, 대상 드라이브를 0으로 채우거나 (예 : WinHex로 수행 할 수있는 여유 공간) 이러한 복구 시도를 시작하는 것이 좋습니다.


안녕하세요 GabrielB, 슈퍼 유저에 오신 것을 환영합니다. 답변을 편집했지만 혼자서도 충분하지 않은지 확실하지 않습니다. 아마도 원래 질문도 다루는 작은 섹션을 포함하도록 추가로 편집 할 수 있습니까?
bertieb

올바르게 기억한다면 Miles Wolbe의 답변에 댓글을 달고 싶었지만 새로운 회원으로 가입 할 수 없었기 때문에 새로운 답변을 게시해야했습니다. 가능한 경우 위의 게시물을 표시해야 할 위치로 자유롭게 이동하고 삭제하십시오.
GabrielB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.