Programming2008. 12. 3. 11:48

지난 호에서는 파일복구 프로그램을 제작함에 있어 필수적으로 알고 있어야 할 기본원리, 즉 파일시스템의 정의와 종류, 디스크 접근방법, 파일복구 프로그래밍을 위한 준비 등에 대해서 알아보았다. 이번 호에서는 파일복구 프로그램의 성능을 좌우하고 기본적으로 주요 개발대상이 되어야 할 ‘다양한 파일시스템’을 지원하기 위하여 NTFS 파일시스템의 내부구조에 대해 상세히 다뤄보자. 아울러 파일복구 프로그램 성능에 관한 판단기준도 살펴보자.

지난 호에서 FAT(File Allocation Table)와 NTFS(New Technology File System) 등 두 가지 파일시스템의 성능 측면을 개괄적으로 살펴보았는데 이번 호에서는 여기서 한 발 더 나아가 심도있는 내용을 다뤄보자. NTFS는 상당히 복잡한 구조를 가지고 있기 때문에 그 구조를 알기 위해 알아야 할 개념들도 방대하고 난해하다. 특히 FAT에 비해 파일을 읽어 들이는 방법이 공개돼 있지 않고 알고리즘 역시 알려지지 않았으므로 여기서는 NTFS에 초점을 맞춰 진행한다.
지난 호를 통해 파일복구 과정은 삭제된 파일을 복구하는 것임을 살펴봤다. 그렇다면 디스크 또는 드라이브에서 단지 삭제된 파일만 찾는 것이 중요할까. 꼭 그렇지는 않다. 삭제된 파일은 단지 삭제된 것으로 최소의 표시를 해두고 다른 데이터가 기록될 수 있도록 공간이 쓰기 가능한 곳으로 남게 되므로 정상인 파일을 읽어 들이는 방법도 반드시 알고 있어야 한다. 즉 추가적인 기록이 없다면 복구작업 자체가 불가능하다.

NTFS의 탄생 배경
NTFS는 OS2의 HPFS((High Performance File System)와 도스/윈도우의 FAT 파일시스템을 대체하기 위해 개발됐다. 구체적으로는 신뢰성(reliability)과 보안성(security), 데이터 중복성(data dedundancy), 결함 방지(fault tolerance), 대용량 디스크와 파일, 다중 데이터 스트림, 유니코드 지원, 파일 속성의 인덱싱, 불량 클러스터에 대한 동적 리맵핑(회피), POSIX 지원 등에 초점을 맞춰 설계됐다.
신뢰성은 데이터의 저장과 접근에 있어 신뢰할 만한 트랜잭션 처리모델에 기반한 파일시스템 복구 기능을 제공하고 모든 입출력 연산을 단위 트랜잭션으로 처리하는데 주력했으며, 데이터베이스에서의 트랜잭션에서 볼 수 있는 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 새롭게 지원한다. 보안성은 윈도우 NT의 객체모델에서 파생된 것으로, 프로세스가 파일객체에 대한 핸들을 열기 위한 권한의 적합성을 가졌는지 여부를 검증한다.
또한 NTFS는 WDM(Windows Driver Model), WDF 등 윈도우 NT 계층의 드라이버 모델을 사용해 결함방지가 가능한 디스크 지원을 제공한다. 이를 통해 하드디스크 드라이버와 간접적으로 교류하며 데이터 미러링(레이드0)과 패리티를 통한 스트라이핑(레이드5)도 지원한다. NTFS는 클러스터를 어드레싱하기 위해 이론적으로 64비트를 사용한다. 클러스터의 크기는 최대 64KB까지 264개까지 가능하다. 파일의 최대 크기는 264바이트이다.

출처 : 마이크로스프트웨어

Posted by skensita