
화면이 갑자기 까매지거나 노트북이 아무런 경고 없이 멈춰 버린 경험이 있으신가요? 하드 드라이브에서 '딸깍' 거리는 소음이 들리기 시작했을 수도 있습니다. 더 심각한 경우에는 홈 파티션에 파일을 저장하는 것 자체가 불가능해질 수도 있습니다.
손상되었거나 고장 난 드라이브의 이러한 징후들은 누구나 식은땀을 흘리게 만듭니다. 하지만 그렇다고 해서 컴퓨터를 바로 버릴 필요는 없습니다. 이 글에서는 리눅스 환경에서 데이터를 복구하고 디지털 생활을 정상으로 되돌리는 데 도움이 되는 7가지 도구를 소개합니다.
1. Trinity Rescue Kit
데이터 복구 전용으로 만들어진 라이브 리눅스 배포판인 Trinity Rescue Kit(TRK)는 오랫동안 개발이 중단된 것처럼 보였지만, 얼마 전 개발자가 갑작스럽게 업데이트를 출시하면서 최신 컴퓨터에서도 더욱 원활하게 작동하게 되었습니다.

Trinity Rescue Kit란 무엇일까요? 기본적으로 사용 중인 리눅스 OS(윈도우나 macOS도 마찬가지)가 하드 드라이브 고장 등의 문제로 부팅되지 않을 때, TRK USB 드라이브를 만들어 부팅한 뒤 명령줄을 통해 기존 OS에서 데이터를 추출할 수 있습니다. 일종의 구조 디스크인 셈인데, 비밀번호 복구나 바이러스 검사 같은 추가 기능까지 갖춘 상당히 훌륭한 도구입니다.
물론 손상되었거나 접근할 수 없는 하드 드라이브를 샅샅이 뒤져 복구 가능한 파일을 찾아내는 대량 삭제 복구(undelete) 유틸리티도 포함되어 있으며, 마스터 부트 레코드(MBR) 복구 옵션도 여러 가지 제공합니다. 다만 이 모든 기능을 제대로 활용하려면 상당히 가파른 학습 곡선을 넘어야 한다는 점은 감안해야 합니다.
2. Testdisk
일부 리눅스 복구 도구는 손상된 파티션에서 복구 가능한 데이터를 그대로 복사하는 방식으로 데이터를 구하려 합니다. 이 방법도 효과가 있긴 하지만, 파티션 자체의 문제로 원하는 데이터에 접근하지 못할 수 있어 항상 성공한다고 보장하기는 어렵습니다.

TestDisk는 바로 이 지점에서 빛을 발합니다. 파티션 수준의 오류를 실제로 수정할 수 있어서, TestDisk 자체나 다른 데이터 복구 도구를 사용한 복구 작업이 훨씬 수월해집니다. 경우에 따라서는 손상된 하드 드라이브를 완전히 고쳐 리눅스 PC를 다시 정상적으로 작동시키고 데이터에 직접 접근할 수 있게 해주기도 합니다.
부트 섹터와 파일 시스템 테이블 복원 같은 심층 작업은 물론이고, NTFS, FAT, exFAT, ext 형식의 하드 드라이브에서 삭제된 데이터까지 복구할 수 있습니다.
리눅스에 TestDisk를 설치하려면 터미널을 열고 다음 명령어를 입력하세요.
sudo apt-get install testdisk
TestDisk 사용법을 더 자세히 알고 싶다면 관련 가이드 문서를 참고하는 것도 좋은 방법입니다.
3. ddrescue
ddrescue는 이름만 보면 데이터 복구 도구가 아니지만, 파일 복구 여정의 첫걸음으로 삼아야 할 도구입니다. ddrescue는 손상된 드라이브나 파티션의 이미지를 생성해 주므로, 고장 난 디스크의 복사본을 대상으로 분석 작업을 진행할 수 있습니다.
아래에서 소개할 도구들로 파일 복구 작업을 시작하기 전에 반드시 디스크를 별도의 이미지로 복제하세요. 실제 고장 난 드라이브를 사용할수록 손상은 더욱 악화될 수 있습니다.

위 이미지는 ddrescue가 실행되는 모습입니다. 첫 번째 명령은 디스크 전체를 "backup.img"라는 이미지 파일로 복사하고, 두 번째 명령은 불량 블록만 해당 이미지에 추가로 복사하면서 각 블록을 세 번씩 읽기를 시도합니다.
동일한 명령을 실행할 때는 반드시 로그파일(logfile)을 사용하세요. 백업에는 몇 시간 혹은 며칠이 걸릴 수 있으며, 로그파일이 없으면 작업이 중단될 경우 처음부터 다시 시작해야 합니다.
디스크나 파티션에 대한 복제가 완료되면 생성된 이미지를 마운트하고 이후 소개할 유틸리티들을 사용해 파일을 복구하면 됩니다. 이 글의 다른 리눅스 복구 도구들도 여기서 만든 "backup.img"에서 데이터를 가져오게 됩니다.
4. Foremost
Foremost는 일반적인 파일 유형의 데이터 구조를 활용해 데이터를 복구합니다. 디스크 이미지 전체를 훑어 모든 파일을 찾아낼 수도 있고, 관심 있는 특정 파일 유형만 지정할 수도 있습니다.

