Vùng FAT
Vùng dữ liệu quan trọng kế tiếp của một ổ đĩa logic FAT32 là
vùng FAT (File Allocation Table).
Vùng FAT có hai nhiệm vụ quan trọng:
-
Cho biết trạng thái cấp phát các cluster trong
vùng Data.
-
Xác định các cluster thuộc về một tập tin. Nếu
biết được cluster bắt đầu của một tập tin, dựa vào vùng FAT sẽ biết được các
cluster còn lại của tập tin này.
Vùng FAT thực tế là hình ảnh của vùng Data thu nhỏ. Mỗi
cluster trong vùng Data tương đương với một entry trong vùng FAT.
Vùng FAT bắt đầu ngay sau vùng Reserved. Thường gồm hai FAT
Structure: FAT Structure chính và FAT Structure dự phòng. FAT Structure dự
phòng – nếu có – sẽ bắt đầu ngay sau FAT
Structure chính.
Số FAT Structure, kích thước của mỗi FAT Structure được chỉ
định trong Boot Sector của ổ đĩa logic, tuy nhiên, thực tế có thể không sử dụng
hết kích thước này.
FAT Structure được chia thành các entry, kích thước của mỗi entry
tùy thuộc vào hệ thống FAT, ví dụ: FAT32 là bốn byte, FAT16 là hai byte,…v.v.
Các entry được đánh chỉ mục từ 0. Hai entry đầu tiên (FAT[0],
FAT[1]) không sử dụng để chứa số hiệu cluster, FAT[[0] chứa mã loại đĩa (media
type), FAT[1] chứa mã cho biết trạng thái sử dụng đĩa (ví dụ: cho biết máy đã bị
tắt không đúng cách).
Một số giá trị của entry:
-
0: Nếu cluster chưa được cấp phát.
-
Khác 0: Nếu cluster đã được cấp phát, giá trị
này chính là vị trí của cluster kế tiếp thuộc về tập tin.
-
Lớn hơn 0x0FFF FFF8: Nếu là cluster kết thúc của
tập tin, đây là dấu hiệu kết thúc tập tin (EOF: End – Of – File).
-
0x0FFF FFF7: cluster tương ứng bị hư hoặc không
thể cấp phát cho tập tin.
Khi biết được số hiệu cluster bắt đầu của một tập tin, tìm tới
entry tương ứng trong FAT Structure, liên kết tới các entry kế tiếp cho tới khi
gặp dấu hiệu kết thúc EOF. Tập hợp các entry này là các cluster chứa dữ liệu của
tập tin trong vùng Data.
Ví dụ: TapTin1.txt nằm trên các cluster 3, 5, 8, 4 và TapTin2.doc
nằm trên các cluster 6, 7, 9 được minh họa trong hình sau:
Từ Boot Sector xác định được:
-
Số sector của vùng Reserved: giá trị này chứa
trong byte thứ 14 và 15 của Boot Sector.
-
Vùng FAT bắt đầu tại: Số sector của vùng Reserved
+ 1.
-
Số FAT Structure: giá trị này chứa trong byte thứ
16 của Boot Sector.
-
Kích thước (tính bằng sector) của mỗi FAT Structure: giá
trị này chứa trong byte thứ 36-39 của Boot Sector.
-
Kích thước của vùng FAT (tính bằng sector) = Số FAT Structure *
Kích thước của mỗi FAT Structure. Hình minh họa bên dưới.
Ví dụ, biết được vùng Reserved bắt đầu tại sector 63, từ bảng
phân tích các trường của Boot Sector, biết được vùng Reserved có kích thước 38
sector, vậy vùng FAT sẽ bắt đầu tại sector: 63 + 38 = 101.
Số FAT Structure
là 2. Kích thước của mỗi FAT Structure
là 15941. Vậy kích thước của vùng FAT là: 2 * 15941 = 31882 (sector).
Một phần nội dung của vùng FAT được minh họa trong hình sau.
---------------------------
Cập nhật: 2013/4/9
-------------------------
Tham khảo:
[3] FAT32_Hardware White Paper
[4] http://en.wikipedia.org