Đĩa cứng - 7 - Vùng FAT

(Tiếp theo của đĩa cứng 6)

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