[Digital Forensic] FAT 파일 시스템 분석 (1)

 

FAT 파일 시스템


(1) FAT (File Allocation System)

  • 흔히 SD 카드에서 많이 사용하는 파일 시스템

  • 파일 시스템 중 가장 간단한 구조를 가짐

  • 종류에는 FAT12, FAT16, FAT32가 있음

  • 모든 윈도우와 대부분 유닉스 기반 운영체제들에서 모두 지원

  • 보통 우리가 사용하는 디지털 카메라의 플래시 카드, USB 드라이브에서 볼 수 있음

 

FAT 파일 시스템은 간단 구조이기 때문에 여러 가지 기능들이 추가되어 정확하게 참조 모델로 구분하기 애매한 구조이다.

 

FAT 파일 시스템에는 중요한 두 가지의 구조체(디렉토리 엔트리, FAT)가 존재한다.

 

디렉토리 엔트리는 각 파일과 디렉토리를 데이터 구조체에 할당할 때 사용되는 구조체를 말한다.

 

 

디렉토리 엔트리에는 다음의 데이터가 포함된다.

  • 파일명

  • 크기

  • 파일 내용 시작 주소

  • 다른 메타 데이터

 

하나의 파일이나 하나의 디렉토리를 하나 이상의 클러스터에 할당했다면 FAT 구조체를 통하여 나머지 클러스터를 찾을 수 있다.

 

FAT 구조체에는 파일 다음 클러스터와 클러스터 할당 상태를 식별하기 위한 데이터가 포함된다.

 

위에서 FAT 파일 시스템 종류를 나열해 보았는데 종류들의 차이는 FAT 구조체 엔트리 크기에서 차이가 난다.

 

 

다음 그림은 디렉토리 엔트리 구조체와 FAT 구조체의 관계를 나타낸 것이다.

 

[그림 1] 디렉토리 엔트리와 클러스터, FAT 관계

 

FAT 파일 시스템의 물리적 레이아웃은 다음과 같다.

 

[그림 2] FAT 파일 시스템의 물리적 레이아웃

 

1-1. 예약 영역

  • 파일 시스템 참조 모델 데이터를 포함하는 영역

  • FAT12, FAT 16 파일 시스템 경우 해당 영역의 크기는 보통 1개의 섹터 크기지만 어떤 경우에는 부트 섹터에서 해당 영역 크기를 정의하기도 함

 

1-2. FAT 영역

  • 주 FAT 구조체와 부(백업) FAT 구조체를 포함하는 영역

  • 예약된 영역 바로 다음 섹터부터 시작

  • 해당 영역 크기는 FAT 구조체 수와 크기에 따라 달라짐

 

1-3. 데이터 영역

  • 파일과 디렉토리 내용을 저장하는 클러스터를 포함하는 영역


(2) 부트 섹터

  • 예약 영역 중에서도 볼륨 1번째 섹터에 위치

  • FAT 파일 시스템 물리적 레이아웃에서 예약 영역에 위치 (MS사에서는 BPB라 부름)

  • 파일 시스템을 설명하는 데이터를 포함하지만, FAT 종류(FAT 12 / 16 / 32)를 설명하는 데이터는 포함하지 않음

  • 부트 섹터 데이터를 참조하여 파일 시스템 종류를 결정 

 

FAT32 파일 시스템 부트 섹터에는 부트 섹터 백업본의 섹터 주소, 주/부 버전 번호와 같은 추가 데이터들이 포함되어 있다.

 

FAT32 파일 시스템은 섹터 0(부트 섹터)에 존재하는 원본이 손상되었을 때 부트 섹터 백업본을 사용 가능하다.

 

MS 문서에서는 원본 부트 섹터가 손상되었는지 자동 검사를 위해 '부트 섹터 백업본이 섹터 6(7번째 섹터)에 있어야 한다'고 설명한다.

 

