글쓴이 : 최장욱

출처 : http://kltp.kldp.org/stories.php?story=01/11/01/7561951

며칠 전에 약 1주일이 넘도록 힘들게 만들어 놓은 작업 데이타를 어쩌다가(지운 과정도 상당히 복잡하지만 생략) 결국 "rm -rf"로 지워 버리고 말았습니다. 결국 이틀이 걸려 제가 찾으려던 텍스트 화일 두개(크기는 각각 약 8KB, 97KB)를 복구하였습니다. 제가 한 과정을 요약해서 올립니다. (제 피씨는 wow 7.1 파란입니다.)

"적수네 동네"와 kldp.org에서 "rm -rf"로 지운 화일을 복구하는 데에 대해서 검색을 해 봤는데 우선 적수네 동네 질답게시판에서 tct라는 프로그램으로 복구할 수 있다는 말이 있었습니다. 그리고 kldp.org에서는 화일복구에 대한 mini-howto가 있었는데 저는 mini-howto를 쫓아 하다가 거기에 나오는 툴들이 시스템에 안 깔려 있길래 그냥 tct를 사용해서 복구를 했습니다.

tct는 http://www.fish.com/tct 에서 다운받을 수 있습니다. 프로그램의 설명서는 http://www.fish.com/tct/help-recovering-file 이 화일입니다.

제 경우는 홈디렉토리를 지웠습니다. 설명서에 보면 지운 화일이 속한 파티션에 더이상의 쓰기는 하지 말고 umount를 하라고 되어 있습니다. 저의 경우는 홈디렉토리가 루트디렉토리(/)에 있어서 umount를 하지는 못했고, 마침 안 쓰고 있던 파티션이 있었는데 거기에서 지금부터 하는 작업 모두를 해서 화일이 삭제된 파티션을 더이상 쓰지 않았습니다.

tct를 사용하려면 화일이 지워진 파티션의 빈 공간(저의 경우 2.5GB)보다 2.2배 정도의 빈 공간이 다른 파티션에 필요합니다. 저는 마침 6.7GB의 빈 공간이 되는 파티션이 있었는데, 정말 tct로 작업을 다 하니 6.7GB가 정말 다 차 버렸습니다.

이제 복구를 하는데 물론 root로 합니다. tct를 받아서 빈 파티션에 풀고 컴파일했습니다. (./configure를 하고 make all 만 하고 make install은 안 했습니다.) 복구는 두 단계로 나뉩니다. 작업은 tct를 압축풀은 바로 그 디렉토리에서 합니다.

1. 먼저 unrm으로 해당 파티션의 빈 공간을 하나의 커다란 화일로 덤프합니다.
$ bin/unrm /dev/hda7 > dump

2. 그 다음 lazarus로 덤프된 큰 화일을 지워지기 전엔 하나의 화일이었다 생각되는데로 화일단위로 쪼갭니다. (설명서에 보면 시간이 많이 걸린다고 되어 있는데 이 작업이 저의 경우 약 24시간은 걸린 것 같습니다.)
$ bin/lazarus -h dump

lazarus를 백그라운드로 돌려 놓고 보면 blocks라는 디렉토리와 www라는 디렉토리가 생기고 html 화일들이 세 개 생깁니다. 실제 blocks라는 화일에 덤프화일이 조각조각 쪼개져 저장이 됩니다. 운이 좋으면 초기에 쪼개져 나온 화일들 중에서 grep으로 잃어 버린 화일을 찾을 수도 있습니다.

예를 들어 지운 화일에 아주 특이한 단어가 들어 있다면(예를 들어 자기 이름) 그것으로 grep 하면 금방 찾을 수가 있습니다. 저의 경우는 운이 없었는지 해당 화일이 하드디스크 뒷부분에 있었는지 24시간이 다 지난 다음에야 찾을 수 있었습니다.

참고로 dump화일이 2GB가 넘으면 리눅스 커널과 펄(lazarus가 사용함)이 모두 2GB를 지원해야 lazarus가 실행이 됩니다. 제 덤프화일은 3.5GB여서 역시 처리를 못했는데 펄을 다시 최신 소스를 받아다 설치를 하니(물론 지워진 파티션에 설치하면 안 됨) lazarus가 그제서야 실행이 되었습니다(lazarus화일을 열어 첫 줄의 perl 위치를 바꿔줘야 함).

그리고 blocks안의 화일이 너무 많으면 grep도 화일이 너무 많다고 해서 동작을 못하는데(저의 경우도 역시 이랬습니다.) 이럴 때는
$ grep 문자열 1????.txt
$ grep 문자열 2????.txt
$ grep 문자열 3????.txt
...

이런 식으로 나누어서 grep 해주면 됩니다.

사실 시간이 총 이틀 정도 걸렸는데(백그라운드로 돌려 놓고 대부분 다른 일을 하긴 했지만) 이 방법이 아니라, inode 관련한 mini-howto 방법은 더 빠를지 저도 잘 모르겠구요. 시간이 좀 걸리더라도 중요한 화일을 꼭 복구해야 하는 분은 한번 시도해 보세요. 물론 덤프된 화일 사이즈가 작다면 시간은 그렇게까지 많이 걸리지는 않을 것입니다.

관련 링크: http://kltp.kldp.org/stories.php?story=01/11/01/7561951

'System' 카테고리의 다른 글

Journaling Filesystem & XFS  (1) 2002.03.24
readonly 파티션 rw로 다시 마운트하기?  (2) 2002.02.20
시스템 재해 복구 연습 해보기  (0) 2002.01.20
여러 가지 커널 팁 #2  (0) 2001.12.26
여러 가지 커널 팁 #1  (1) 2001.12.26

+ Recent posts