B1ueJay

FAT 파일 시스템 - (1)예약 영역 본문

Digital Forensic/File System

FAT 파일 시스템 - (1)예약 영역

B1ueJay 2019. 11. 1. 22:20

File Allocation Table

1976년에 Microsoft의 빌 게이츠가 최초로 구현

MS-DOS에 최초로 사용되었으며 현재 Windows에서도 사용 중

매우 단순한 구조를 가졌으며 가장 널리 사용된 파일 시스템

가볍고 심플해서 휴대성 뛰어남

FAT12

  • FAT 파일 시스템의 최초 표준
  • 현재 FAT 파일 시스템의 기본 구조

FAT16

  • 하드 디스크 지원
  • 최대 클러스터 12bit → 16bit

FAT32

  • 최대 클러스터 16bit → 32bit
  • 32bit 중 4bit는 예약 영역으로 사용(실제 28bit를 이용해서 클러스터 표현)
  • 최대 볼륨 크기 2TB 지원

exFAT(Extended FAT)

  • 고용량 플래시 메모리 미디어를 위해 개발됨
  • UTC 시간표 지원

Structure(구조)

[그림 1] FAT 기본 구조

Reserved Area(예약된 영역)

  • Boot Sector, FS Information, Boot Strap, More Space 영역별로 이루어져 있음
  • FAT12/16 - 1 섹터 사용, FAT32 - 32 섹터 사용

[그림 2] FAT의 예약 영역

Boot Sector

  • FAT 파일 시스템의 첫 번째 자리를 차지하며 크기는 1 섹터(512 바이트)

부트 섹터의 구조는 아래와 같다

형식
범위
설명
Bytes Hex
FAT12/16 0 ~ 2 0x000 ~ 0x002 부트 코드로 점프하려는 명령어
FAT32
FAT12/16 3 ~ 61 0x003 ~ 0x03D BIOS Parameter Block(BPB)
FAT32 3 ~ 89 0x003 ~ 0x059
FAT12/16 62 ~ 509 0x03E ~ 0x1FD 부트 코드와 오류 메시지 저장
FAT32 90 ~ 509 0x05A ~ 0x1FD
FAT12/16 510 ~ 511 0x1FE ~ 0x1FF 시그니처(0x55 AA)
FAT32

FAT12/16과 FAT32는 공통적으로 첫 3byte는 부트 코드로 점프하기 위한 명령어가 위치해 있다.

이 값은 운영체제가 부팅하는데 필요한 코드를 찾을 수 있도록 컴퓨터에 알려주는 어셈블리 명령어다.

그리고 마지막 2byte는 동일한 시그니처 0x55 AA가 있다.

시그니처(0x55 AA)는 NTFS 파일 시스템의 첫 번째 섹터에서도 같다.

 

BIOS Parameter Block의 구조는 아래와 같이 이루어져 있다.

[FAT12/16/32 공통]

범위
설명
Bytes Hex
0 ~ 2 0x00 ~ 0x02

Jump Boot Code

부트 코드로 점프하는 명령어 (기본값: 0xEB5890)

3 ~ 10 0x03 ~ 0x0A

OEM ID

Win95=MSWIN4.0, Win98=MSWIN4.1, Win2000/XP/Vista=MSDOS5.0, Linux=mkdosfs

11 ~ 12 0x0B ~ 0x0C Bytes per Sector
13 0x0D Sector per Cluster
14 ~ 15 0x0E ~ 0x0F Reserved Sector Count - FAT12/16=1, FAT32=32
16 0x10

Number of FAT Tables

FAT 영역은 백업을 제공하기 때문에 일반적으로 2개 사용

17 ~ 18 0x11 ~ 0x12 Root Directory Entry Count - FAT12/16=512, FAT32=0
19 ~ 20 0x13 ~ 0x14 Total Sector 16 - FAT12/16=variable, FAT32=0
21 0x15 Media Type
22 ~ 23 0x16 ~ 0x17 FAT Size 16 - FAT12/16=16, FAT32=0
24 ~ 25 0x18 ~ 0x19 Sectors per Track - 32 또는 63
26 ~ 27 0x1A ~ 0x1B Number of Heads
28 ~ 31 0x1C ~ 0x1F Hidden Sectors - 파티션 시작 전 섹터 수
32 ~35 0x20 ~ 0x23 Total Sector 32

[FAT12/16]

범위
설명
Bytes Hex
36 0x024 Drive Number
37 0x025 Reserved1
38 0x026 Boot Signature
39 ~ 42 0x027 ~ 0x02A Volume ID
43 ~ 53 0x02B ~ 0x035 Volume Label
54 ~ 61 0x036 ~ 0x03D File System Type
62 ~ 509 0x03E ~ 0x1FD Boot Code and Error Message
510 ~ 511 0x01FE ~ 0x1FF Signature(0x55 AA)

[FAT32]

범위
설명
Bytes Hex
36 ~ 39 0x024 ~ 0x027 FAT Size 32
40 ~ 41 0x028 ~ 0x029 Ext Flags
42 ~ 43 0x02A ~ 0x02B File System Version
44 ~ 47 0x02C ~ 0x02F Root DIrectory Cluster
48 ~ 49 0x030 ~ 0x031 File System Information
50 ~ 51 0x032 ~ 0x033 Backup Root Record
52 ~ 53 0x034 ~ 0x03F Reserved
64 0x040 Driver Number
65 0x041 Reserved1
66 0x042 Boot Signature
67 ~ 70 0x043 ~ 0x046 Volume Serial Number
71 ~ 81 0x047 ~ 0x051 Volume Label
82 ~ 89 0x052 ~ 0x059 File System Type
90 ~ 509 0x060 ~ 0x1FD Boot Code and Error Message
510 ~ 511 0x1FE ~ 0x1FF Signature(0x55 AA)

 

FSINFO (File System Information)

  • 운영체제가 새로운 클러스터를 어디에 할당하는지 설명하는 구조체
범위
설명
Bytes Hex
0 ~ 3 0x000 ~ 0x003 Signature(0x41615252)
4 ~ 483 0x004 ~ 0x1E3 Not Used
484 ~ 487 0x1E4 ~ 0x1E7 Signature(0x61417272)
488 ~ 491 0x1E8 ~ 0x1EB Number of Free Clusters
492 ~ 495 0x1EC ~ 0x1EF Next Free Cluster
496 ~ 509 0x1F0 ~ 0x1FD Not Used
510 ~ 511 0x1FE ~ 0x1FF Signature(0x55 AA)

 

Boot Strap

  • 부트 섹터의 코드 영역이 부족할 경우 추가적으로 사용할 수 있는 영역
  • 일반적으로 비어 있지만 FAT32에만 존재