또 FAT32 파일 시스템은 다음에 할당 가능한 클러스터 위치, 전체 크기에 대한 정보를 포함하는 FSINFO 구조체를 갖고 있다.

 

FSINFO 구조체에 포함되어 있는 데이터들은 운영체제를 안내하기 위해 존재하며, 안내만 하는 역할을 하므로 데이터 정확성을 보증하지 않는다.

 

 

필수 부트 섹터 데이터

  • FAT 파일 시스템 물리적 레이아웃 중 데이터 영역이 있는데 이 데이터 영역은 FAT 12/ 16과 FAT32는 차이를 가짐

  • FAT 12 / 16 파일 시스템 경우 데이터 영역 시작 주소는 루트 디렉토리 주소 다음으로 예약되어 있음

  • 하지만 FAT 32 파일 시스템 경우 루트 디렉토리는 데이터 영역 어디든지 위치 가능

  • FAT 파일 시스템 루트 디렉토리는 대부분 데이터 영역 시작 주소에 위치 

 

FAT 32 파일 시스템은 루트 디렉토리의 위치와 크기를 데이터 영역 시작에 불량 섹터가 있을 경우 루트 디렉토리가 적절하게 대처할 수 있도록 필요한 만큼 조절할 수 있도록 하였다.

 

반면 FAT 12/ 16 파일 시스템 루트 디렉토리는 부트 섹터에 정의된 위치와 크기로 설정된다.

 

FAT 32 파일 시스템 루트 디렉토리 시작 주소는 부트 섹터 처음에만 제공하고, 크기는 FAT 구조체에서 결정한다.

 

 

부가 부트 섹터 데이터

  • 필수 부트 섹터가 가지고 있는 데이터 외에 많은 추가 정보들을 포함

  • 해당 데이터들은 파일 시스템을 구동하기 위한 데이터들이 아닌 편의를 위한 데이터이므로 정확성은 보증되지 않음

  • 예로 OEM Name이 부가 부트 섹터 데이터에 포함 되며, OEM Name은 필수 데이터가 아니므로 사용자가 임의로 변경 가능

 

부트 코드

  • 파티션 테이블 처리와 운영체제 위치를 파악하는 명령어

  • FAT 파일 시스템의 부트 코드는 부트 코드를 완전하게 분리하는 유닉스 파일 시스템과는 다른 형태를 띄고 있음

  • 부트 섹터 첫 3Byte는 CPU에게 부트 코드의 나머지 설정 데이터로 이동하라는 기계어 코드(점프 명령어)

 

FAT 종류마다 부트 섹터로 예약되어 있는 바이트 단위 오프셋은 다음과 같다.

  • FAT 12 / 16 : 62 ~ 509

  • FAT 32 : 90 ~ 509

 

위 오프셋들은 부트 코드를 포함하고 있는 곳이기 때문에 일반적으로 다른 곳에 사용되지 않으며, 위 오프셋 다음에 오는 섹터들은 추가 부트 코드를 위해 사용될 수 있다.

 

또 FAT 파일 시스템은 부팅을 하지 않아도 부트 코드를 가지며, 해당 부트 코드는 해당 시스템을 부팅하기 위해 다른 디스크가 필요하다는 메시지를 출력하는 역할을 한다.

 

출력된 후 디스크 MBR 부트 코드에서 FAT 부트 코드를 호출한다.

 

호출 후 부트 코드는 적절한 OS 파일들을 위치시키고 적재하여 실행시킨다.


(3) 클러스터

  • 연속적인 섹터의 그룹

  • 섹터의 개수는 2의 제곱(1, 2, 4, 8, ...)이어야 함

  • 주소를 가지며, 0이나 1이 아닌 2라는 주소부터 시작 (1번째 클러스터는 클러스터 2가 됨)

 

첫 번째 클러스터 찾기

  • FAT 파일 시스템은 첫 번째 클러스터인 클러스터 2부터 시작하지 않아 위치를 쉽게 찾지는 못 함

  • FAT 파일 시스템은 모든 논리적 볼륨 주소가 논리적 파일 시스템 주소로 맵핑 되지 않음

  • 따라서 FAT 파일 시스템 예약 영역과 FAT 영역은 클러스터 주소를 사용하지 않음

 

