Digital Forensics/File System

FAT32 파일 구조

Noctis41 2025. 2. 4. 16:36

FAT32 파일 시스템 구조

FAT(File Allocation Table) 파일 시스템은 Microsoft에서 개발한 파일 시스템으로, 디스크의 파일 할당 정보를 테이블 형태로 관리하는 방식입니다. FAT 파일 시스템은 구조가 단순하여 USB 메모리, SD 카드 등 다양한 저장 장치에서 널리 사용됩니다. FAT의 주요 버전으로는 FAT12, FAT16, FAT32, exFAT 등이 있으며, 이 글에서는 FAT32 파일 시스템에 대해 집중적으로 다룹니다.

FAT32 파일 시스템 개요

FAT32는 FAT16보다 더욱 복잡한 파일 구조를 가지고 있으며, 파티션의 최대 크기가 32GB로 제한됩니다. FAT32는 크게 예약된 영역(Reserved Area), FAT 영역(File Allocation Table Area), 데이터 영역(Data Area)의 세 부분으로 나뉩니다.


1. 예약된 영역 (Reserved Area)

예약된 영역은 파일 시스템의 주요 정보를 저장하는 중요한 영역으로, FAT32에서는 32개의 섹터로 구성됩니다. 주요 구성 요소는 다음과 같습니다.

1.1 부트 섹터(Boot Sector) - 0, 6번 섹터

부트 섹터는 운영체제가 파일 시스템을 인식하고 부팅을 수행하는 데 필요한 정보를 포함하는 영역입니다. FAT32 파일 시스템에서는 부트 섹터가 0번과 6번 섹터에 위치합니다.

부트 섹터 주요 항목

  • Jump Command to Boot Code (0x00 ~ 0x02, 3Byte): CPU의 명령 실행 분기를 부트 코드로 옮기는 역할을 합니다.
File System Format CPU Jump Command(little endian)
Fat12/16 0x903CEB
FAT32 0x9058EB
NTFS 0x9052EB
  • OEM ID (0x03 ~ 0x0A, 8Byte): 파일 시스템을 생성한 OS 또는 프로그램의 ID 정보입니다.
  • BIOS Parameter Block (BPB, 0x0B ~ 0x59, 78Byte): 디스크의 기본적인 정보(섹터 크기, 클러스터 크기 등)를 포함합니다.

Address Range Size Field Name Description
0x0B ~ 0x0C 2Byte Byte per sector 한 섹터 당 할당되는 Byte 크기
0x0D ~ 0x0D 1Byte Sector per cluster 한 클러스터 당 할당되는 섹터 수
0x0E ~ 0x0F 2Byte Reserved Sector Count FAT Area가 나오기 전에 예약된 영역의 섹터 수
0x10 ~ 0x10 1Byte Number of FAT FAT Area의 개수, 대부분 #1과 #2로 2개가 있다
0x11 ~ 0x12 2Byte Root Directory Entry Count FAT12/16의 할당된 루트 디렉터리 엔트리 개수
0x13 ~ 0x14 2Byte Total Sector 16 볼륨상에 있는 총 섹터 수
0x15 ~ 0x15 1Byte Media Type 볼륨에 어떤 미디어가 저장되어있는지 나타냄
(플로피 디스크를 제외하고 전부다 0xF8)
0x16 ~ 0x17 2Byte FAT Size 16 FAT Area의 섹터 수를 나타낸다(FAT32 사용X)
0x18 ~0x19 2Byte Sector per track  트랙당 섹터 수
0x1A ~ 0x1B 2Byte Number of Heads 헤더 수
0x1C ~ 0x1F 4Byte Hidden Sectors 볼륨 앞에 숨겨진 섹터 수
0x20 ~ 0x23 4Byte FAT32 Size FAT 하나의 영격이 가지는 4바이트 크기의 섹터 수
0x28 ~ 0x29 2Byte Ext Flags 여러 개의 FAT 영역을 사용할 경우 설정 값
0x2A ~ 0x2B 2Byte File System Version 파일 시스템의 주 버전과 하위 버전
0x2C ~ 0x2F 4Byte Root Directory Cluster 루트 디렉터리가 위치한 클러스터 값
0x30 ~ 0x31 2Byte File System information FSINFO 구조체가 저장된 섹터 번호
0x32 ~ 0x33 2Byte Backup Boot Sector 백업된 부트 섹터의 위치
0x34 ~ 0x3F 12Byte Reserved 예약된 영역
0x40 ~ 0x40 1Byte Drive Number BIOS INT13h 드라이브 번호
0x41 ~ 0x41 1Byte Reserved1 예약된 영역
0x42 ~ 0x42 1Byte Boot Signature 확장 부트 시그니처
0x43 ~ 0x46 4Byte Volume ID 볼륨 시리얼 번호
0x47 ~ 0x51 11Byte Volume Label 볼륨 레이블(없을 경우 NO NAME)
0x52 ~ 0x59 7Byte File System Type 파일 시스템 형식
BIOS Parameter Block Total 0x0B ~ 0x59 (Size : 51 Byte)

 

  • Boot Code Error Message (0x5A ~ 0x1FD, 419Byte): 부팅 실패 시 출력되는 오류 메시지를 포함합니다.
  • Signature (0x1FE ~ 0x1FF, 2Byte): 부트 섹터의 끝을 나타내는 0x55AA 값이 위치합니다.

