Saturday, June 27, 2015

a way to recover data

photorec

photorec


이 문서는 e[⎋esc]m[⌘meta]a[⌥alt]c[⌃ctrl]s[⇧shift] org-mode로 작성된 글입니다.


System Environments

Operating Systems

  • Main- : OS X Yosemite (10.10.3)
  • Sub- : Debian GNU/Linux Jessie (8.1)
  • Server: Debian GNU/Linux Wheezy || Squeeze
  • Mobile: iOS 7.1.2

PhotoRecGNU General Public License로 배포되는 데이터 복구 소프트웨어이다. TestDisk를 깔면 함께 설치되며, TestDisk로도 살리지 못한 데이터를 복구할 수 있다. Debian GNU/Linux, Kubuntu 등의 Linux는 물론, OSX에서도 MacPorts를 통해 사용할 수 있다. Christophe GRENIERCGSecurity에서 더 많은 정보를 찾아볼 수 있다.

내 경우는 메인 OSX보다는 서브컴 Debian 8.1에서 주로 진행했고, 데이터를 날린 초기에는 8GB USB에 설치한 Kubuntu 12.04에서도 10% 정도를 복구했다. (자세한 초기 상황은 지난 Post를 참고하자.) 다 복구 할 수 있다는 기대는 하지도 않았고, 그럴 돈도 없고 특히 시간이 없다. 중요한 데이터는 거의 메인 OSX에 있고 백업도 잘 되어있다. 날린 것은 서브컴의 하드 30% 정도와 외장하드의 70% 가량이었다. 내장하드는 그냥 내가 실수로 지웠다. (직접 다시 적으니 정말 한 숨만 나온다.)

다른 더 좋고 비싼 전문 소프트웨어를 써야 할 정도의 데이터는 아니었기에 진행했다는 점을 반드시 명심해 두자. 여기에 기술한 데로 한다고 해서, 어떠한 것도 보장할 수 없다는 점을 다시 한번 꼭 밝히고 싶다.

PhotoRec

주의 사항

  1. 데이터 복구는 우선 TestDisk를 써보자. 그래도 안되면 PhotoRec를 쓰자.
  2. 복구를 하더라도 파일 이름까지 그대로 되살리지는 못 한다. 즉, f0123456789.dat 같이 무작위로 이름이 부여된다.
  3. 위의 이유로 인해 복구를 하더라도, 정말 쓸 수 있게 만드는데 엄청난 시간이 요구된다.

상상이 되는가? 동영상이나 사진은 직접 보고 그게 뭔지 확인해야 하고, .iso.dmg 등의 이미지 파일은 직접 마운트를 해봐야 한다!!!

동영상이야 그래도 몇 백 개까지(?)는 직접 확인한다고 쳐도, 사진은 단위가 다르니 엄두가 안 난다. 자막 파일이야 복구만 된다면, 어차피 text니깐 EasyFind 같은 OSX 용 소프트웨어를 쓰면 어찌어찌한다 치더라도, .7z 이나 .zip 같은 압축 파일들은 또 언제 다 압축을 푸나. 게다가 .smi 자막 파일은 제대로 잘 찾지도 못 한다.

여기까지 쓰니, 웃음밖에 안 나온다. 첫째도 백업, 둘째도 백업이다. 별로 안 중요해도 복구에 시간이 걸리는 것도 백업하자.

내가 복구한 것들

사진이나 압축 파일들은 깔끔히 포기하고, 동영상과 디스크 이미지 파일에 집중했다. 특히, 자막이 포함될 수 있는 동영상인 .m4v, .mp4, .mkv 를 집중적으로 우선 살렸다. 나머지는 위에서 언급한 데로 일일이 확인하는 데 시간이 걸리니, 복구는 해 놓고 짬짬이 할 요량이다. 아니면, 아싸리 다 버릴 수도 있다. 그래도 언제 또 필요할 때가 올지 모르니, 시도해본 것들을 여기에 정리한다.

주로 참고한 곳들은 http://www.cgsecurity.org/wiki/Add_your_own_extension_to_PhotoRec, http://techglimpse.com/photorec-recover-add-specific-file-type/ 이다.

Basic understanding how it works

PhotoRec는 TestDisk를 설치하면 함께 깔린다. Debian GNU/Linux나 Kubuntu 경우는 아래 명령어로 설치할 수 있다.

$ sudo apt-get install testdisk

설치하는 OS마다 PhotoRec 버전에 변화가 좀 있으므로 복구 대상 파일을 인식하는데 조금씩 차이가 있을 수 있다. 아래 표에 간단히 정리해 보았다.

복구 대상 파일   인식하는 이름
m4v/mp4 : mov or mp4
mkv : mkv
avi : riff or avi
dmg : bz2 or unknown
iso : iso
srt : txt or unknown
smi : java or txt or unknown

일단, TestDisk를 깔아서 PhotoRec를 쓸 수 있게 되면, fidentify 명령어를 쓸 수 있다. 이는 위의 표에서 정리한 것처럼 복구 대상 파일을 PhotoRec가 인식하는 이름을 알 수 있게 해준다. 예를 들어, example.iso 파일을 확인해 보려면, Bash에서 아래를 실행하면

$ sudo fidentify example.iso

다음과 같은 결과를 볼 수 있다.

example.iso: iso

위의 표에서 unknown으로 표현한 것들은 fidentify 명령어로 인식되지 않아서 결과가 아예 없는 경우를 뜻한다. 계속 읽어보면 의미를 알 수 있을 것이다.

FYI) 위에서 sudo 와 함께 사용하였는데, fidentify 명령어 자체에는 필요 없다. 즉, 그냥 fidentify example.iso 만으로도 확인은 가능하다. 하지만, 결국에는 photorecsudo 에서 사용할 것이므로, 이 Post에서는 앞으로 sudo 와 함께 표현할 것이다.

