1. 슈퍼 블록의 구조체와, file 구조체, inode 구조체에 대한 정보를 얻어내었다.

2. 시스템 콜 레퍼런스를 구해서 구현 가능할 만한 파일이 있는지 확인해보았다.



결론을 내렸을 때,
시스템 콜이나 라이브러리로는 i-node 번호만으로 접근이 불가능하다.

뭐 내가 잘 모르는 것일 수도 있지만, 시스템 콜이나 라이브러리 상의 파일 컨트롤 함수들은

어디까지나 해당 파일이 존재할 때 사용하는 함수들이다.

대부분의 파일 컨트롤 함수들은 filepath를 문자열로 받거나, file descriptor를 인자로 받는다.

file descriptor를 받기 위해서는 open, 또는 creat 함수를 사용하는데, 이 때 사용하는 인자가

filepath 문자열이므로. 결국
파일 컨트롤 함수들의 시작은 파일의 경로를 입력하여 해당 파일을

읽어들이는 것이다.



3. 인터넷을 서핑하던 중, 재미있는 자료를 찾았다.

http://www.pyrasis.com/main/Ext2FileSystem

Ex2 파일 시스템에 대해 해설하면서, 파티션의 구조를 분석하는 것으로

이 문서가 아무래도 이번 프로젝트에 필요한 기술을 나열하고 있는 것으로 생각된다.


물리적 하드 디스크의 내용을 쓰는 과정은 이미 한번 해본 적이 있어서

비교적 테스트 파일을 만드는 과정이 쉬웠으며,

수행 결과는 다음과 같았다.

사용자 삽입 이미지

하드 디스크 읽기 테스트


확대해서 보면 마지막 지점에 아래에서 2번째 줄의 맨 끝에 2Byte가 55aa로 되어있는 것을 확인 할 수 있다.
한 줄에 16개의 byte를 나열하고 있고, 16번째 줄이므로, 해당 지점의 주소는

0x1fd ~ 0x1fe (55aa)

여기서 55aa는 MBR의 마지막 지점에 붙는 것으로
Boot Record Signature라고 부른다.

(Boot Record Signature 관련 설명은
http://www.cpqlinux.com/mbr.html 를 참조)


결국 이렇게 해서 하드 디스크에서 MBR을 찾아내는 과정을 완료하였다.

현재까지 알아낸 정보를 종합하여 프로그램의 수행 과정에 대해 적어보면


* rm 파일 복원 프로그램 - 전체적인 프로그램의 수행 순서

(1) 사용자로부터 복원 대상 하드 디스크를 선택받는다.
(2) 해당 디스크의 i-node 테이블들을 확인하면서 Link가 0인 inode를 찾는다.
(3) 찾아낸 inode들의 정보를 보여주면서 복원할 파일을 선택받는다.
(4) 해당 파일을 복구

'공부 > [2007] 유닉스 프로그래밍' 카테고리의 다른 글

2007/10/19 작업 내용  (0) 2007.10.19
2007/10/15 작업 내용  (0) 2007.10.15

1. 프레젠테이션 작성 시작

역시나, 시작이 반이라는 기분으로 프레젠테이션 작성 시작


2. 삭제된 파일을 i-node로 직접 접근 가능한지 테스트

테스트 방법은 다음과 같이

1. 내용이 있는 파일을 생성
2. 파일의 i-node를 stat 명령을 이용하여 확인
3. read( int filedes, char* buf, size_t nbyte ) 함수의 filedes 인자에 직접 i-node를 넣어봄
4. 버퍼의 내용을 출력

결과는... 택도 없다...

애초에 접근 방법부터 잘못됬다.

read 함수의 첫번째 인자는 file descriptor 이므로, i-node를 넣으면 안된다.


* 오늘 작업 결과

애초에 택도 없는 삽질을 했다.
책을 조금이라도 읽어보고 시작했다면 삽질을 줄일 수 있었을테지만...
책이 원서라 -_-;;;;

공부하는 셈 치고 책을 좀 읽어야겠다는 생각이 든다.

오늘 얻은 성과는 -_-;;; 프레젠테이션을 작성하기 시작했다... 정도? -_-;;;


* 다음 진행 작업

일단은 함수의 존재 유무 또는 함수의 사용방법을 익혀야 한다.

찾아야 하는 함수는...

1. 파일 시스템에서 i-node table 을 읽어오는 함수
2. 읽어온 i-node의 정보를 확인하거나 구조체로 읽어오는 함수
3. 파일 시스템에서 원하는 위치의 block을 읽을수 있는 함수
4. i-node의 정보를 변경할 수 있는 함수

일단은... 이정도?

coreutils에서 stat이라는 함수를 찾아보면 어느 정도 실마리가 보일 듯 하다.

'공부 > [2007] 유닉스 프로그래밍' 카테고리의 다른 글

2007/10/19 작업 내용  (0) 2007.10.19
2007/10/15 작업 내용  (0) 2007.10.15

+ Recent posts