첫 번째 클러스터를 찾는 방법은 FAT 12/16과 FAT 32가 서로 다르다.

 

FAT 12/16 파일 시스템의 경우 파일 시스템이 생성될 때 데이터 영역 첫 번째 섹터에 루트 디렉토리가 부트 섹터에서 정의된 고정 크기를 갖고 할당된다.

 

그래서 FAT 12/16 파일 시스템의 클러스터 2는 루트 디렉토리 다음 섹터를 포함하게 된다.

 

 

FAT 12/16 파일 시스템 클러스터 2 위치는 다음과 같다.

 

[그림 3] FAT 12 /16

 

이와 다르게 FAT 32 파일 시스템 경우 루트 디렉토리 유동성 때문에 데이터 영역 첫 번째 섹터를 클러스터 2가 포함된다.

 

즉 데이터 영역 첫 번째 섹터가 클러스터 2이다.

 

[그림 4] FAT 32

 

클러스터와 섹터 주소 변환

  • 클러스터와 섹터 주소 간에 변환을 위해서는 클러스터 2의 주소를 알아야 함

  • 또 클러스터 당 몇 개의 섹터를 포함하고 있는지도 파악 필요

 

다음은 클러스터 X (계산하고자 하는 클러스터)의 섹터 주소를 계산하는 기본 계산식이다.

 

(X - 2) x (클러스터 당 섹터 수) + (클러스터 2의 섹터 수)

 

역으로 섹터 S (계산하고자 하는 섹터) 가 포함되어 있는 클러스터를 계산하는 계산식은 다음과 같다.

 

((S 클러스터 2의 섹터 수) / (클러스터 당 섹터 수)) + 2

 

 

클러스터 할당 상태

  • FAT 구조체를 통해 알 수 있음

  • 보통 두 개의 FAT 구조체 복사본이 있는데 하나는 파일 시스템 예약 영역 이후에 존재

  • FAT 구조체는 파일 시스템 클러스터마다 하나의 테이블 엔트리를 가짐

  • 테이블 엔트리에는 각 클러스터 번호들이 데이터로 포함되어 있음  

 

테이블 엔트리에 포함되어 있는 번호들의 최대값은 다음과 같다.

  • FAT 12 : 12bit

  • FAT 16 : 16bit

  • FAT 32 : 32bit (하지만 28bit만 사용)

 

만약 테이블 엔트리에 포함되어 있는 값이 0이라면 해당 엔트리가 할당된 클러스터는 파일에 아직 할당되지 않은 것을 의미한다.

 

FAT 종류마다 테이블 엔트리가 갖고 있는 값 중 할당되지 않은 상태를 표시하는 값들이 있으며, 다음과 같다.

  • FAT 12 / 16 : 0xFF7

  • FAT 32 : 0xFFF FFF7

 

만약 어떠한 테이블 엔트리가 위 값을 가지고 있다면 해당 테이블 엔트리의 클러스터는 파일에 할당되지 않음을 의미한다.


(4) 디렉토리 엔트리

  • 파일과 디렉토리마다 할당되는 데이터 구조체를 말함

  • 크기는 32byte

 

디렉토리 엔트리는 다음과 같은 데이터를 포함한다.

  • 파일 이름

  • 파일 속성

  • 파일 크기

  • 클러스터 시작 주소

  • 날짜

  • 시간

 

디렉토리 엔트리는 위에서 보듯이 파일 이름을 포함하기 때문에 파일 이름 참조 모델의 역할도 수행한다.

 

디렉토리 엔트리 위치는 데이터 영역 어디든지 가능하며, 그 이유는 디렉토리에 할당된 클러스터가 해당 디렉토리 엔트리를 포함하기 때문이다.

 