1.2 파일 시스템 정보(FSINFO) - 1, 7번 섹터

FSINFO(File System Information) 섹터는 FAT32에서 파일 시스템의 상태를 빠르게 탐색할 수 있도록 도와주는 구조체입니다. 사용 가능한 클러스터 공간과 관련된 정보를 포함하고 있습니다.

 

Lead Signature Reserved
 
  Struct Signature Free cluster count Next free cluster
Reserved Trail signature

FSINFO 주요 항목

  • Lead Signature (0x41615252): FSINFO 섹터임을 나타내는 값
  • Struct Signature (0x61517272): FSINFO 구조체의 시작을 나타내는 값
  • Free Cluster Count: 사용 가능한 클러스터의 개수를 나타냅니다.
  • Next Free Cluster: 다음에 사용할 수 있는 클러스터 위치를 저장합니다.
  • Trail Signature (0xAA550000): FSINFO 구조체의 끝을 나타내는 값

2. FAT 영역 (File Allocation Table Area)

FAT 영역은 파일과 디렉터리의 클러스터 할당 정보를 관리하는 테이블이 저장된 영역입니다. FAT32에서는 두 개의 FAT 테이블이 존재하며, 하나는 원본 FAT 영역이고, 다른 하나는 백업용 FAT 영역입니다.

FAT 영역 주요 항목

  • FAT1 (Original FAT): 파일이나 디렉터리에 대한 할당 정보를 기록하는 테이블입니다.
  • FAT2 (Backup FAT): FAT1 영역의 백업 영역으로, FAT1과 동일한 구조를 가집니다.
  • FAT 엔트리: 파일의 클러스터 연결 정보를 나타내며, FAT32에서는 4바이트 크기의 엔트리를 사용합니다.
  • Root Directory 시작 클러스터: 2번 클러스터에서 시작합니다.

FAT 테이블 구조

FAT 엔트리는 특정한 값을 가지며, 파일이 어떻게 클러스터에 저장되는지를 나타냅니다.

값의미

FAT32 Description
0x00000000 비할당 클러스터
0x00000002 ~ 0x0FFFFFEF 할당된 클러스터
0x0FFFFFF8 ~ 0x0FFFFFFF 마지막 클러스터(파일 끝)
0x0FFFFFF7 손상된 클러스터(Bad Cluster)
0x0FFFFFF0 ~ 0x0FFFFFFR6 예약된 값(Reserved Values)

3. 데이터 영역 (Data Area)

데이터 영역은 실제 파일과 디렉터리의 내용이 저장되는 공간으로, FAT 영역에서 할당된 클러스터들이 이곳을 참조합니다.

데이터 영역 주요 항목

  • Root Directory: 파일 시스템의 최상위 디렉터리로, 클러스터 2번에서 시작합니다.
  • 파일 및 폴더 데이터: 모든 파일과 폴더의 내용이 클러스터 단위로 저장됩니다.
  • Directory Entry: 파일과 디렉터리 정보를 저장하는 구조체로, 크기는 32Byte입니다.

Directory Entry 구조

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Name Extension Attr Reserved Create Time
Created Date Last
Accessed
Date
Starting
Cluster Hi
Last
Written Time
Last Written 
Date
Starting 
Cluster Low
File Size
필드 크기(Byte) 설명
Name 8 파일 이름
Extension 3 확장자
Attributes 1 파일 속성(읽기 전용, 시스템 파일 등)
Create Time 2 생성 시간
Create Date 2 생성 날짜
Last Access Date 2 마지막 접근 날짜
Starting Cluster 4 파일의 첫 번째 클러스터 위치
File Size 4 파일 크기 (Byte)

롱 파일 네임(Long File Name, LFN)

FAT32는 기본적으로 8.3 형식의 짧은 파일명을 사용하지만, LFN(Long File Name) 방식을 통해 최대 255자까지 지원합니다. LFN 엔트리는 UTF-16 인코딩을 사용하며, 일반적인 디렉터리 엔트리와 함께 저장됩니다.

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Order Nmae1 Atrr type Check
sum
Name2
Name2 Start cluster
low
Name3
  • Order : LFNs의 순서, 상태를 기록하는 항목(0xE5 : 삭제된 파일/폴더, 01 : 첫번째 순서)
  • Name1~ : 파일/폴더 이름, 빈 영역은 0xFF로 채워짐
  • Atrr : 0x0F일 경우 확장된 파일명이라는 뜻
  • Type : 일반적으로 0x00의 값을 가짐
  • Checksum : LFNs와 대응되는 Short Directory Entry 의 Checksum을 저장
  • Start cluster low : 0x00으로 고정