
FAT는 File Allocation Table이라고 하며, 파일이 저장되는 위치를 기록한다. 먼저 크게 3가지로 나눌 수 있는데,
주로 예약된 섹터는
이다.
섹터의 크기는 대부분 512(0x200)바이트이다.

EB ** 90 3바이트이며, **에 들어갈 바이트만큼 0x02로부터 이동한 위치의 바로 다음 바이트부터가 Boot Code 이다. 위의 그림에서는 **은 58이며, 0x02+0x58의 바로 다음 바이트인 0x5A부터 Boot Code 임을 확인할 수 있다.55 AA의 2바이트 고정값을 가진다.BPB에 대한 상세한 내용은 아래와 같다.

MSDOS5.0으로 고정된다.FAT32 로 고정된다.
52 52 61 41로 고정된다.72 72 41 61로 고정된다.55 AA로 고정된다.Boot Sector의 Boot Code 영역이 부족할 경우 이곳에 저장되어 추가적으로 사용할 수 있도록 한다.
FAT Area는 FAT Table 2개(원본 1, 백업 1)로 이루어져 있으며, 4바이트 단위의 데이터로 Data Area의 클러스터의 상태를 나타낸다.
0x?000 0002 ~ 0x?FFF FFEF에 해당하는 바이트열은 없고 이 바이트열만 있다.Data Area의 위치는 2개의 FAT Table 바로 다음이며, 여기는 루트 디렉토리(2번 클러스터)에 대한 정보부터 시작한다. FAT Table의 엔트리 번호와 Data Area의 클러스터 번호는 동일하고 아래의 Directory Entry 구조에 의해 파일의 클러스터 번호와 메타데이터를 나타낸다.

NTFS(New Technology FIle System)는 Windows 운영체제에서 사용되는 파일 시스템으로, 파일 및 폴더 암호화, 손상된 파일 복구 등의 기능을 지원한다.
VBR은 FAT32에서의 Boot Sector의 내용과 유사하나 BPB의 내용이 다르다.

NTFS 로 고정된다.NTFS의 최후방에 VBR에 대한 백업을 포함한다.
MFT 영역은 0x200크기의 MFT 엔트리가 계속해서 반복되는 구조로 되어있으며, 여러 메타데이터와 사용 불가한 엔트리 번호를 제외하고 24번 엔트리부터 사용할 수 있다.
| 엔트리 번호 | 이름 | 설명 |
|---|---|---|
| 0 | $MFT | MFT를 담고 있는 파일 |
| 1 | $MFTMirr | MFT의 백업 |
| 2 | $LogFile | Transaction 저널 기록 |
| 3 | $Volume | 볼륨의 레이블, 버전 등 볼륨에 대한 정보 저장 |
| 4 | $AttrDef | 인자 값, 이름, 크기 등 여러 속성 값 저장 |
| 5 | . | 파일 시스템의 root |
| 6 | $Bitmap | 파일 시스템의 클러스터 할당 관리 정보 저장 |
| 7 | $Boot | 부트 레코드 영역의 정보 저장 |
| 8 | $BadClus | 불량 클러스터 정보 저장 |
| 9 | $Secure | 파일의 보안과 접근 권한에 대한 정보 저장 |
| 10 | $Upcase | 모든 유니코드 문자의 대문자 |
| 11 | $Extend | 추가적인 확장을 담고 있는 디렉토리 |
| 12~15 | - | 사용하지 않음 |
| 16~23 | - | 사용하지 않음 |
| - | $ObjID | 파일 고유의 ID정보 저장 |
| - | $Quota | 사용량 정보 저장(Win 2000부터) |
| - | $Reparse R | Reparse Point에 대한 정보 저장(Win 2000부터) |
| - | $UsnJrnl | 저널링 기록 저장 |
| 24~ | 사용 가능 | 일반 파일 또는 디렉토리 |
MFT 엔트리의 구조는 다음과 같다.

46 49 4C 45(FILE), 42 41 41 44(BAAD) 둘 중 하나로, 파일/폴더인지, 손상되었는지 나타낸다.38 00일 것이다.IN_USE, IS_DIRECTORY등의 flag가 OR 연산되어 저장된다.| Attribute Type ID | 의미 | 설명 |
|---|---|---|
| 0x10 | $STANDARD_INFORMATION | 생성/수정 시간, 파일 속성(Read-only, Hidden 등) 들어 있음 |
| 0x20 | $ATTRIBUTE_LIST | 엔트리가 여러 개로 분산될 때 속성 목록을 모아둔 것 |
| 0x30 | $FILE_NAME | 파일 이름(짧은/긴 이름), 부모 디렉터리 정보 |
| 0x40 | $OBJECT_ID | 분산 시스템용 객체 ID |
| 0x50 | $SECURITY_DESCRIPTOR | ACL, 권한, 보안 정보 |
| 0x60 | $VOLUME_NAME | 볼륨 이름 |
| 0x70 | $VOLUME_INFORMATION | NTFS 버전, 플래그 등 볼륨 정보 |
| 0x80 | $DATA | 파일 내용 저장 |
| 0x90 | $INDEX_ROOT | B+Tree 루트, 디렉터리 구조를 관리 |
| 0xA0 | $INDEX_ALLOCATION | 큰 디렉터리에서 추가 인덱스 블록 |
| 0xB0 | $BITMAP | 인덱스 배열 사용 여부 비트맵 |
| 0xC0 | $REPARSE_POINT | 링크, 심볼릭 링크, 마운트 포인트 등 |
| 0xD0 | $EA_INFORMATION | 확장 속성(EA) 관련 정보 |
| 0xE0 | $EA | 실제 확장 속성 데이터 |
| 0xF0 | $PROPERTY_SET | Windows Property 저장 |
| 0x100 | $LOGGED_UTILITY_STREAM | 트랜잭션 로그 |
FF FF FF FF의 4바이트 고정값을 가진다. MFT 엔트리의 끝을 나타낸다.파일의 크기가 약 700바이트 이하라면 MFT에 파일 데이터를 넣어 저장하는 것으로 충분하지만, 그보다 큰 경우에 Data Area에 파일 데이터가 저장된다.
Data Area에 있는 파일의 클러스터의 위치는 MFT 엔트리의 Attribute Area에 저장되어 있는데, Attribute ID 0x80, 즉 $DATA의 끝 부분에 있는 Cluster Run에 저장된다.

Cluster Run이 위와 같이 있다고 할 때, 첫 번째 바이트의 상위 4비트는 클러스터의 시작점인 Run Offset을, 하위 4비트는 클러스터의 수인 Run Length를 나타낸다. 예를 들어 첫 번째 바이트(0x00)가 32라면, 그 다음 바이트부터 2개(0x01, 0x02)를 가져와 클러스터의 개수로 인식하고, 그 다음 바이트부터 3개(0x03~0x05)를 가져와 클러스터의 시작 오프셋으로 인식한다.