디렉토리 엔트리는 클러스터처럼 고유 주소를 사용하지 않고 할당된 파일이나 디렉토리의 전체 이름을 사용한다. (표준 방법)

 

디렉토리 엔트리에는 위처럼 파일 속성이 포함되며, 파일 속성에는 7가지 항목이 있지만 모두 OS에서 필요로 하는 것은 아니다.

 

 

다음은 파일 속성 중 필수 속성이다.

  • 디렉토리 속성 : 서브 디렉토리를 위한 디렉토리 엔트리인지 구분하는 속성

  • 긴 파일명 속성 : 다른 레이아웃을 갖는 엔트리 유형인지 구분하는 속성

  • 볼륨 레이블 속성 : 하나의 디렉토리에만 설정되는 속성

 

다음은 나머지 4개의 부가 속성이다.

  • 읽기 전용 속성 : 파일 쓰기를 방지하는 속성

  • 숨김 속성 : 파일과 디렉토리 목록을 보여줄 때 사용자에게 해당 속성이 설정된 파일이나 디렉토리를 보여주지 않는 속성

  • 시스템 속성 : 시스템 파일로 구분하는 속성

  • 아카이브 속성 : 일반적인 파일 속성

 

디렉토리 엔트리에는 시간 정보도 포함되는데 세부적으로 나누어 보면 수정 시간(Modify), 접근 시간(Access), 생성 시간(Create)로 나누어진다.

 

디렉토리 엔트리의 할당 상태는 첫 바이트를 통해 알 수 있으며, 할당된 엔트리는 자신이 할당된 파일이나 디렉토리 이름을 사용하는데 할당 상태인 경우 자신이 할당된 파일명이나 디렉토리 명의 첫 글자가 첫 바이트가 된다.

 

하지만 할당되지 않은 상태라면 디렉토리 엔트리 첫 바이트는 '0xE5'로 설정된다.

 

 

클러스터 연결

  • 디렉토리 엔트리는 클러스터 시작 주소를 포함

  • FAT 구조체는 파일에 할당된 클러스터를 찾는데 사용

  • 클러스터 할당 상태는 FAT 엔트리 값이 0이 아니면 할당 상태이고 0이면 비할당 상태인 것으로 판단 가능

  • FAT 엔트리는 다음 클러스터 주소, 파일 끝(EOF), 불량 섹터가 있는 클러스터를 보여주는 값을 포함

 

다음은 디렉토리 엔트리와 FAT 엔트리가 클러스터를 찾을 때 어떻게 연관되는지를 보여준다.

 

[그림 5] 디렉토리 엔트리와 FAT 엔트리 관계

 

디렉토리

  • OS는 새로운 디렉토리가 생성되면 클러스터를 할당하고 0으로 초기화

  • 디렉토리 크기 필드를 사용하지 않는 경우 항상 0으로 설정

  • 디렉토리 크기 결정 방법은 '클러스터 연결' 원리와 동일

  • 생성 이후에는 생성 시간, 접근 시간, 수정 시간을 업데이트하지 않음 (디렉토리 생성 날짜 무결성을 검증하는데 사용하기도 함)

  • 이유는 디렉토리 생성 날짜와 시간은 디렉토리 내용의 '.' 와 '..' 의 생성 날짜와 시간이 동일하기 때문

 

만약 서로 값이 다르다면 이는 악의적 사용자에 의해 변경되었거나 시스템의 어떠한 응용 프로그램에서 수정했을 가능성이 있다.

 

 

디렉토리 엔트리 주소

 

디렉토리 엔트리 주소를 찾기 위해서는 파일명이나 디렉토리 명의 전체 이름을 사용하는 방법이 있지만, 이 방법에는 다음과 같은 두 개의 문제점이 존재한다.

 

1) 파일이 지워졌을 때의 충돌성

  • 1-1.txt 파일과 2-1.txt 파일이 있다고 가정

  • 파일이 지워지면 해당 디렉토리 엔트리는 첫 바이트가 0xE5로 설정되어 파일명이나 디렉토리명의 첫 글자가 지워짐

  • 이럴 경우 두 txt 파일은 -1.txt, -1.txt 파일명이 되어 이름이 충돌하게 됨

 

