FAT12
•
5.25인치 플로피디스크에 파일을 저장하기 위해 개발
•
1983년 MS-DOS 2.0이 출시될 때 FAT12에 계층형 디렉터리가 지원됨
•
12비트를 사용하여 클러스터 위치를 표현, 212 최대 4,096개의 클러스터표현 가능, 이중에 12개는 예약 영역으로 실제 4,084개의 클러스터를 표현
FAT16
•
HDD 기술의 발달로 개인용 컴퓨터에서 사용할 파일시스템의 필요성 증
가
•
1988년 MS-DOS 4.0에서 FAT16 발표
•
2^16 최대 65,524개의 클러스터표현(예약 영역 12개 제외)
VFAT or Fast FAT
•
1995년 MS는 Windows 95에서 FAT 파일시스템의 성능과 기능을 향상
시킴
•
LFNs (Long File Names) 지원
•
이전의 FAT 파일시스템은 8.3 File naming, 대문자만 가능
•
최대 255 문자까지 파일명으로 적용 가능
•
이전 버전의 DOS와 호환성 유지
•
볼륨의 최대 용량은 2GB로 파일 시스템의 용량 표현 문제가 여전히 존재
FAT32
•
1996년 MS는 Windows 95 OSR2에서 FAT32 사용
•
클러스터 표현 비트 수 28 bits (4 bits 예약 영역)
•
볼륨의 최대 용량은 32GB로 제한
FAT 파일 시스템의 호환성
•
1996년 MS는 Windows 95 OSR2에서 FAT32 사용
•
클러스터 표현 비트 수 28 bits (4 bits 예약 영역)
•
볼륨의 최대 용량은 32GB 제한
구조
File Allocation Table
Structure - Reserved Area
•
FAT32
◦
0, 6 : Volume Boot Sector, 부트 섹터 오프셋 50-51 항목을 사용해 백업 섹터 조정 가능
◦
1, 7 : File System Information(FSINFO) Structure, 부트섹터 오프셋 48-49 항목을 사용해 임의로 지정 가능
◦
FSINFO 구조체는 비할당 클러스터의 첫 위치와 전체 비할당 클러스터 의 수를 알려줌으로써 저장할 데이터를 빠르게 할당할 수 있도록 도와줌
◦
2, 8 : Additional bootstrap code
Structure - Volume Boot Sector Format of FAT 12/16/32
•
Reserved Sector Count : 설정 된 개수를 지나면 FAT#1가 나타남
•
Root director entry count : 루트 디렉토리에 몇 개의 엔트리를 수용할 것인지를 나타냄,
•
FAT16의 경우 루트 디렉토리 영역이 따로 분리되어 있기 때문임
•
Media Type
◦
0xF0, 0xF9, 0xFD, 0xFF, 0xFC, 0xFe : 3.5 혹은 5.25인치 플로피디스크
◦
0xF8 : 고정식 디스크(플로피 디스크를 제외한 모든 장치)
Total Sector 32 : FAT32는 Total Sector 16 대신 이 영역에 4바이트로 섹
터 수를 표시함
•
Root directory cluster offset : FAT16과는 다르게 루트 디렉토리가 고정되
어 있지 않기 때문, 루트 디렉토리 시작 위치가 지정
•
Backup boot sector offset : 보통 6번 섹터를 이용
Address range | size | Field Name | Description |
0x0003 – 0x000A | 8 byte | OEM ID | OEM(Original Equipment Manufacturer) 식별자. 이 영역을 참조하는 작업은 없음, 단지 OEM을 나타내는 부분 |
0x000B – 0x000C | 2 byte | Bytes per sector | 한 섹터 당 할당되는 byte 크기 |
0x000D – 0x000D | 1 byte | Sectors per cluster | 한 클러스터 당 할당되는 섹터 수 |
0x000E – 0x000F | 2 byte | Reserved sector count | FAT Area가 나오기 전에 예약된 영역의 섹터 수 |
0x0010 – 0x0010 | 1 byte | Number of FAT | FAT Area의 개수, 통상 #1, #2로 두개 있음 |
0x0011 – 0x0012 | 2 byte | Root directory entry count | FAT12 / FAT16의 할당된 루트 디렉토리 엔트리 개수 (FAT32는 0으로 세팅) |
0x0013 – 0x0014 | 2 byte | Total sector 16 | 볼륨 상에 있는 총 섹터수 |
0x0015 – 0x0015 | 1 byte | Media Type | 볼륨에 어떤 미디어가 저장되어 있는지 나타냄. (플로피디스크를 제외하고 모두 0xF8) |
0x0016 – 0x0017 | 2 byte | FAT size 16 | FAT Area의 섹터 수를 나타냄.(FAT32에는 쓰이지 않음) |
0x0018 – 0x0019 | 2 byte | Sector per track | 트랙 당 섹터 수 |
0x001A – 0x001B | 2 byte | Number of heads | 헤더 수 |
0x001C – 0x001F | 4 byte | Hidden sectors | 볼륨 앞에 숨겨진 섹터 수 |
0x0020 – 0x0023 | 4 byte | Total sector32 | 볼륨 상에 있는 총 섹터수 (Total sector 16에서 표현이 불가능하면 이 필드를 쓰는듯..) |
0x0024 – 0x0024 | 1 byte | INT 0x13 drive number | x86 계열에서 사용하는 INT 0x13 사용시 필요한 필드 (Floppy=0x00, Hard Drvie=0x80) |
0x0025 – 0x0025 | 1 byte | Reserved | 사용하지 않는 예약 영역 |
0x0026 – 0x0026 | 1 byte | Boot signature | 확장 부트 서명 |
0x0027 – 0x002A | 4 byte | Volume serial number | 해당 볼륨의 고유 시리얼 번호가 기록됨 |
0x002B – 0x0035 | 11 byte | Volume label | 윈도우에서의 해당 볼륨 레이블 |
0x0036 – 0x003D | 8 byte | File system type | 파일시스템 형식 |
Total 0x0003 - 0x003D | 59 byte | BIOS Parameter Block | 총 크기 |
Volume Boto Sector
FAT 구조
•
FAT (File Allocation Table) Area - #1 FAT, #2 FAT(Backup)
•
저장된 파일의 클러스터 할당 관계를 표현 - FAT 12/16 (2 bytes), FAT
32 (4 bytes)
•
FAT Entry 0 - Media Type
•
FAT Entry 1 - Volume Status
Root Directory
•
FAT영역 바로 뒤, 데이터 영역의 제일 앞부분
•
FAT12/16
◦
32개 섹터인 16,384Byte를 Root Directory로 사용
◦
Directory Entry가 32Byte이므로 512개의 Entry를 나타낼 수 있음
•
FAT 32
◦
어느 곳에서 Root Directory가 올 수 있으나 주로 FAT Entry 2번
(cluster 2번)에 위치함
◦
개수의 제한이 없음
•
디렉터리는 디렉터리 내부에 포함되는 하위 디렉터리 및 파일의 이름, 확장자, 시간 정보, 크기 등을 표현하기 위해 Directory Entry라는 구조를 사용
Structure FAT Data Area
•
모든 파일과 디렉터리는 Directory Entry로 표현됨
•
파일 이름 또는 디렉토리 이름의 문자 제한
◦
영어 대문자 : A ~ Z (소문자는 대문자로 변환)
◦
숫자 : 0 ~ 9
◦
특수 문자 : $ % ` - _ @ ~ ! ( ) { } ^ # &
•
0xE5로 첫 번째 바이트가 시작되면 해당 Entry는 삭제되었음을 의미(복
구 가능 이유임)
◦
파일이 삭제되면 이외에도 FAT Entry도 0x00 으로 초기화 됨
•
첫 번째 바이트가 0x00이면 아직 사용되지 않은 Entry를 의미