• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
가이드

배드섹터 있는 HDD 복사 및 이미지 뜨기 : ddrescue, ddrescueview

klayf 311

14

5

 

배드섹터가 있는 하드디스크를 카피하기 위해 윈도우에서 여러 툴로 삽질만 하다가... 허무하게도 리눅스에서 간단하게 해결했습니다.

 

처음에는 윈도우 노트북에서 해결하기 위해 Raw copy 툴로 시도했지만,

  • 복사 되는 것처럼 보이다가 중간에 정지
  • 재시도하여 정상 카피되었고 모든 파티션의 사용 용량도 정상 표시되지만 실제 마운트시 원본의 불량섹터가 있었던 파티션은 파일 및 디렉토리 표시 안됨 (카피된 HDD에서는 비어있음)
  • 프로그램 상으로는 정상 카피되었지만 파티션 정보 표시 안됨

이 반복되어 몇 가지 툴을 더 사용했으나 인식 불가 / 불량 섹터 지점에서 정지하는 문제로 ddrescue를 사용했습니다. 

 

 


 

 

ddrescue의 특징을 요약하면 아래와 같습니다.

 

일반 dd 명령어나 다른 복사 툴에서는 파일 단위로 읽으면서 (불규칙하게 조각난 데이터를 읽기 위해) 헤드 이동이 복잡해지고, 불량 섹터가 포함된 블록을 읽게 되어 액세스 속도가 느려질 때는 읽기 단위를 줄이고 정밀하게 반복하여 액세스를 시도합니다.

 

그러나 이는 스캔 속도를 급격하게 떨어뜨리고 특정 섹터에 대한 액세스에 헤드 동작이 집중되며 물리적 장치의 고장으로 언제 하드가 퍼질지 알 수 없는 상황에서는 나머지 데이터의 복사 기회를 잃게 만들 수 있습니다.

 

이와 다르게 ddrescue의 가장 큰 특징은 HDD 헤드 움직임을 최소화하기 위해 파일이 아니라 순차적으로 블록 단위의 복사가 이뤄지며,

 

양호한 블록은 복사하지만 실패한 블록은 일단 맵핑하였다가 복사 단계가 끝난 후 해당 블록에서 섹터 단위 액세스를 시도합니다.

 

이를 통해 한 블록에서 정상 블록과 불량 섹터에 대한 트리밍을 거치고, 다듬어진 결과를 바탕으로 다시 불량 섹터와 인접한 섹터부터 트랙의 패스 라이닝 방향을 정방향 또는 역방향으로 여러 번 액세스를 시도할 수 있습니다.

 

이를 통해 처음에는 액세스가 불가능했던 섹터를 읽어낼 가능성이 있고, 일단 양호한 부분부터 빨리 복사하므로 죽어가는 하드에서 시도하기에 보다 적합합니다.

 

또한 이 과정에서 생성되는 맵파일을 사용하여 나중에도 전체 스캔 없이 기록된 불량 섹터에 대한 트리밍을 다시 진행할 수도 있습니다.

 

하드 카피에 대한 기능도 훌륭한데 하드에서 하드로 카피는 물론, 하드를 통째로 이미지로 떠서 저장도 가능하고 떠놓은 이미지를 실제 하드에 기록하는 것도 가능합니다.

 

심지어 배드섹터로 인해 포맷이 불가능할때, 배드섹터만 건너뛰고 데이터를 지우거나 CD 및 DVD 카피 기능도 가능합니다...!

 

 


 

 

- 준비물

  • 주요 리눅스 배포판이 설치된 PC 또는 라이브 부팅용 USB
  • 원본 디스크와 같거나 더 큰 용량의 HDD (1Byte라도 작으면 안됨, ddrescue에서 직접 디스크 액세스를 위해 물리 섹터 크기 동일해야 함)

 

 


 

 

- 복구 환경 요약

   1. 복구용 PC OS

  • 데비안 (칼리 리눅스)

   2. 원본 디스크

  • HDD : 삼성 320G 3.5 SATA (아이피타임 USB-3.5형 케이스로 연결)
  • 파티션 : 삼성 복원 파티션, XP OS(NTFS), 백업 파티션 (NTFS)
  • 원본 디스크의 파티션 종류는 크게 중요하지 않습니다. 파티션 구조 그대로 대상 디스크에 복사되기 때문입니다.

 

04.png.jpg

 

 

   3. 대상 디스크

  • HDD : 시게이트 500G 2.5 SATA (아이피타임 USB-2.5형 케이스로 연결)
  • 대상 디스크가 없어도 ddrescue에서는 원본 디스크를 그대로 이미지 떠서 저장할 수 있습니다.

 

 


 

 

 1.jpg

 

 1. 배포판에 따라 apt나 rpm으로 ddrescue 및 ddrescueview를 설치합니다.

 

 

 

02.jpg

 

 2. 원본 디스크와 대상 디스크를 각각 연결하고, lsblk 명령어 및 표시 용량 등을 종합하여 인식된 장치명을 확인합니다.

  • 저의 경우 sda가 원본 디스크, sdb가 대상 디스크입니다.
  • 먼저 연결한 디스크에 더 빠른 알파벳이 할당되므로 원본 디스크가 sdb로 표시될 수도 있고, PC에 따라 sdc, sdf가 될 수도 있습니다.
  • ddrescueview는 미리 실행하셔도 됩니다.

 

 

