가끔 지워서는 안 되는 파일을 지우기도 하는 것이 사람입니다.


보통 그럴때는 휴지통에서 복구하는 방법으로 해결하기도 하는데 사람이란것이 워낙 멍청한지라 정말 아무 생각없이 휴지통 비우기를 시전하는 경우도 있지요.


그럴 때 사용하는 프로그램으로 가장 유명한것이 Finaldata란 프로그램입니다.

http://www.finaldata.co.kr/


문제는 이 프로그램은 포렌식에 이용되는 것이기에 더럽게 비쌉니다. 보통 일반인은 이런 프로그램을 쓸 정도는 아닙니다.


이 프로그램은 주로 경찰이나 정보기관에서 주로 사용하는 프로그램입니다.


보통 일반인이 쓸 정도면 실수로 삭제했다가 어?하고 다시 복구해야 하는 경우겠지요. 일단 간단하게 USB메모리 정도를 생각할 수 있습니다. 내부 HDD에서 복구해야한다면 HDD를 떼다가 다른 컴퓨터에서 복구 프로그램을 돌리면 됩니다.


이런 프로그램을 간단하게 만든 것이 있는데 바로 testdisk란 프로그램입니다.


https://www.cgsecurity.org/wiki/TestDisk


간단하게 우분투에서는 그냥 apt로 설치가 가능합니다.


sudo apt-get install testdisk


다만 단점은 CLI프로그램이라 키보드만 사용가능하다는 점입니다.


예시로 다음과 같이 묶인 SDCARD를 복구해보겠습니다.

파일을 삭제한지 얼마 안 된 상황과 똑같은 상태로 만들어주는 Winmend folder hidden으로 폴더를 잠가놓았다. 삭제 후 작업을 하지 않은 상황과 같은 상황이다.

해당 SDCARD는 Winmend folder hiddne라는 도구로 암호화(!)되어 파일들이 숨겨진 상태입니다. 말이 좋아 숨겨진 상태이지 사실은 삭제 체크가 되어 읽혀지지 않는 상태입니다. (금방 삭제한 파일과 같은 상태라는 의미입니다.)해당 도구로 복구가 가능하긴 하지만 이것을 강제로 복구해보겠습니다.


터미널에서

sudo testdisk

명령을 통해 testdisk를 실행합니다.


영어라서 곤란한 사람이 있을 수도 있지만...

이 정도 영어는 다들 읽을 수 있을 것이라고 봅니다. (파일 복구한다면서 이 정도도 못 읽으면 이 참에 공부를 하셔야 할 겁니다.)


여기서는 파일 복구 기록을 남길것인지 아니면 안 남길것인지 물어보는 것입니다. 솔직히 복구가 완전히 안 됐을 경우를 대비해서 만들면 좋은데 나중되면 귀찮을 수도 있어서 알아서 선택하시기 바랍니다. 저는 No Log를 선택하겠습니다.


이제 복구하실 디스크를 선택하면 됩니다. 아까도 말했듯이 OS가 설치된 디스크는 떼어서 다른 컴퓨터에서 읽혀야합니다. 뭐하면 라이브USB에 testdisk만 설치해서 쓰는 방법도 있겠지요.


저는 USB메모리인 /dev/sdb를 선택할 예정입니다.


난감한 것이 나왔는데 파티션테이블 타입을 알려달라는 의미입니다. Intel과 EFI GPT 둘 중 하나일 것입니다. 요즘 OS는 GPT를 쓰는 경우도 많습니다. 어떤 것인지 모르시겠다면 디스크 유틸리티를 통해 알 수 있습니다.


여기서 보시면 파티션 만들기와 파티션 형식을 알 수 있는데 제 OS가 설치된 HDD는 파티션 만들기는 GUID이고 파티션 형식이 EFI라고 나옵니다. 즉, EFI GPT를 선택해야합니다. 그리고 USB메모리는 파티션 만들기가 주 부트영역이라고 나옵니다. 이걸 줄여서 우리는 MBR이라고도 합니다. 옛날 DOS시절부터 써오던 유서깊은 방식입니다. Testdisk에서는 Intel방식이라고 합니다.


저는 USB메모리(SDCARD)를 읽을 것이니 Intel을 선택하겠습니다.


