HDD 섹터별 복제(dd/ddrescue), 중간에 불량 블록을 건너뛰는 방법은 무엇입니까?

HDD 섹터별 복제(dd/ddrescue), 중간에 불량 블록을 건너뛰는 방법은 무엇입니까?

복구할 수 없는 불량 블록이 있는 HDD가 있습니다. HDD는 Raid-0 어레이의 일부입니다. 어떤 방법으로든 불량 블록에 액세스하면 HDD가 중단됩니다. HDD 전체 용량이 500,000,000,000바이트이고 불량 블록의 범위가 100,000,000,000 - 100,000,004,096바이트(8 LBA)라고 가정해 보겠습니다. 사용 방법dd또는구출불량 블록에 액세스하지 않고 이 HDD를 다른 HDD나 이미지 파일에 복제할 수 있나요? 바이트 0 - 99,999,999,999, 그 다음 4096바이트의 0, 그 다음 바이트 100,000,004,097 - 500,000,000,000이 필요합니다.

감사해요!

답변1

오늘 이 작업을 완료했습니다. 귀하에게 효과가 있기를 바랍니다. 약 30개의 불량 블록이 있는 복제(디스크 백업)에 문제가 있었습니다. 내가 한 첫 번째 일은 모든 좋은 데이터를 백업하기 위해 일반 Filezilla를 사용하여 파일을 백업하는 것입니다. 하나의 큰 파일이 올바르게 복사되지 않는 것을 발견했습니다(중간에 중지하고 전송을 다시 시작함). 다행히 같은 파일의 이전 백업이 있습니다. 디스크를 복제하려면 다음 절차를 사용하여 디스크에서 불량 블록을 찾아야 했습니다.

먼저 다음을 사용하여 HD 정보를 식별하는 문제 디스크를 찾습니다.fdisk -l

두 번째로 디스크가 다음과 같다면/dev/sdb그런 다음 명령을 실행해야합니다 불량 블록 -v /dev/sdb드라이브의 모든 불량 블록이 나열됩니다. 다행히 몇 개 있을 겁니다. 불량 블록이 발견되지 않으면 드라이브 블록이 정상이므로 다른 문제를 파악해야 합니다. 내 블록 크기는 512이므로 해당 기본 숫자를 사용하여 DD를 실행합니다.

세 번째로 각 블록의 크기는 512이므로 bs=512로 설정했습니다.

항상 그렇듯 정기적으로 DD를 실행할 때마다 오류가 발생한 후 내 데이터가 손상된 것으로 나타납니다. 그런 다음 페이지에 설명된 대로 매개변수를 사용합니다.https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html"장애가 있는 디스크의 경우" 부분을 검색하세요.

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

시간이 좀 걸렸어요. 각 불량 블록에는 결함이 있는 드라이브를 두드리는 듯한 소리가 들렸습니다. 블록별로 복사하고 모든 불량 블록을 통해 동일한 소음이 발생했습니다. 소음이 발생한 횟수는 또 다른 불량 블록을 발견하고 디스플레이 오류 메시지에 대해 알려주기 때문입니다. 무슨'conv=오류 없음,동기화'NUL을 사용하여 잘못된 읽기를 채우는 것입니다.'iflag=풀블록'짧은 읽기에 적합하지만 끝까지 데이터 동기화를 유지합니다. 전혀 손상되지 않으며, 단지 결함이 있는 블록을 복사하지 않고 빈 NUL로 채웁니다.

DD를 사용한 복사가 완료된 후 이전 백업에서 Filezilla를 되돌리는 잘못된 파일을 교체하면 모든 것이 제대로 작동했습니다. 결함이 있는 드라이브를 백업하려는 다른 사람들에게 이것이 유용할 수 있기를 바랍니다.

참고: 내 불량 블록은 서로 거의 가깝습니다. 불량이 감지된 그룹은 한 번에 약 4개의 블록입니다. 블록이 디스크 전체에 있으면 여러 파일이 영향을 받을 수 있습니다. 다행히 제 경우에는 큰 데이터베이스 4GB 파일만 영향을 받았습니다.

답변2

좋아, 아마도 dd로도 이 작업을 수행할 수 있지만 WinHex를 사용하여 문제를 해결했습니다(물리적 장치를 선택했습니다). 디스크의 모든 부분을 이미지로 복제하고 연결할 수 있습니다.

관련 정보