in Uncategorized, 하드웨어

DDRescue를 이용하여 마이그레이션이 불가능할 정도로 손상된 HDD/SSD 복원

최근 가족이 운영하는 치과병원에서 치아 X-Ray 촬영 장비에 연결되어 있던 약 7년 정도 된 컴퓨터가 고장이 나서 복원을 시도했다. 윈도우즈 운영체제 차원에서 계속하여 하드디스크가 손상되었으니 백업을 해야한다는 메세지가 표시되는 현상이었는데, 아마도 S.M.A.R.T. 검사 통과에 실패한 것으로 보였고 경험적으로 해당 검사에 통과하지 못한다는 것은 조만간 하드디스크 데이터에 접근 조차 불가능해질 수 있는 매우 안좋은 시그널이었기에 신속하게 집으로 가져왔다.

컴퓨터를 열어보니 예상과는 달리(?) HDD가 아닌 SSD가 달려있었는데, 사용하던 데스크탑에서 SSD 가 부족하여 새로운 SSD를 구매 후 운영체제 까지 통째로 영혼까지 복제 해버리는 마이그레이션(migration) 작업을 한두번 해본게 아니었기 때문에 쿠팡에서 WD의 보급형 SSD를 주문하여 마이그레이션 툴을 작동시키면 금방 고칠 것이라 생각했다.

그런데 왠걸, Macrium reflect / Acronis / Clonezilla 등 하드디스크 복제를 위한 마이그레이션 프로그램 중 가장 유명한 3종 세트를 다 동원해봐도 진행률 13% 수준에서 지속적으로 복제에 실패 했다는 메세지를 표시하며 진행이 안되었다. Macrium을 기준으로 오류메세지는 아래와 같았다.

Clone failed – Error 0 – Read failed – 23 – Data error (cyclic redundancy check)
Error Code 23 – Data error (cyclic redundancy check)

Macrium reflect

그래서, 이 글은 Macrium reflect, Acronis true image, Clonezilla 어떤 마이그레이션 프로그램으로도 복제하지 못하던 심각하게 손상된 SSD를 오픈소스 툴 GNU DDRescue를 통해서 복원해낸 이야기이다.

하드디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD)는 컴퓨터 시스템의 중요한 데이터 저장 장치로 사용되지만, 이들의 수명은 무한하지 않다.

HDD의 유한한 수명

  1. 기계적 마모: HDD는 회전하는 디스크, 이동하는 읽기/쓰기 헤드 같은 기계적 부품을 사용하여 데이터를 저장한다. 이런 부품은 지속적인 사용으로 인해 마모되고, 결국 고장날 수 있다.
  2. 물리적 손상 가능성: HDD는 충격이나 떨어뜨림과 같은 물리적인 힘에 취약하다. 이런 충격에 의해 내부 부품이 손상되면 드라이브가 작동을 멈출 수 있다.
  3. 열적 스트레스: 장시간 사용으로 인해 발생하는 열은 HDD의 부품을 약화시키고 수명을 단축시킬 수 있다.

SSD의 유한한 수명

  1. 셀 마모: SSD는 NAND 플래시 메모리를 사용해 데이터를 저장한다. 이 NAND 메모리 셀은 현재 기술에서 제한된 횟수의 쓰기/지우기 사이클만 견딜 수 있으며, 이 한계에 도달하면 더 이상 사용할 수 없게 된다.
  2. 컨트롤러의 수명: SSD의 컨트롤러는 데이터의 읽기 및 쓰기 작업을 관리한다. 이 컨트롤러도 일정시간이 지나면 열적/전자적 손상에 따라 결국 고장날 수 있다.

결국 HDD/SSD 든 유한한 수명을 가지고 있고, 언젠가는 고장이 난다는 말인데 이번에 고장난 컴퓨터와 같이 쓰기 작업이 빈번한 컴퓨터에서 사용되는 SSD의 경우 그 수명은 생각보다도 훨씬 짧다. 그나마 읽기라도 가능한 상태라면 새로운 SSD를 구매하여 복제를 하면 되겠으나, 이번과 같이 정상적인 읽기 조차 어려운 상황이라면 조금 다른 접근 방법이 필요하다.

DDRescue에 관하여

DDrescue (GNU ddrescue)는 데이터 복구 도구로, 손상되거나 오류가 발생한 드라이브에서 데이터를 복구하는 데 사용된다. 이 프로그램의 핵심 알고리즘은 다음과 같이 정교하게 작동한다. chkdsk 등으로도 복구가 안되는 하드디스크들에 대해서되 최선의 결과를 보장한다.

  1. 선형 복구: DDrescue는 처음에 디스크의 데이터를 선형적으로 읽는다. 즉, 시작 부분부터 순서대로 데이터를 읽어 들인다. 이 단계에서는 오류가 발생하지 않은 영역을 대상 디스크로 빠르게 복사한다.
  2. 오류 처리: 오류가 발생하는 영역을 만나면, DDrescue는 그 위치를 기록하고 건너뛴 후 다음 영역의 복사를 계속한다. 이렇게 함으로써, 복구 과정 자체가 디스크에 추가 손상의 원인으로 작용하는 것을 최소화하고 디스크의 오류가 적은 부분부터 데이터를 복구할 수 있다.
  3. 역방향 접근: 초기 스캔이 완료된 후, DDrescue는 오류가 발생한 영역을 역방향으로 접근하여 다시 시도한다. 이는 더 많은 데이터를 복구할 수 있는 기회를 제공한다.
  4. 분할 및 정복: 오류가 발생한 영역에 대해서는, DDrescue는 ‘분할 및 정복’ 알고리즘을 사용한다. 오류가 발생한 영역을 더 작은 부분으로 나누고, 각 부분을 개별적으로 처리하여 가능한 많은 데이터를 복구하려고 시도한다.
  5. 재시도: DDrescue는 설정에 따라 오류가 발생한 영역을 여러 번 재시도할 수 있다. 이 과정에서 더 많은 데이터가 복구될 수 있다.
  6. 로그 파일 사용: 복구 과정에서 DDrescue는 로그 파일을 사용하여 진행 상황을 기록한다. 이 로그 파일 덕분에 복구 과정을 중단했다가 나중에 다시 시작할 때 처음부터 다시 시작하는게 아니라 이전 작업을 이어갈 수 있다.