위 화면은 Foremost를 상세 모드(-v 옵션)로 실행한 결과입니다. -t 옵션은 jpg 파일 유형을 검색하며, -i와 -o 옵션은 각각 입력 파일과 출력 디렉터리를 지정합니다.
Foremost가 이전 단계에서 ddrescue가 만든 이미지를 분석하는 모습을 볼 수 있습니다. 해당 이미지 안에는 여러 개의 JPEG 파일이 들어 있었고, Foremost는 열 개의 파일을 찾아낸 뒤 이미지 탐색을 마치며 지정된 출력 폴더에 그 파일들을 복사했습니다.
5. Scalpel
Foremost를 기반으로 만들어진 Scalpel은 효율성에 초점을 맞춘 도구입니다. 멀티스레딩과 비동기 입출력(asynchronous I/O)을 활용해 이미지를 효율적으로 검색하며, 사용자가 파일 복구에 사용할 헤더와 푸터의 개수를 직접 지정할 수도 있습니다.
또한 Scalpel의 설정 파일을 편집해 복구하고 싶은 파일 유형을 지정할 수 있습니다. 기본 설정만으로도 상세 모드(-v 매개변수)를 켜지 않았는데도 많은 출력 결과를 생성합니다.

위 스크린샷에서는 Scalpel이 "backup.img"를 분석한 최종 결과를 확인할 수 있습니다. 스크린샷 하단에 표시된 기본 명령은 출력 디렉터리와 분석 대상 이미지만 지정하면 됩니다.
6. PhotoRec
PhotoRec은 사진, 동영상, 텍스트 문서 복구에 특화된 도구로 다른 경쟁 도구들과 차별화됩니다. 콘솔 내에서 대화형 유틸리티로 작동한다는 것도 특징입니다. 그 위용을 직접 확인해 보세요.

PhotoRec의 초기 명령에는 분석할 이미지(여기서는 backup.img)와 출력 폴더를 지정해야 합니다. 그러면 PhotoRec은 사용자를 자체적인 그래픽 환경으로 안내합니다. 위 스크린샷은 이미지 크기를 보여주는 화면이며, 이후 화면에서는 디스크의 파티션 유형과 이미지 전체를 검색할지 여부를 묻습니다.
7. grep
마지막으로 살펴볼 도구는 grep입니다. 가장 직관적인 복구 방법은 아니어 보이지만, grep은 블록 장치나 디스크 이미지에서 문자열을 검색해 삭제되거나 잃어버린 텍스트 파일을 찾아내는 강력한 능력을 지니고 있습니다.
예를 들어 backup.img 안에 "myfile"이라는 파일이 있다고 가정해 보겠습니다. 이 파일에는 "This is the file I will try to recover."라는 한 줄의 텍스트만 들어 있습니다.
grep은 이 문자열을 파일 복구의 출발점으로 삼습니다. 몇 가지 다른 매개변수와 함께, 이 예제에서는 발견된 문자열을 "foundtext"라는 새 바이너리 파일로 덤프하는 모습을 볼 수 있습니다.

특히 초기 명령에서 문자열 주변의 추가 맥락을 출력하는 -C 매개변수에 주의하고 상황에 맞게 조정해야 합니다. 예제 명령은 제공된 문자열 앞뒤로 각각 한 줄의 텍스트를 찾도록 grep에 지시합니다.
-C 200부터 설정하면 grep은 문자열 앞뒤로 각각 200줄을 찾아냅니다. 이 예제에서는 과분한 범위지만, 수백 줄에 달하는 큰 텍스트 파일에서는 매우 중요할 수 있습니다. 물론 grep이 검색을 시작할 출발점이 필요하므로 자신의 파일에 어떤 텍스트가 있었는지 알아야 합니다.
grep은 바이너리 파일을 출력물로 생성합니다. 그래도 일부는 사람이 읽을 수 있는데, 아래 스크린샷 하단 근처에서 원하는 텍스트 줄을 확인할 수 있습니다. 필요한 데이터를 직접 걸러내는 작업은 사용자의 몫입니다. 분명 고된 작업이지만, 파일을 아예 잃어버리는 것보다는 훨씬 낫습니다.

결론
정리하자면, 먼저 ddrescue로 드라이브나 파티션을 복제한 뒤, 그 복사본을 대상으로 필요한 다른 리눅스 복구 도구를 사용하는 것이 안전합니다. 첫 번째로 선택한 도구가 원하는 데이터를 찾지 못했다면 주저하지 말고 다른 도구도 함께 시도해 보세요.
인내심을 갖고 기다려 보세요. 운이 좋다면 어느새 소중한 파일들이 손에 돌아와 있을 것입니다.
이 글은 2018년 2월에 처음 게재되었으며 2019년 3월에 업데이트되었습니다.