여기서 많은 작업이 가능한데 숨겨진 파티션을 찾아내거나 부트옵션을 주거나 깨끗하게 싹 날리는 작업이 가능합니다. 그런데 지금 제가 말한 기능은 Gparted를 통해 편하게 작업이 가능합니다. 우리는 파일 복구를 위해서 이 프로그램을 쓰는 것이니 Advanced를 선택하겠습니다.


파일 복구 작업을 하기 위한 파티션을 선택하라고 나옵니다. 파티션이 두 개 이상이라면 해당 파티션을 선택하시고 아래의 Undelete를 좌우 방향키로 조정한 다음 Enter키를 누르면 됩니다. 저는 파티션이 하나뿐이니 하나만 뜨네요.


디스크를 잘못 선택했다면 q를 눌러서 뒤로 돌아갈 수 있습니다.(이것은 공통입니다.)


Undelete를 누릅시다.



빨간색으로 표시된 것이 삭제된 파일, 폴더를 의미합니다. 여기서 좌우 방향키를 누르면 해당 폴더로 들어갈 수 있고 파일을 살펴볼 수 있습니다.


복구하고 싶으신 파일을  :로 선택하실 수 있습니다. (Shift+;) 아래 내용을 보시면 알겠지만 여기서 Shift+C를 누르면 선택된 파일을 복구 할 수 있습니다. a를 누르면 현재 폴더에 들어있는 모든 파일을 선택 가능합니다.


파일 하나만 복구하시려면 그냥 c만 눌러서 바로 아래 작업을 할 수 있습니다.


초록색이 선택받은(?)파일들이다.여기서 Shift+C를 누르면 복구를 위한 저장폴더 선택을 할 수 있다.

Shfit+C를 누르면 갑자기 명령을 내렸을 때의 폴더가 덜컥 튀어나옵니다.

저는 홈폴더에서 프로그램을 실행했기에 홈폴더가 나오는군요.


여기서 복구될 파일이 저장될 곳을 선택해주시면 됩니다. 미리 폴더를 만들어두셔야 편하겠지요.

저는 ~/restore라는 폴더에 저장하겠습니다.


여기서 다시 Shift+C를 눌러주시면 복구를 시작합니다.


그리고 어떤 파일이 Fail되었는지 어떤 파일이 성공했는지 알 수 있습니다. 

저는 다행히 전부 성공했습니다. (사실 Winmein으로 잠긴 파일은 무조건 성공합니다. 금방 삭제된 상태와 동일하거든요. 어떤 파일이든 삭제된 시점에서 사용시간이 얼마 지나지 않을 수록 복구가 가능해집니다.)


자물쇠 마크는 root권한으로 만들어져서 그런것이다. chmod 666으로 누구나 읽을 수 있게 하자. (사실 읽는 것은 문제없다.)


복구파일을 저장한 곳에 의문의 폴더가 생성되어있고

해당 폴더에 들어가면...



해당 파일이 복구 되어있습니다!!!!


참고로 지금까지 저는 돈 한 푼 안 들이고 파일 복구 작업을 했습니다.

아마추어 파일 복구가 생각보다 어렵지 않습니다.


다만, 파일용량이 얼마 되지 않아서 파일복구가 어렵지 않았고 만약 파일이 크다면 복구하기가 어려웠을 것입니다. 무엇보다 저는 임의로 Winmein Folder Hidden이란 프로그램으로 파일을 삭제된 상태로 얼려주는(그렇기에 폴더를 숨길 수 있지요.)상태로 만들었기에 100%성공을 할 수 있었지만 만약 사용중이던 디스크면 복구가 어려워집니다.


참고로 Winmein Folder Hidden으로 숨겨진 파일을 이런 식으로 복구 할 수도 있습니다.(백날 이런식으로 숨겨봐야 데이터가 있으면 다 찾아냅니다. 차라리 그냥 암호화해서 압축하세요.)


이제 복구하는 방법을 아셨으니 복구를 못하게 하는 법을 알려드리겠습니다.


간단합니다. 그냥 용량 큰 파일을 해당 디스크에 여러번 복사해서 덮어주시면 이런 식으로 복구가 안 됩니다. 아니면 dd를 이용해서


sudo dd if=/dev/zero of=/dev/디스크위치 bs=10M


이렇게 하시면 그냥 싹 제로필해서 이 프로그램으로 복구가 안 됩니다. 대신 파티션 테이블도 날아가니 Gparted를 통해 파티션테이블을 다시 만들 필요는 있겠지요.

,