결국 DDrescue의 이러한 정교한 알고리즘은 특히 물리적으로 손상된 드라이브 또는 불안정한 드라이브에서 새로운 디스크 드라이브로 데이터를 복제/복구하는 데 유용하다.

DDRescue 사용 방법

1단계: 도구 준비

  • DDRescue: 리눅스 기반의 데이터 복구 도구
  • 새 SSD 또는 다른 저장 장치: 손상된 디스크에서 복구된 데이터를 저장할 장치(원본 손상디스크와 같거나 더 큰 용량 권장)
  • 부팅 가능한 리눅스 라이브 CD 또는 USB: 손상된 디스크에 저장된 운영체제를 통해 부팅 할 경우 해당 운영체제가 디스크를 사용하면서 손상된 디스크의 상태를 악화 시킬 수 있기 때문에, 시스템에 직접적인 영향을 주지 않고 리눅스 환경을 사용할 수 있도록 하는 부팅 가능한 리눅스 미디어가 필요하다.

2단계: 리눅스 라이브 환경 구축

  1. 리눅스 라이브 CD나 USB를 사용하여 컴퓨터를 부팅합니다.(부팅가능한 리눅스를 구축하는 방법은 검색엔진을 활용하면 쉽게 얻을 수 있으므로 패스)
  2. 필요한 경우, 인터넷을 통해 DDRescue를 설치합니다. 대부분의 리눅스 배포판에서는 패키지 관리자를 통해 쉽게 설치할 수 있다.

Ubuntu, Debian 및 Linux Mint에 ddrescue를 설치하려면
$ sudo apt install gddrescue

Fedora, CentOS, AlmaLinux 및 Red Hat에 ddrescue를 설치하려면:
$ sudo dnf install ddrescue

Arch Linux 및 Manjaro에 ddrescue를 설치하려면:
$ sudo pacman -S ddrescue

3단계: 손상된 SSD와 신규 SSD 연결

  1. 부팅 이전에 손상된 SSD와 신규 SSD를 컴퓨터에 연결한다.
  2. 드라이브 식별자 확인 : 리눅스에서는 일반적으로 lsblk 명령어를 통해 드라이브를 확인할 수 있습니다.

4단계: 복구 프로세스 실행

  1. 터미널을 열고 DDRescue 명령어를 실행합니다. 기본 형식은 다음과 같다.
    sudo ddrescue -d -r3 /dev/sdx /dev/sdy /path/to/logfile.log
    여기서 /dev/sdx는 손상된 드라이브, (lsblk 명령어로 확인)
    /dev/sdy는 데이터를 복구할 대상 드라이브, (lsblk 명령어로 확인)
    /path/to/logfile.log는 로그 파일의 경로이다.
  2. -r3 옵션은 DDRescue가 오류를 3번까지 재시도하도록 지시합니다. 이는 복구 가능성을 높이기 위함이다. 3보다 높은 숫자를 입력하면 더 많은 횟수를 시도하지만, 어차피 3회를 넘어서는 횟수를 시도한다고 복구확률이 높아지지 않을 뿐더러 숫자를 올릴 수록 복구를 완료하는데 필요한 시간이 기하급수적으로 증가하기 때문에 3을 추천한다.

5단계: 복구 상황 모니터링

  • DDRescue는 복구 진행 상황을 실시간으로 보여준다. 오류가 많은 영역에서는 속도가 느려질 수 있다.

6단계: 복구 완료 후 확인

  • 복구 프로세스가 완료되면, 손상된 SSD를 대신하여 복구된 SSD 를 해당 위치에 장착 이후 부팅을 시도하거나, 혹은 부팅 드라이브가 아니었다면 복구된 신규 SSD 파일시스템에 접근하여 복구된 데이터를 확인한다.

결론

이 방법을 통해 나는 어떠한 SSD 마이그레이션 프로그램으로도 복제가 불가능하던 SSD을 복제와 함께 데이터 역시 대부분 복원하는 것에 성공하였다. (심지어 복구된 SSD로 부팅 결과 아무런 문제도 없었다는 듯이 윈도우즈 운영체제가 동작) 다만 하드디스크의 손상 정도와 상황에 따라 복원의 수준이 달라질 수 있다보니 모두가 나와 같이 성공한다고 장담하긴 어렵다.

DDRescue는 무료 소프트웨어이지만, 정교하게 작동하고 충분히 시도해볼 가치가 있다. 특히 SSD가 손상되어 새로운 SSD로의 마이그레이션과 함께 데이터 복원도 안전하게 해내고 싶다면. (리눅스를 다룰 수 있는 기본적인 지식은 필요하다. 이게 어렵다면, 전문가의 도움을 받자.)