이 과정이 중요한 이유는 PhotoRec는 fidentify 명령어가 인식할 수 있는 파일만 복구할 수 있기 때문이다.

나머지 과정은 홈페이지에서 설명하는 데로 따라하면 된다. photorec 를 실행해서, 복구할 데이터가 있는 하드를 선택한 후, 복구할 파일 종류를 선택하고, 하드의 File Allocation Type (ext, fat, ntfs, etc)를 선택해서 진행하면 된다.

아래 GIF는 PhotoRec를 통해서 .isoOwn Custom Signitures 를 선택해서 복구하는 과정을 간단히 보여주고 있다.

18593934593_38fdf011f0_o.gif

Figure 1: Workflow of PhotoRec in Debian 7.8

Custom extensions: sami

fidentify 명령어가 모든 파일을 찾을 수 있는 것은 아니다. 아무 결과도 안 보이는 unknown으로 인식해서 복구 못 할 수 있다. 그렇지 않더라도 txt 로 인식하는 여러 파일 중 .srt 만 꼭 집어서 복구하고 싶은 경우도 있다. 지금부터, 인식 못하거나 java 로 인식하는 .smi 파일을 PhotoRec로 복구하고 싶은 경우에 fidentify 명령어가 인식하게 만드는 과정을 기술하려 한다.

  1. 테스트 삼아, fidentify 명령어로 example.smi 을 확인해 보면
    $ sudo fidentify example.smi
    

    아래와 같은 결과를 Bash에서 보거나

    example.smi: java
    

    아니면 아무 결과도 : 오른 편에 안보이거나 할 것이다. 이를 위의 표에서 unknown으로 표현하였다.

  2. 이를 인식하게 하려면, sami 파일의 hexadecimal (16진법) 정보를 우선 알아야 한다. Bash에서 아래 명령어를 실행하면
    $ hexdump -C example.smi | head
    

    다음과 같은 결과를 볼 수 있다.

    00000000  3c 53 41 4d 49 3e 0d 0a  3c 48 45 41 44 3e 0d 0a  |<SAMI>..<HEAD>..|
    00000010  3c .....
    

    물론, 여기서 계속 예로 사용하는 파일인 example.smi 는 사용자가 임의로 만든 것이 아니라, 실제 자막 정보를 가지고 있는 진짜 sami 파일이어야 한다.

  3. 이제 .photorec.sig 파일이 필요한데, 이미 있을 수도 있고 없을 수도 있다. 있으면 $ sudo find / -name *.photorec* 명령어로 찾을 수 있다.
    /root/.photorec.cfg
    /home/UserName/.photorec.sig
    
  4. 중요한 것은 /root/ 디렉터리 아래에 이 파일이 있어야 한다는 점인데, 없으면 하나 만들자.
    $ sudo touch /root/.photorec.sig
    
  5. 이제 mousepad나 emacs같은 적당한 에디터로 이 파일을 열어
    $ sudo mousepad /root/.photorec.sig
    

    아래와 같이 적거나

    smi 0 "<SAMI>"
    

    hexadecimal (16진법) 정보 그대로 적자

    smi 0 0x3c53414d493e0d0a3c484541443e0d0a
    

    위에서, smifidentify 명령어가 토해낼 결과이고 0 0x 이후는 hexdump 명령어로 알아낸 hexadecimal (16진법) 정보 중 첫 줄을 띄어쓰기 없이 적은 것이다.

  6. 이제 photorec 명령어가 sami 파일을 정확히 인식하는 것을 확인할 수 있을 것이다.
    $ sudo fidentify example.smi
    example.smi: smi
    

이제, 위의 GIF에서 보듯이 [File Opt] 안에서 가장 상위에 있는 Own Custom Signitures 를 스페이스바키로 선택하면, .photorec.sig 파일에 직접 써넣은 확장자의 파일을 복구할 수 있다.

Custom extensions: others

같은 방법으로 원하는 파일 확장자(extension)을 지정해서 PhotoRec로 복구할 수 있다. 이를테면, .dmg.sh 경우의 hexadecimal (16진법) 정보는 아래와 같다.

  • .dmg
    00000000  78 da 63 60 18 05 43 18  fc fb ff ff 1d 10 33 02  |x.c`..C.......3.|
    or
    00000000  78 01 63 60 18 05 43 38  04 fe fd ff ff 0e 88 19  |x.c`..C8........|
    or
    00000000  78 da 73 0d 62 62 60 60  a8 f0 62 18 05 23 12 00  |x.s.bb``..b..#..|
    or
    00000000  78 01 73 0d e2 60 60 60  64 4b 67 18 05 23 32 04  |x.s..```dKg..#2.|
    
  • .sh
    00000000  23 21 20 2f 62 69 6e 2f  73 68 0d 0a 23 0d 0a 23  |#! /bin/sh..#..#|
    or
    00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 0a 66 75 6e  |#!/bin/bash..fun|
    

내 경우, 원하는 모든 인식하지 못하는 unknown 파일들을 root/.photorec.sig 에 몽땅 적어 넣었다.

srt 0 0x310a30303a30313a35362c303238202d
smi 0 0x3c53414d493e0d0a3c484541443e0d0a
dmg 0 0x78da636018054318fcfbffff1d103302
dmg 0 0x780163601805433804fefdffff0e8819
dmg 0 0x78da730d62626060a8f0621805231200
dmg 0 0x7801730de2606060644b671805233204

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Created: 2015-06-27 Sat 23:57

Emacs 24.3.1 (Org mode 8.2.10)

No comments:

Post a Comment