FAT 16 구조 분석

c0wb3ll ㅣ 2019. 11. 25. 14:36

FAT16 구조 분석

FAT12와 FAT16은 클러스터를 표현하는 FAT Entry의 비트 수가 12와 16개인 점을 제외하면 동일 하므로 FAT16만 분석

fat16 파일시스템 구조 분석

1. Reserved Area (예약된 영역) - 1 Sector

예약된 영역은 이름 그대로 미리 예약된 영역이다. 파티션의 가장 첫 부분에 위치(VBR도 이 예약된 영역에 속함) FAT12/16과 FAT32의 제일 큰 차이점은 '예약된 영역' 이다. 기본적으로 FAT12/16은 1섹터의 크기로 할당 됨 (FAT32, NTFS는 추가적인 예약 영역을 가짐) 여기서 알 수 있는 점은 VBR=(부트섹터)는 파티션의 가장 첫번째 부분에 위치하는데 즉 FAT12/16에서는 VBR이 예약된 영역이란는 것을 알 수 있다.

1.1. Jump Command to Boot Code = CPU Jump Command (0x0000 - 0x0002, 3byte)

CPU 명령 실행 분기를 부트코드로 옮기는 명령이다. FAT12/16은 [EB 58 90], FAT32는 [EB 58 90], NTFS는 [EB 52 90]등 형태가 다양 중간에 위치한 값이 Jump 할 부트코드의 Offset 주소이다.

fat16 점프코드

 

(FAT16 점프 커맨드 부트 코드)

1.2. BPB = BIOS Parameter Block ( 0x0003 - 0x003D, 59byte)

이곳에는 파티션의 정보들 포함 BPB에 포함된 정보를 참조하여 파일시스템이 부팅과정을 수행

FAT16 바이오스 파라미터

(FAT16의 BIOS Parameter Block) BPB내용

 

Address range size Field Name Description
0x0003 - 0x000A 8byte OEM ID OEM(Original Equipment Manufacturer)식별자
0x000B - 0x000C 2byte Bytes per sector 한 섹터 당 할당되는 byte 크기
0x000D 1byte Sectors per cluster 한 클러스터 당 할당되는 섹터 수
0x000E - 0x000F 2byte Reserved sector count FAT Area가 나오기 전에 예약된 영역의 섹터 수
0x0010 1byte Number of FAT FAT Area의 개수, 통상 #1, #2 로 2개 있음
0x0011 - 0x0012 2byte Root directory entry count FAT12/16 의 할당된 루트 디렉토리 엔트리 개수
(FAT32는 0으로 세팅)
0x0013 - 0x0014 2byte Total Sector 16 볼륨 상에 있는 총 섹터 수
0x0015 1byte Media Type 볼륨에 어떤 미디어가 저장되어 있는지 나타냄
(플로피 디스크를 제외하고 모두 0xF8)
0x0016 - 0x0017 2byte FAT size 16 FAT Area의 섹터 수를 나타냄.(FAT32는 사용 X)
0x0018 - 0x0019 2byte Sector per track 트랙 당 섹터 수
0x001A - 0x001B 2byte Number of heads 헤더 수
0x001C - 0x001F 4byte Hidden Sectors 볼륨 앞에 숨겨진 섹터 수
0x0020 - 0x0023 4byte Total Sector32 볼륨 상에 있는 총 섹터 수(....?)
0x0024 1byte INT 0x13 drive number x86계열에서 사용하는 INT 0x13 사용시 필요한 필드
(플로피 = 0x00, 하드 드라이브 = 0x80)
0x0025 1byte Reserved 사용하지 않는 예약 영역
0x0026 1byte Boot signature 확장 부트 서명
0x0027 - 0x002A 4byte Volume serial number 해당 볼륨의 고유 시리얼 번호가 기록
0x002B - 0x0035 11byte Volume label 윈도우에서의 해당 볼륨 레이블
0x0036 - 0x003D 8byte File System Type 파일시스템 형식

(BPB의 각 필드 내용)

BPB 다음 영역부터는 부트코드 에러메시지가 존재 그 뒤에는 Signature 0x55 0xAA가 존재

Address range size Field Name Dscription
0x003E - 0x01FD 447byte Boot code Error massage 부트코드 에러 메시지
0x01FE - 0X01FF 2byte Signature 서명 0x55AA

 

2.FAT Area #1, #2 - FAT size 16 필드 참조

FAT Area는 위에서 알아보았던 Reserved sector count 필드 할당된 값만큼의 섹터를 건너 뛰어야 나타남

FAT영역은 두가지로 나뉘는데 FAT영역과 FAT영역의 백업본으로 구성돼있기 때문 (=같은 값을 가진 영역이 2가지 존재) FAT 영역의 크기는 예약된 영역의 FAT size 16 필드에서 확인 가능

이 영역에는 후에 나오는 데이터 영역(실제 데이터 클러스터들이 존재하는 영역)에 할당된 클러스터들의 상태를 표시) FAT16은 각 클러스터의 할당정보를 16bit(=2byte) 크기로 사용해 나타낸다. 특별한 구조체 해당 테이블들은 클러스터를 Linked List 형태로 관리한다.

클러스터 구조체

(FAT Area)

FAT Area의 구조로 최초 8byte를 제외하고는 전부 클러스터 단위로 파일을 관리하는 것을 확인할 수 있음