gddrescue를 사용하여 장치를 여러 이미지 파일로 복제

gddrescue를 사용하여 장치를 여러 이미지 파일로 복제

실수로 모든 내용을 삭제했기 때문에 ddrescue를 사용하여 1TB 외장 드라이브에서 데이터를 복구하려고 합니다. 실제로 저는 여기에 게시된 것과 똑같은 상황에 직면해야 했습니다.ddrescue 디스크 이미지를 분할하고 다시 사용하는 방법은 무엇입니까?하지만 그 점에서는질문, 첫 번째 부분은 이것이 제 질문의 전부입니다.아직 답변이 없습니다.포럼을 읽는 동안 내 상황과 다른 가이드만 찾을 수 있었습니다. 즉, 동일한 위치로 복원, 첫 번째 드라이브와 정확히 동일한 저장 용량을 가진 다른 드라이브로 복원, 여러 파티션을 첫 번째 드라이브보다 더 큰 용량으로 복구 드라이브 외장 하드 드라이브의 경우 다른 드라이브와 함께 모두 복구해야 합니다.

그래서 제 질문은 1TB 외장 HDD에서 데이터를 구출해야 한다는 것입니다. 이를 위해 약 935GB(GiB 아님)의 여유 공간이 있는 외장 HDD가 있고, 내 노트북의 Windows 파티션(현재 비어 있음)에는 약 222GB의 여유 공간이 있습니다. 나는 다음을 수행했습니다: ddrescue를 시작했습니다

/# ddrescue -n -s900GB /dev/sdc /media/misi/Maxtor/recovery/recovery_part1.img /home/misi/recovery_log.txt

처음 900GB만 외장 드라이브에 저장하세요. 모든 것이 잘 진행되었고 다음과 같은 결과가 나왔습니다.

GNU ddrescue 1.17
Press Ctrl-C to interrupt
rescued:   900000 MB,  errsize:       0 B,  current rate:   64104 kB/s
   ipos:   899999 MB,   errors:       0,    average rate:   38981 kB/s
   opos:   899999 MB,    time since last successful read:       0 s
Finished

그런 다음 나머지 부분을 Windows 파티션에 저장합니다.

/# ddrescue -n /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log.txt

하지만 작동하지 않습니다.

GNU ddrescue 1.17
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   900000 MB,  errsize:       0 B,  errors:       0
Current status
rescued:   900000 MB,  errsize:       0 B,  current rate:        0 B/s
   ipos:   900000 MB,   errors:       0,    average rate:        0 B/s
   opos:   900000 MB,    time since last successful read:       3 s
Copying non-tried blocks...
ddrescue: write error: Invalid argument

그러나 위에 게시된 질문과 기타 가이드 및 매뉴얼 페이지에 따르면 그래야 합니다. 계속해서 다른 외장 하드 드라이브에 파일을 저장할 수 있었고, Windows 파티션 나누기 전체 프로세스를 다시 시작할 수도 있었습니다. Windows 파티션에 문제가 있는지 테스트하고 싶었기 때문에 두 프로세스를 모두 중단했습니다. 또한 다른 로그 파일을 사용하고 첫 번째 로그 파일에서 검색할 시작 위치를 수동으로 지정해 보았습니다(앞에서 언급한 것처럼 몇 초 동안 계속해서 구조한 이후 약간 변경되었습니다).

/# ddrescue -n -i900862115840 -o900862115840 /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log_2.txt

Invalid argument앞에서 언급한 것과 동일한 오류 메시지를 받았습니다 . 내가 뭘 잘못하고 있는 걸까요? 데이터의 가장 큰 부분을 다른 외부 드라이브에 저장하고 나머지는 내 Windows 파티션에 저장하는 올바른 패턴은 무엇입니까? 미리 답변해 주셔서 감사합니다!

답변1

나는 ddrescue그것이 이런 식으로 작동하도록 설계된 적이 없다고 생각합니다. 당신이 잘못한 것을 분석하는 것은 의미가 없습니다. 왜냐하면 올바른 방법은 실제로 있기 때문입니다.이 답변당신이 언급한 질문에. 특히 Unix의 "모든 것은 파일이다"라는 개념에 익숙하지 않은 사람에게는 이러한 맥락에서 이 단어의 사용이 명확하지 않을 수 있다는 점을 인정합니다.

답변은 두 개의 파일을 하나의 가상 장치(특수 파일) a로 연결하는 방법을 설명합니다 .b/dev/mapper/merge

두 개의 파일을 생성 a하고 b(수행 방법 보기) 사용 가능한 두 파일 시스템에 포함되어 있으므로 결합된 크기가 /dev/sdc.

연결된 답변의 다음 스니펫을 적용합니다(올바른 경로 ab).

losetup /dev/loop1 a
losetup /dev/loop2 b
s() { blockdev --getsize "$1"; }
dmsetup create merge << EOF
0 $(s /dev/loop1) linear /dev/loop1 0
$(s /dev/loop1) $(s /dev/loop2) linear /dev/loop2 0
EOF

그런 다음 통화 중에 /dev/mapper/merge대신 사용하십시오.recovery_part1.imgddrescue

의 내용은 /dev/mapper/merge기본적으로 의 출력과 동일 cat /your/path/to/a /your/different/path/to/b하지만 merge쓰기 및 검색이 가능합니다.

참고: /dev/mapper/merge재부팅 후에도 유지되지는 않지만 파일은 a물론 b. /dev/mapper/merge재부팅 후 사용하려면 위 코드를 사용하여 다시 생성하면 됩니다.

답변2

편집: 제대로 작동하지 않습니다.

-i200Gib -s200Mib매우 빠른 속도로 200G 파일을 생성하도록 설정합니다 . 분명히 나는 ​​아직 이러한 매개 변수를 이해하지 못하므로 아래에서 말하는 모든 내용을 무시하는 것이 좋습니다. 내 잘못. 다시 초안으로 돌아가겠습니다. 문제가 해결되면 몇 가지 테스트를 하고 업데이트하겠습니다.


나에게는 잘 작동합니다. -i초기 위치를 나타내기 위해 사용 하고 -s정지 위치를 나타내기 위해 사용합니다. 현재 손상된 4TB WD "MyPassport" 휴대용 드라이브를 다루고 있습니다. 한 번에 200GiB, 그런 다음 사용사진 기록각 200GiB 이미지에서 파일을 추출합니다. 온라인 알고리즘 섹션 끝에 제공된 예제를 따르고 있습니다.주소 구조 매뉴얼 다음과 같은 이유로 출력을 청크합니다.

  • 전체 4TB 이미지를 저장할 공간이 서버 어레이에 충분하지 않습니다.
  • 기다리지 않고 파일을 복구하고 있다는 확신이 들었습니다.나이전체를 위해구조하다파일을 복원하기 전에 구문 분석을 완료하세요)

폴리스티렌사진 기록이미지 전체에서 파일을 추출할 수 있다고 생각했습니다(끝 참조).이 섹션의) 물음표를 와일드카드로 사용했지만 아직 확인하지 않았습니다.

행운을 빌어요!

관련 정보