2) 디렉토리 엔트리 재할당

  • 디렉토리가 삭제된다고 하여 디렉토리 내용도 모두 데이터 영역에서 삭제되는 것은 아님

  • 삭제된 디렉토리 엔트리 자리에 새로운 디렉토리가 생기고 해당 디렉토리의 디렉토리 엔트리가 할당되면 디렉토리 내용들은 모두 고아 상태가 됨 (이러한 파일들을 고아 파일이라고 함)

 

고아 상태(클러스터 11의 상태)가 된 파일들을 일반 커맨드 명령어로는 접근할 수 없고 데이터 영역의 섹터를 전체적으로 분석해야만 찾을 수 있다.

 

다음은 고아 파일에 대한 내용이다.

 

[그림 6] 고아 파일

 

시간 값 할당

  • 디렉토리 엔트리에 포함되는 시간 값들은 부가적 데이터

  • 잘못된 값을 가지고 있을 수도 있음 

 

1) 생성 시간

  • 새로운 파일을 생성하면 새로운 디렉토리 엔트리를 할당하는데 이때 설정 됨

  • 다른 디렉토리나 다른 디스크로 파일을 이동시키면 이동시킨 디렉토리나 디스크로 옮겨진 원본 파일의 새로운 엔트리가 할당

  • 새롭헤 할당된 엔트리를 기존 원본 엔트리가 덮어 씌움 (생성 시간 변하지 않음)

  • 예외 경우가 있으며, 커맨드 명령어로 다른 디렉토리나 디스크로 이동시킬 시 생성 시간은 이동 시간으로 다시 할당

  • 복사의 경우 새로운 파일로 간주하여 새로운 엔트리가 생성되고 새롭게 생성 시간이 할당 됨

 

2) 수정 시간

  • 윈도우가 파일에 내용을 써 넣을 때 설정 됨

  • 속성이나 파일명은 수정 시간 업데이트에 영향을 주지 않음

  • 파일의 이동 및 복사할 시에 새롭게 할당된 엔트리는 원본 엔트리의 수정 시간을 할당 받음

  • 윈도우 경우 응용 프로그램이 파일에 접근하여 내용을 수정한 후 저장하지 않아도 수정 시간을 새롭게 할당

 

3) 접근 시간

  • 파일을 열 때나 클릭할 때 설정 됨

  • 파일을 열 때 할당 됨

  • 파일의 속성 창 버튼을 클릭하면 할당

  • 파일을 다른 볼륨으로 이동시킬 시 윈도우는 해당 파일의 내용을 참조하기 위해 파일에 접근하고 이때 접근 시간 또한 다시 할당


(5) FAT 파일 이름 관리

  • FAT은 파일명의 길이가 8보다 크거나, 이름에 특별한 문자가 있으면 디렉토리에 LFN(Long File Name) 타입을 추가

  • LFN 타입을 갖고 있는 디렉토리(파일)은 SFN(Short File Name)이라는 디렉토리 엔트리를 또 갖게 됨

  • LFN 엔트리는 시간, 크기, 시작 클러스터 정보를 포함하지 않아 SFN이 대신하여 해당 정보들을 포함하기 때문에 추가되는 것

  • LFN과 SFN 속성 항목은 같은 위치에 존재, LFN 엔트리의 경우 특별한 속성 값을 사용함

  • 해당 속성 항목을 제외한 나머지 바이트들은 UTF-16으로 인코딩된 13개의 유니코드 문자들을 저장하는데 사용

  • 만약 파일명의 길이가 13글자 이상이면 추가적으로 LFN 엔트리를 사용

  • LFN 엔트리는 SFN 엔트리와의 관계를 나타내는 체크섬을 포함

 

