Data Area
Data Area: 파일이나 디렉토리 데이터가 실제로 저장되는 곳이다. 해당 영역의 시작 부분 (첫 번째 섹터)에는 Root Directory의 데이터가 저장되며, 이후 디렉토리와 파일의 데이터는 'Directory Entry' 형태로 순차적으로 저장된다.
Directory Entry는 파일이나 디렉토리의 이름 길이에 따라 두 가지 유형이 있습니다. 파일 이름이 7 Byte 이하인 경우는 'Regular Directory Entry'로, 8 Byte 이상인 경우는 'Long name Directory Emtry'로 저장된다.
Root Directory는 FAT #2의 다음 섹터부터 존재하기 때문에, FAT #2의 섹터에서 BPB 영역의 "FAT Size" 정보를 참조하여 "FAT #2 섹터 + FAT Size"를 계산하면 접근할 수 있다. 이 또한 FAT32의 구조를 도식화해 보면 이해하기 쉽다.
FAT #2 (6,285번 섹터) + FAT Size (0x07 F3 = 2,035) = Root Directory (8,320번 섹터)
1. Short Name Directory Entry
Short Name Directory Entry: 파일 혹은 디렉토리 이름이 7 Byte 이하인 경우 생성되는 Entry로, 32 Byte의 크기를 갖는다. 파일 혹은 디렉토리 이름, 확장자, 속성 플래그 값, 메타데이터, 클러스터 주소, 크기 등의 정보를 포함한다.
추가적으로 파일의 생성 시간(마지막 수정일 (방법 동일))과 할당된 클러스터의 시작 주소를 계산해 보았다.
Created Time Tenth: 0xB4 = 180 (d) → 1.80초 (범위: 0 ~ 199, 즉 1.99초까지 표현 가능하다. 이는 Created Time이 짝수 초만 표현 가능하기 때문이다.)
Created Time: 0x09 7C = 00001 001011 11100 (b) → 01시 11분 56(28 x 2)초 (5(H)/6(M)/5(S) 법칙)
Created Data: 0x57 89 = 0101011 1100 01001 (b) → 2023(1980 + 43)년 12월 9일 (7(Y)/4(M)/5(D) 법칙)
파일 생성 시간 = 2023년 12월 9일 01시 11분 57.8초
Starting Cluster High: 0x00 00 = 0 (d)
Starting Cluster Low: 0x00 06 = 6 (d)
클러스터 시작 주소 = 0x00 00 00 06 = 6 (d)
아래는 FAT Area의 Cluster Allocation을 확인하기 위한 과정에서 생성한 파일들을 대상으로 정리해 보았다.
Offset | Size (Byte) | Information |
0x00 | 1 | Satus |
0x01 ~ 07 | 7 | Name |
0x08 ~ 0A | 3 | Extension |
0x0B | 1 | Attributes (0x01 = 읽기 전용) (0x02 = 숨김 파일) (0x04 = 운영체제 시스템 파일) (0x08 = 볼륨 레이블) (0x10 = 디렉토리) (0x20 = 일반 파일) |
0x0C | 1 | Reserved |
0x0D | 1 | Create Time Tenth (0~199) |
0x0E ~ 0F | 2 | Created Time (Hour, Minute, Second) |
0x10 ~ 11 | 2 | Created Date |
0x12 ~ 13 | 2 | Last Accessed Date |
0x14 ~ 15 | 2 | Starting Cluster High |
0x16 ~ 17 | 2 | Last Written Time (Hour, Minute, Second) |
0x18 ~ 19 | 2 | Last Written Date |
0x1A ~ 1B | 2 | Starting Cluster Low |
0x1C ~ 1F | 4 | File Size |
2. Long Name Directory Entry
파일 혹은 디렉토리 이름이 8 Byte 이상인 경우 2개의 Long Name Directory Entry(초록색)와 하나의 Short Name Directory Entry(빨간색)가 생성되어 총 3개의 Entry가 파일의 이름을 저장한다.
Long Name Directory Entry: 파일 혹은 디렉토리 이름이 8 Byte 이상인 경우 생성되는 Entry로, 32 Byte의 크기를 갖는다. 이때 파일 혹은 디렉토리 이름, 이름 체크섬, 속성 플래그의 정보를 포함한다.
Offset | Size (Byte) | Information |
0x00 | 1 | Sequence Number / Allocation Status |
0x01 ~ 0A | 10 | Name 1 (1 ~ 5) |
0x0B | 1 | Attribute (Long Name Directory Entry = 0x0F) |
0x0C | 1 | Reserved |
0x0D | 1 | Checksum |
0x0E ~ 19 | 12 | Name 2 (6 ~ 11) |
0x1A ~ 1B | 2 | Reserved |
0x1C ~ 1F | 4 | Name 3 (12 ~ 13) |
$RECYCLEBIN
Data Area에서 디스크를 초기화하고 처음 데이터를 저장하면, 해당 Directory Entry가 생성되고 이후에 $RECYCLEBIN Directory Entry가 자동으로 생성된다.
데이터 저장은 2번 클러스터부터 저장한다.