본문 바로가기

(비정기) Dlbo's Post

파일시스템 - 07. MFT가 무엇인가?(2)


아앍

이미 포스트가 올라와 있어야 하는데

갑작스런 사정으로 좀 늦었습니다;

예상하기에 3번에 걸쳐서 올린 후, 안드로이드 프로그래밍에 대해 올리지 싶습니다.

---------------------------------------------------------------------------------------------------------------

MFT에는 메타 데이터 파일 외에 일반 파일을 위한 MFT 엔트리들이 연결되어 있습니다.

부트 레코드에서 MFT 시작 엔트리의 클러스터 번호를 담고 있고, 이 내용을 통해 MFT 엔트리 0번에 접근하지요.

여기 MFT 엔트리 0번부터 파일들의 연결 체인이 시작되며, 이 부분부터는 FAT의 엔트리 체인과 상당히 흡사하다고

볼 수 있습니다.

가령 예를 들면, MFT 엔트리 0번에는 몇번 클러스터와 몇번 클러스터에 이 엔트리의 내용이 연결, 확장된

엔트리들이 있다고 표기되어 있지요.

MFT 0번 엔트리를 읽어 MFT 전체의 레이아웃을 읽어들여 파일시스템을 이용한다고 보면 됩니다.

(참고로 $MFT 메타 데이터 파일은 0번 MFT 엔트리에 언.제.나 존재합니다.)

여기서, 그렇다면, 한 개의 MFT 엔트리로 담을 수 없는 큰 파일의 경우는 어떻게 기록할까요?

FAT 체인과 비슷하다고 했지 않습니까?

약간 다릅니다.

MFT 엔트리는 Non based MFT와 Based MFT, 두 가지로 나눌 수 있습니다.

"이런 파일이 존재한다!" 라고 표현하는 Based MFT와, "저 파일의 내용은 이거다!" 라고 표현하는 Non based MFT로 나뉘지요.

물론 소규모 파일의 경우 1개 MFT 엔트리로 표현 가능하다면 Based MFT만 사용해 표현이 가능하니 상관이 없습니다.

하지만 Non based MFT까지 확장해야 하는 경우는, MFT 엔트리 내의 File Reference to Base MFT Entry 필드에

Based MFT 엔트리의 경우 0을, Non based MFT의 경우 Based MFT 엔트리의 파일 레퍼런스 주소를 담게 됩니다.

이를 통해 트리형의 구조로 Based MFT에 Non based MFT 여러개가 주렁주렁 달리는 형태가 되지요.

덕분에 파일 탐색시 Based MFT만 조사하면 되어 기존 FAT의 체인을 타고 조사하는 것보다 더 빠르게 검색이 가능하고

한 파일에 대해 내용을 읽을 경우 파일 레퍼런스 주소에 대한 다른 처리를 이용해 훨씬 빠른 로드를 보여 줄 수 있습니다.

(그래봤자 하드디스크가 느리다는건 별 수 없습니다 -_-;;;)

여기서, 파일 레퍼런스 주소(File Reference Address)는 16비트의 시퀀스 밸류와 48비트의 MFT 엔트리 주소로 구성됩니다.

Sequence value 16비트를 추가해서 레퍼런스 주소를 할당하는 이유는 단순합니다.

이 값은 MFT 엔트리의 할당, 링크 상황이 변화할 때마다 증가하도록 설계가 되어 있으며,

이 값을 이용해 MFT 엔트리의 검색 속도를 향상시킵니다.

왠만해서는 이 Seq 값이 같기 힘들기 때문에(뭐... 만들려면 만들 수는 있습니다.) 이 값을 이용해 이 데이터에 접근하려는

다른 데이터가 서로 매치되는지를 확인합니다.

Seq값이 다르다면, 생성 시기나 할당 상황, 변동 사항이 다르기 때문에 매치가 되지 않고, 찾는 자료가 아니라는 의미가 되어

그냥 다음 탐색으로 제껴버릴 수 있는 것이지요.

순수하게 MFT 엔트리 주소만으로 찾을 경우 주소만 잘못 알고 접근한 경우에 대해 선 조치를 취해준다고 볼 수 있습니다.

--------------------------------------------------------------------------------------------------------------

감기조심하세요

-_-;

죽을꺼같아요