LFN 엔트리는 파일명만 포함하며 디렉토리 엔트리에 파일 할당이 비할당 상태로 전환되는 것은 LFN 엔트리가 비할당 상태로 전환되는 것을 뜻한다.

 

그리고 이때 디렉토리 엔트리 첫 번째 바이트가 '0xE5'로 설정된다.

 

LFN 엔트리들은 순서가 반대이기 때문에 파일명 첫 번째 부분이 SFN 엔트리와 가깝다.


(6) 파일 생성 및 삭제

 

파일 생성 과정

  • 디렉토리(dir)는 생성되어 있으며 클러스터 크기는 4096byte

  • 파일 크기는 5000byte라고 가정한 과정

 

1) 볼륨 섹터 0에서 부트 섹터를 참조하고, FAT 구조체와 데이터 영역, 루트 디렉토리 위치를 파악한다.

 

[그림 7] 1번 과정

 

2) 디렉토리를 찾기 위해 루트 디렉토리에서 각 디렉토리 엔트리를 해석하고, 찾으려고 하는 디렉토리 이름 및 속성을 이용하여 찾으려고 하는 디렉토리의 엔트리를 찾는다.

 

[그림 8] 2번 과정

 

루트 디렉토리에는 '.' 이 존재하지 않으나, 이미지에는 루트 디렉토리를 나타내기 위한 방편으로 추가하였다.

 

 

3) dir 시작 클러스터(10)의 내용을 읽고, 사용 가능한 디렉토리 엔트리를 찾아 파일 명을 입력한 후 할당 상태로 전환시킨다.

 

또 파일의 크기와 시간 값도 입력한 후 파일 내용을 위한 클러스터를 할당하기 위해 FAT 영역의 FAT 구조체를 이용한다.

 

FAT 구조체에는 파일명, EOF, 다음 클러스터 주소 데이터, 타입 등이 포함된다.

 

FAT 구조체로 클러스터를 할당한 후 클러스터 10의 File.txt 디렉토리 엔트리에 시작 클러스터를 입력하고, 할당된 클러스터에 파일 내용을 입력한다.

 

[그림 9] 3번 과정

 

4) 하지만 클러스터 크기보다 파일 크기가 더 커 또 하나의 클러스터를 할당한다.

 

클러스터를 할당하기 위해 FAT 영역의 FAT 구조체를 이용한다.

 

적당한 구조체를 통해 또 하나의 클러스터를 할당한다.

 

[그림 10] 4번 과정

 

5) 시작 클러스터의 FAT 구조체에서 EOF 데이터를 지우고 다음 클러스터 주소를 입력한다.

 

그 후 나머지 파일 내용을 새롭게 할당된 클러스터에 입력한다.

 

[그림 11] 5번 과정

 

추가 내용으로는 위 [그림 11]에는 나와 있지 않지만, 클러스터 101의 FAT 구조체는 EOF로 설정 되어 있다.

 

 

파일 삭제 과정

 

1) 파일 생성 과정 전체 과정처럼 파일의 클러스터 연결 확인까지 진행한다.

 

2) 클러스터 연결 확인을 수행했다면 해당 파일과 연관되어 할당되어 있는 클러스터의 FAT 구조체 엔트리 모두를 0으로 설정한다.

 

3) 그 후 디렉토리 엔트리의 첫 바이트를 '0xE5'로 변경하여 해당 파일을 디렉토리 엔트리에서 할당 해제시킨다.

 

 

위 과정을 거치면 다음 사진과 같다.

 

[그림 12] 삭제 상태

 

위 [그림 12]의 상태가 되면 커맨드 명령어나 탐색기로는 해당 파일에 접근이 불가능하다.


(7) 파일 복구

  • 파일 삭제 과정을 보면 FAT 엔트리가 0이 되고 디렉토리 엔트리가 비할당 상태로 바뀌면서 디렉토리 엔트리의 첫 바이트가 '0xE5'로 설정 됨

  • 파일을 복구하기 위해서는 파일의 시작 위치(시작 클러스터)와 크기를 알아야 함

  • 하지만 시작 클러스터만 알 수 있을 뿐 나머지 연계되는 클러스터는 정확하게 알지 못 함 

 

