FAT16 구조 분석
FAT12와 FAT16은 클러스터를 표현하는 FAT Entry의 비트 수가 12와 16개인 점을 제외하면 동일 하므로 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 점프 커맨드 부트 코드)
1.2. BPB = BIOS Parameter Block ( 0x0003 - 0x003D, 59byte)
이곳에는 파티션의 정보들 포함 BPB에 포함된 정보를 참조하여 파일시스템이 부팅과정을 수행
(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를 제외하고는 전부 클러스터 단위로 파일을 관리하는 것을 확인할 수 있음