testdisk를 사용하여 Linux에서 삭제된 파일을 복구하는 방법

실수로 파일을 삭제하고 즉시 후회한 적이 있으신가요? 급하게 복구해야 할 때, 특히 백업이 없는 새 파일이라면 더욱 난감합니다. 하지만 다행히도 해결 방법이 있습니다.

rm 명령어, 후회의 약자일까요?

터미널에서 `rm` 명령어를 사용하는 것은 매우 쉽지만, 실수로 와일드카드를 잘못 사용해 예상보다 많은 파일을 삭제하고 후회하는 경우가 종종 있습니다.

Linux의 기본 파일 시스템인 ext4는 각 파일의 데이터를 저장하기 위해 inode를 사용하며, inode 테이블을 통해 inode를 추적합니다. inode는 파일 이름, 소유자, 권한 등과 같은 메타데이터를 포함합니다.

또한 inode는 파일을 가리키는 하드 링크의 진입점도 포함합니다. 모든 파일은 최소한 하나의 하드 링크를 가지고 있으며, 새 하드 링크를 만들 때마다 하드 링크 수가 증가하고, 제거할 때마다 감소합니다.

파일 삭제는 inode가 “사용되지 않음”으로 표시되고 재사용 준비가 되면 마지막 하드 링크가 제거되는 방식으로 이루어집니다. 이렇게 되면 파일은 디렉토리 목록에서 사라지고, 접근이 불가능해집니다.

하지만 파일 내용을 구성하는 데이터는 여전히 하드 드라이브에 남아 있습니다. 만약 inode를 수정하여 올바른 정보를 포함하도록 패치할 수 있다면 파일을 복원할 수 있습니다. 물론 이는 하드 드라이브의 데이터가 손상되거나 덮어쓰여지지 않았을 경우에만 가능합니다.

또는 새 inode를 생성하고 이전 inode의 데이터를 복사한 후 부족한 부분을 채울 수도 있습니다. 그러나 이러한 작업들은 꽤 복잡합니다. 실수로 파일을 삭제했을 때는 보통 시간이 부족하며, 특히 방금 생성한 파일이라면 백업이 없을 가능성이 큽니다.

이럴 때 필요한 것이 바로 TestDisk입니다. TestDisk는 사용하기 쉽고, 파일 시스템에 대한 깊은 지식이 없어도 삭제된 파일을 복구할 수 있게 해줍니다. 이제 TestDisk 사용법을 알아보겠습니다.

TestDisk 설치

Ubuntu에 TestDisk를 설치하려면 다음 명령어를 입력하세요.

sudo apt-get install testdisk

Fedora에서는 다음 명령어를 사용해야 합니다.

sudo dnf install testdisk

Manjaro에서는 pacman을 사용해야 합니다.

sudo pacman -Sy testdisk

TestDisk 사용법

TestDisk는 터미널에서 실행되지만, 기본적인 인터페이스를 제공합니다. 화살표 키로 탐색하고, Enter 키로 선택할 수 있습니다. 복원된 파일을 저장할 디렉토리를 미리 만드는 것이 좋습니다.

복원된 파일들을 저장할 “restored” 디렉토리를 만들기 위해 다음 명령어를 입력하세요.

mkdir restored

새 디렉토리로 이동한 후, 그곳에서 TestDisk를 실행합니다.

cd restored/

TestDisk는 root 권한이 필요하므로 다음 명령어를 사용합니다.

sudo testdisk

TestDisk는 먼저 로깅에 대한 질문을 합니다. 새 로그 파일을 만들거나, 기존 파일을 사용하거나, 로깅을 하지 않을 수도 있습니다. 어떤 옵션을 선택하든 TestDisk 작동 방식에는 영향을 미치지 않습니다.

Enter 키를 눌러 강조 표시된 옵션을 선택하고 새 로그 파일을 생성합니다. 이 파일은 TestDisk를 실행한 디렉토리에 생성됩니다. 다음으로 TestDisk는 작업할 파일 시스템이 있는 하드 드라이브를 선택하라고 합니다.

사용 가능한 하드 드라이브와 squashfs “/dev/loop” 파일들이 나열됩니다. 이는 스냅으로 설치한 각 애플리케이션에 해당하며, 읽기 전용이므로 삭제할 필요가 없습니다.

이 테스트 컴퓨터에는 물리적 하드 드라이브가 하나뿐이므로, 아래쪽 화살표를 사용하여 “/dev/sda” 옵션을 강조 표시한 다음, 오른쪽 화살표를 사용하여 “진행”을 선택하고 Enter 키를 누릅니다.

TestDisk는 파티션 유형도 확인해야 합니다. 화면 하단에 자동 감지된 파티션 유형과 함께 옵션 메뉴가 나타납니다.