파일 시스템의 파일 클러스터들 배치는 다음과 같이 매우 다양하다.

 

연속적인 클러스터 할당의 경우

 

[그림 13] 연속 할당 클러스터

 

위 [그림 13]의 경우 파일 복구가 매우 쉽다.

 

시작 클러스터인 45를 시작으로 파일의 크기만큼인 클러스터 48까지만 복구해주면 되기 때문이다.

 

 

할당 클러스터 사이의 다른 클러스터

 

[그림 14] 클러스터 단편화

 

위 [그림 14]의 경우 파일 내용 클러스터 사이에 전혀 다른 파일의 할당 클러스터가 위치 하고 있어 시작 클러스터인 45부터 파일의 크기만큼 복구를 시도하면 47이라는 전혀 다른 파일의 할당 클러스터가 섞여 완전한 복구가 되지 않는다.

 

 

할당 클러스터 사이의 비할당 클러스터

 

[그림 15] 클러스터 단편화 (2)

 

위 [그림 15]의 경우도 두 번째 경우와 마찬가지로 복구 시도 시 비 할당 클러스터 때문에 완전한 복구가 되지 않는다.

 

이런 문제점 해결을 위해 파일을 지우기 전 디스크 파일 조각 모음을 통해 클러스터를 한 곳으로 모아야 한다.

 

파일 조각 모음을 할 경우 클러스터가 좀 더 연속적으로 배치되기 때문이다.

 

지워진 후 파일 조각 모음은 의미가 없으며 해당 클러스터들은 다시 할당될 수 있기 때문에 불필요하다.


(8) FAT 파일 시스템 종류 결정

  • FAT 파일 시스템은 여러 종류가 있지만 정작 파일 시스템은 그 종류를 결정하는 기능이 없음

  • FAT 파일 시스템은 데이터 영역의 클러스터 개수에 따라 종류 결정 가능

  • 클러스터 개수를 알기 위해서는 데이터 영역의 섹터 개수를 알아야 함

  • FAT 12 / 16 파일 시스템의 경우 루트 디렉토리는 FAT 영역 다음 데이터 영역 첫 번쩨 섹터에 위치하며, 이 영역 다음 클러스터 2가 시작

  • FAT 32 파일 시스템 경우 루트 디렉토리가 유동적이어서 클러스터 2가 데이터 영역 첫 번째에 위치

  • 이러한 루트 디렉토리 엔트리 개수는 부트 섹터에서 알 수 있으며 FAT 32 경우에는 0

 

다음은 루트 디렉토리 섹터 개수(루트 디렉토리 크기)를 계산하는 계산식이다.

 

((루트 디렉토리 엔트리 개수 x 32) + (섹터 별 바이트1)) / (섹터 별 바이트)

 

 

클러스터에 할당된 섹터 수(데이터 영역)는 파일 시스템 전체 섹터에서 예약 영역 크기, FAT 영역 크기, 루트 디렉토리 크기를 빼면 된다.

 

파일 시스템 전체 섹터 수 - 예약 영역 크기 - (FAT 구조체 개수 * FAT 구조체 크기) - 루트 디렉토리 크기

 

 

위 계산식의 계산으로 인해 데이터 영역의 크기가 나오고 이 값을 클러스터 별 섹터 수로 나누면 클러스터 개수가 나온다.

 

데이터 영역 크기 / 클러스터 별 섹터 수

 

 

각 FAT 종류는 데이터 영역 클러스터 개수가 다음과 같이 다르다.

  • FAT 12 : 4,085보다 작을 때

  • FAT 16 : 4,085보다 크거나 같을 때

  • FAT 32 : 62,525와 크거나 같을 때


# Reference

 

http://www.yes24.com/Product/Goods/8511539

+ Recent posts