03.jpg

 

3. ddrescue로 카피를 시작하기 위해 슈퍼유저로 명령어를 입력하면 위와 같이 진행 정보가 표시되며 복사가 시작됩니다.

 

* 하드 -> 하드 카피시

sudo ddrescue -d -r3 원본디스크 대상디스크 맵파일저장경로및이름

 

* 하드 -> 통째로 떠서 img 파일로 저장시

sudo ddrescue -d -r3 원본디스크 저장될img파일경로 맵파일저장경로및이름

 

* img 파일 -> 하드로 카피시

sudo ddrescue -d -r3 원본img파일경로 대상디스크 맵파일저장경로및이름

 

저의 경우 sda가 원본, sdb가 대상 디스크였으며, 맵파일은 홈 디렉토리에 rescue.log로 저장할 것입니다.

오라클 리눅스에서는 -d 옵션이 없으면 --force 옵션이 필요 없었던 걸로 기억하는데, 일단 칼리에서 진행시 상관 없이 해당 옵션을 요구하였기 때문에 --force를 추가하였습니다.

 

따라서 제가 입력한 명령어는 sudo ddrescue -d -r3 /dev/sda /dev/sdb ./rescue.log --force 입니다.

 

ddrescue 메뉴얼에 있는 구문을 그대로 활용했는데, 앞에 옵션을 설명하면 다음과 같습니다. 

 

-d : 커널의 디스크 캐시를 우회하여 원본 디스크 또는 원본 이미지에 직접 액세스합니다.

 

해당 옵션 없이 복구 진행시 맵 파일의 기록된 섹터 위치와 크기가 항상 섹터 크기의 배수로 표시될 경우, 커널에서 디스크 접근을 캐시하고 그룹화한 것일 수 있으며 이를 우회하여 섹터 정보를 올바르게 맵핑하고 기록하기 위해서는 -d 명령어를 추가해야 합니다.

 

-r 3 : 지정된 횟수만큼 불량 섹터 패스를 시도합니다.

 

r3는 3회 시도를 의미하며 1회를 거칠 때마다 패스 라이닝 방향이 반전되므로, 불량섹터로 맵핑된 곳에 대해 정방향 -> 역방향 -> 정방향 읽기 시도 후 종료됩니다.

 

더 많은 옵션은 아래 공식 메뉴얼을 참고하시기 바랍니다.

 

 

 

 

06.jpg

07.png.jpg

 

4. ddrescue에서 생성된 맵파일을 ddrescueview에서 열어줍니다.

 

 

 

08.png.jpg

 

5. ddrescue에서 복사를 진행한 블록(rescued)과 실패하여 일단 non-trimmed로 기록해둔 블록이 구분되어 그래픽으로 표시됩니다.

 

 

 

09.png.jpg

 

6. ddrescueview에서 주기적으로 현시 정보를 갱신할 수 있도록 업데이트 주기를 설정해줍니다.

 

 

 

10.png.jpg

 

7. 일단 하드디스크 전체 복사 (non-tried -> rescued 단계)가 끝나면, 읽기에 실패하여 유보했던 블록에 대해 본격적으로 섹터 단위 액세스를 시도하고 불량 섹터 위치를 특정한 후 해당 섹터에 대해 지정한 횟수만큼 다시 액세스를 시도합니다.

 

 

 

11.png.jpg

 

8. 실패한 블록의 다듬기와 스크래핑이 끝나면 ddrescueview에서 배드섹터의 정확한 위치를 확인할 수 있습니다.

 

 

 

12.png.jpg

 

9. 지정된 횟수만큼 불량섹터에 대해 읽기를 시도한 후 복사 과정이 끝납니다.

 

 

만약, 하드 -> 하드로 카피한 경우 재부팅하기 전에 반드시 두 하드 중 하나는 분리하셔야 합니다. 원본과 대상 디스크의 UUID/GUID가 동일하기 때문에 중복되어 커널 레벨에서 부팅이 중단되거나 심하면 커널 패닉도 야기할 수 있습니다. 

 

 


 

 

저의 경우 설비 자동제어 관제용 PC에 사용된 하드디스크 노후화로 배드섹터가 생겨 무한 재부팅 및 복구 콘솔로 해결이 불가능한 상황이였는데, 기설치된 OS(XP)와 XP용 설비 관제 소프트웨어, 설비 맵핑 데이터베이스를 그대로 유지하고 재설치는 지양해야 했습니다.

 

 ddrescueview 상으로 확인되는 불량 섹터 위치가 앞쪽 트랙에 몰려있었기 때문에 OS 관련 파일만 손상된 것으로 예상했고, 배드섹터에 기록된 데이터는 복구할 수는 없었지만 그 외 파티션 테이블이나 나머지 데이터 복사는 성공적이였기에 복사된 하드를 연결하고 XP 복구 설치로 해결할 수 있었습니다.

 

혹시라도 배드섹터가 있는 하드 복사시 도움이 되시기를 바랍니다.

 

신고공유스크랩
5
profile image
jerry80 2024.05.15. 12:42
감사합니다. 이런 정보는 사실 필요없는게 최고이지만.... 혹시 모르니 스크랩해둡니다.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
쓰기
태그 : 나만의 위키 북스택