특별한 이유가 없다면, 자동 감지된 파티션 유형을 강조 표시한 후 Enter 키를 누릅니다.

표시되는 기능 메뉴에서 “고급”을 선택하고 Enter 키를 누릅니다.

파티션 선택 메뉴가 나타납니다.

복구하려는 파일은 Linux 파일 시스템 파티션에 있습니다. 하드 드라이브에 여러 Linux 파티션이 있을 수 있습니다.

파일이 있던 파티션을 선택하고, 왼쪽 및 오른쪽 화살표 키를 사용하여 “목록”을 선택한 후 Enter 키를 누릅니다. 파일 선택 메뉴가 나타납니다.

위쪽 및 아래쪽 화살표 키 또는 PgUp 및 PgDn 키를 사용하여 파일과 디렉토리 목록을 탐색합니다. 디렉토리로 들어가려면 오른쪽 화살표 또는 Enter 키를 누르고, 디렉토리에서 나오려면 왼쪽 화살표 또는 Esc 키를 누르십시오.

예를 들어, dave 소유의 파일을 찾고 있다면, 모든 사용자 계정 파일은 “홈” 디렉토리에 있습니다. 따라서 “홈” 디렉토리를 강조 표시한 다음, 오른쪽 화살표 또는 Enter 키를 눌러 디렉토리로 이동할 수 있습니다.

그러면 모든 사용자 계정이 나열됩니다. dave를 강조 표시하고 오른쪽 화살표 또는 Enter 키를 눌러 해당 디렉토리로 들어갑니다.

이제 dave 계정에 속한 파일들을 볼 수 있습니다. 빨간색으로 표시된 항목은 삭제된 파일입니다. 복구할 파일을 찾을 때까지 파일 및 디렉토리를 탐색합니다.

파일을 복구하려면, 해당 파일을 강조 표시한 다음, ‘c’ 키(소문자)를 누릅니다.

디스플레이가 변경되고 복구된 파일을 저장할 위치를 선택하라는 메시지가 표시됩니다. “restored”라는 디렉토리를 만들고 TestDisk를 실행했으므로, 목록(.)의 첫 번째 항목이 해당 디렉토리입니다. 삭제된 파일을 복구하려면 ‘C’ 키(대문자)를 누릅니다.

이렇게 하면 파일 선택 화면으로 돌아갑니다. 더 많은 파일을 복구하려면 이 과정을 반복하면 됩니다. 삭제된 파일을 선택하고 ‘c'(소문자)를 눌러 복사하고, ‘C'(대문자)를 눌러 복구합니다.

복원된 파일 작업

파일을 복원하면, 디렉토리 트리가 원래 위치로 재구성되어 하드 드라이브에서 파일이 원래 어디에 있었는지 알 수 있습니다. 이는 파일을 다시 복사해야 하는 경우 유용합니다.

만약 동일한 파일 이름을 가진 여러 파일을 복구해야 한다면, 별도의 위치에 저장해야 합니다.

“restored” 디렉토리의 내용을 보려면 다음 명령어를 입력하세요.

ls

TestDisk에서 로그 파일 생성을 요청했다면, 그 파일 또한 “restored” 디렉토리에 있을 것입니다. 복구된 파일은 “/home/dave”에 있었기 때문에 “restored” 디렉토리 안에 동일한 이름의 디렉토리에 복사됩니다.

`cd` 명령어를 사용하여 복사된 “dave” 디렉토리로 이동할 수 있습니다. 경로에 선행 슬래시(/)가 없는지 확인하세요. 시스템의 “/home”이 아닌 로컬 “home”으로 이동해야 합니다.

다음 명령어를 입력합니다.

cd home/dave

이제 복구된 파일들이 해당 디렉토리에 있으므로 다음 명령어를 입력하여 확인할 수 있습니다.

ls

`-l` (긴 목록) 옵션을 사용하여 복구된 파일을 자세히 살펴봅시다.

ls -l

TestDisk를 실행할 때 sudo를 사용했기 때문에 복구된 파일은 “root” 소유자로 복원되었습니다. `chown` 명령어를 사용하여 소유자를 다시 “dave”로 변경할 수 있습니다.

sudo chown dave.dave *

올바른 소유권이 복원되었는지 확인하려면 다음 명령어를 사용하세요.

ls -l

TestDisk: 위기를 위한 코드

복구할 수 없다고 생각했던 중요한 파일을 되찾았을 때의 안도감은 이루 말할 수 없습니다.

이것이 바로 TestDisk가 유용한 유틸리티인 이유입니다. 메뉴를 따라 복구를 시작하면, 강조 표시, ‘c’, ‘C’, 그리고 반복이라는 단순한 리듬에 빠져 파일을 쉽게 복구할 수 있습니다.