Một số siêu tập tin
Trong hệ thống
NTFS mọi thứ đều được lưu dưới dạng các tập tin. Do đó, thông tin mô tả về tổ
chức của NTFS cũng được lưu dưới dạng các tập tin. Để phân biệt giữa các tập
tin dữ liệu, tập tin chương trình thông thường với các tập tin mô tả cho hệ
thống NTFS, người ta gọi các tập tin mô tả hệ thống NTFS là siêu tập tin
(metadata file). Phần dưới đây sẽ mô tả thông tin chung của một số siêu tập
tin.
Siêu tập tin $MFT
Một trong những
siêu tập tin quan trọng nhất là $MFT, vì $MFT chứa MFT (master file table). MFT
chứa danh mục của tất cả các tập tin và thư mục trong một ổ đĩa logic. Để tìm
được các tập tin, thư mục, cần phải truy cập tới siêu tập tin này.
Vị trí (cluster)
bắt đầu của MFT được lưu trong boot sector; cụ thể là trong BPB, tại offset
30h, gồm 8 byte.
Thông tin mô tả
về MFT được lưu trong entry đầu tiên của MFT, entry này có tên là $MFT. Attribute
$DATA được sử dụng để chứa nội dung của MFT. Siêu tập tin $MFT cũng sử dụng attribute
$BITMAP để quản lý việc cấp phát và sử dụng các entry, sử dụng attribute $FILE
NAME và atrribute $STANDARD_INFORMATION để chứa các thông tin mô tả khác.
Lưu ý: cần phân
biệt hai khái niệm entry $MFT và siêu tập tin $MFT. Siêu tập tin $MFT chứa toàn
bộ thông tin mô tả và nội dung của MFT, trong đó có entry $MFT.
Trong
Windows, siêu tập tin $MFT ban đầu có kích thước nhỏ nhất có thể, kích thước
này sẽ được tăng lên khi hệ thống hoặc người dùng tạo thêm các thư mục và tập
tin khác.
Siêu tập tin $MFTMirr
Như đã biết,
siêu tập tin $MFT rất quan trọng, vì nó là đầu mối để đi đến các tập tin, thư
mục khác. Trong trường hợp boot sector hoặc entry $MFT bị hỏng, hệ thống sẽ không
thể truy cập được dữ liệu, bên cạnh đó, việc khôi phục dữ liệu cũng gặp nhiều
khó khăn. Để hạn chế rủi ro này, hệ thống NTFS có lưu dự phòng một số entry
quan trọng. Một số entry quan trọng sẽ được lưu dự phòng trong siêu tập tin
$MFTMirr.
Hệ thống sử
dụng entry số 1 trong MFT để mô tả cho siêu tập tin $MFTMirr. Entry này sử dụng
một attribute kiểu không thường trú (non-resident), đó là attribute $DATA, để
chứa một số entry đầu tiên của MFT, attribute này sẽ được sử dụng trong quá
trình khôi phục hệ thống.
Attribute
$DATA chứa bốn entry đầu tiên của MFT, gồm: $MFT, $MFTMirr, $LogFile và
$Volume. Các cluster chứa $DATA nằm ở chính giữa của ổ đĩa logic. Như vậy, nếu
có hư hỏng hệ thống MFT hoặc boot sector, chương trình khôi phục sẽ dựa vào
kích thước của ổ đĩa logic để định vị và đọc được siêu tập tin $MFTMirr, từ đó
có thông tin đầu mối để khôi phục dữ liệu.
Siêu tập tin $Boot
Siêu tập tin $Boot được mô tả trong entry $Boot, đây là
entry số 7 trong MFT. Siêu tập tin $Boot chứa nội dung của boot sector. Đây là
siêu tập tin duy nhất có vị trí cố định trên ổ đĩa logic. Attribute $DATA của
siêu tập tin này luôn nằm ở sector đầu tiên của ổ đĩa logic, nội dung của
attribute này được sử dụng trong quá trình khởi động hệ thống.
Windows thường cấp phát 16 sector đầu tiên cho siêu tập tin
$Boot, nhưng thực tế chỉ được sử dụng khoảng một nửa số sector này.
Boot sector của hệ thống NTFS không có nhiều khác biệt so
với boot sector của hệ thống FAT32. Do vậy, khi khôi phục hệ thống cần lưu ý
trường hợp giống nhau này, để tránh ngộ nhận.
Boot sector cung cấp một số thông tin: kích thước của mỗi
cluster, tổng số sector của ổ đĩa logic, cluster bắt đầu của vùng MFT, kích
thước của mỗi MFT entry. Ngoài ra, boot sector còn chứa đoạn mã khởi động, đoạn
mã này có nhiệm vụ tìm kiếm, nạp và chạy các tập tin trong quá trình khởi động
hệ điều hành.
Tùy thuộc vào từng hệ thống, bản dự phòng của boot sector
được lưu ở sector cuối cùng hoặc sector giữa của ổ đĩa logic. Sector này không
được cấp cho bất kì tập tin nào, vì vậy tổng số sector do hệ thống quản lý tập
tin quản lý sẽ ít hơn tổng số sector thật của ổ đĩa logic là một sector. Trong
các hệ thống Windows NT 4.0, 2000, XP bản dự phòng được lưu ở sector cuối cùng.
Siêu tập tin $Volume
Siêu tập tin $Volume nằm tại vị trí số 3 trong MFT, siêu tập
tin này chứa tên (label)
của ổ đĩa logic và một số thông tin về phiên bản của
NTFS. Entry của siêu tập tin $Volume trong MFT
có chứa hai attribute chỉ có duy nhất trong entry này là attribute $VOLUME_NAME
và attribute $VOLUME_INFORMATION.
Attribute
$VOLUME_NAME chứa tên (dạng Unicode) của ổ đĩa logic. Attribute
$VOLUME_INFORMATION cho biết phiên bản của NTFS và một số thông tin khác.
Windows NT 4.0 sử dụng NTFS phiên bản 1.2; Windows 2000 là 3.0 và Windows XP là
3.1.
Siêu tập tin $AttrDef
Siêu tập tin $AttrDef nằm tại entry số 4 trong MFT. Attribute
$DATA của siêu tập tin này chứa tên và mã loại (type indentifier) của tất cả
các attribute. Trong hệ thống NTFS có một số vấn đề có tính “lòng vòng”, đây là
một ví dụ, tức là bạn phải đọc attribute $DATA trong siêu tập tin $AttrDef để
biết được mã loại của attribute $DATA. Tuy nhiên, thực tế các attribute đã được
gán những mã loại mặc định.
Siêu tập tin $AttrDef giúp cho việc quản lý các attribute
được thống nhất, có thể định nghĩa lại mã loại cho các attribute quan trọng.
Các vấn đề liên quan đến nội dung của tập tin
Cluster
Mỗi tập tin trong hệ thống NTFS luôn được bắt đầu từ một
entry trong vùng MFT, thông tin mô tả và nội dung của một tập tin lưu trong các
attribute. Các attribute có thể là thường trú (resident) hoặc không thường trú
(non-resident). Nội dung của các attribute thường trú được lưu ngay trong entry
trong vùng MFT, nội dung của các attribute không thường trú đươc lưu trên các
cluster.
Cluster là một nhóm các sector liền nhau, số sector của một
cluster luôn là lũy thừa của 2 (ví dụ: 1, 2, 4, 8, 16).
Mỗi cluster được đánh một địa chỉ, bắt đầu từ 0. Cluster 0
bắt đầu từ sector đầu tiên của hệ thống tập tin (ổ đĩa logic). Để tìm sector
bắt đầu của một cluster bất kì, chỉ cần lấy địa chỉ của cluster nhân với số
sector của một cluster.
Sector = Cluster *
sectors_per_cluster
(sectors_per_cluster: số sector của một cluster)
Hệ thống NTFS không có cấu trúc tổ chức một cách chặt chẽ,
bất kì cluster nào cũng có thể được cấp cho các tập tin hay các attribute, chỉ
ngoại trừ siêu tập tin $Boot luôn được lưu tại cluster đầu tiên. Lưu ý: hệ điều
hành của Microsoft sẽ sử dụng một số cách thức cấp phát cluster đặc thù. Nếu
kích thước của một ổ đĩa (tính bằng sector) mà không chia hết cho kích thước
của một cluster, thì một vài sector ở cuối đĩa sẽ không thuộc về cluster nào và
kích thước của vùng này luôn nhỏ hơn kích thước của một cluster.
Siêu tập tin $Bitmap
Trạng thái cấp phát các cluster được lưu trong siêu tập tin
$Bitmap, đây là entry số 6 trong MFT. Mỗi bit trong attribute $DATA sẽ được ánh
xạ tới một cluster trong ổ đĩa logic. Ví dụ: bit 0 sẽ tương ứng với cluster 0,
bit 1 tương ứng với cluster 1. Nếu bit 0 được thiết lập giá trị là 1, có nghĩa
là cluster 0 đã được cấp phát (đã được sử dụng), nếu mang giá trị 0 nghĩa là
cluster 0 chưa được cấp phát.
Siêu tập tin $BadClus
Hệ thống NTFS quản lý các cluster
bị hỏng trên ổ đĩa logic bằng siêu tập tin $BadClus. Siêu tập tin này nằm tại
entry số 8 trong MFT. Attribute $DATA lưu thông tin về các cluster bị hỏng. Attribute $DATA được đặt tên là $Bad, đây
là một attribute “thưa” (sparse attribute, đọc lại phần Attribute “thưa”). Khi
một cluster được báo là bị hỏng, địa chỉ của nó sẽ được lưu vào attribute
$DATA. Việc sử dụng attribute “thưa” sẽ giúp tiết kiệm không gian đĩa, cụ thể
các cluster chứa toàn các giá trị 0 sẽ không được cấp phát không gian đĩa.
Kích thước của attribute $Bad (được hệ thống thông báo) chính bằng kích
thước của cả hệ thống (cả ổ đĩa logic), nhưng thực tế, ban đầu nó không được
cấp cluster nào. Windows sẽ đưa cluster vào attribute $Bad khi nó phát hiện
cluster bị hỏng, có một số hệ thống, đĩa cứng sẽ làm việc này trước khi Windows
làm.
Cách cấp phát đĩa cứng
Mỗi một hệ điều
hành sử dụng các cách cấp phát đĩa cứng khác nhau. Hệ thống Windows XP sử dụng
kĩ thuật best-fit (phù hợp nhất).
Khi cần cấp phát
một không gian đĩa cứng để lưu dữ liệu, kĩ thuật best-fit sẽ tìm vùng đĩa cứng
còn trống nhỏ nhất, có kích thước bằng hoặc lớn hơn kích thước cần thiết để lưu
dữ liệu.
Ví dụ: cần cấp
phát một không gian đĩa cứng là 10 cluster cho một tập tin. Trên đĩa cứng hiện
tại có ba vùng còn trống. Vùng đầu tiên là từ cluster 100 đến cluster 199 (100
cluster), vùng thứ hai từ cluster 280 đến 319 (40 cluster) và vùng thứ ba từ
cluster 370 đến 549 (180 cluster). Dựa vào kĩ thuật best-fit, hệ thống sẽ chọn
vùng thứ hai để cấp phát cho tập tin. Xem hình minh họa bên dưới.
Cấu trúc tổ chức của hệ thống quản lý tập tin NTFS
Hệ thống quản lý
tập tin NTFS không có quy định chặt chẽ về cấu trúc tổ chức, nhưng các hệ điều
hành Windows luôn có các quy ước chung trong việc tổ chức quản lý hệ thống tập
tin.
Khái niệm quan
trọng đầu tiên trong hệ thống NTFS là vùng MFT. Windows luôn tạo ra vùng này
với kích thước nhỏ nhất có thể, sau đó vùng này sẽ được mở rộng ra khi có nhu
cầu. Điều này có thể dẫn tới việc đĩa bị phân mảnh, nếu vùng đĩa ngay sau MFT được
cấp phát cho các tập tin. Để ngăn ngừa tình huống này, Windows đã dành riêng
một vùng cho MFT, các cluster thuộc vùng này sẽ không được cấp phát cho các tập
tin, trừ trường hợp các vùng khác của đĩa đã được sử dụng hết. Windows thường
dành 12.5% không gian đĩa cho vùng MFT.
Tất các các phiên
bản NTFS và Windows đều cấp phát cluster đầu tiên cho siêu tập tin $Boot. Windows
NT và 2000 luôn đặt các siêu tập tin ngay sau $Boot và vùng giữa của ổ đĩa
logic. Ví dụ, nếu một hệ thống tập tin có kích thước một cluster là 1KB (2
sector), thì 8 sector đầu tiên sẽ được cấp cho $Boot, các cluster cấp cho $MFT
sẽ bắt đầu tại cluster 16 hoặc 32. Vùng MFT có thể mở rộng tới 12.5% không gian
đĩa. Cluster ở vùng giữa của ổ đĩa logic sẽ được cấp cho $MFTMirr, theo sau là $LogFile,
$Root, $Bitmap và $Upcase. Trong hệ thống Windows NT, $AttrDef nằm sau $MFT.
Trong hệ thống Windows 2000, $AttrDef nằm trước $MFT.
Trong hệ thống
Windows XP: $LogFile, $AttrDef, $MFT, và $Secure nằm tại vị trí 1/3 của ổ đĩa
logic. Các siêu tập tin còn lại nằm ở giữa của ổ đĩa logic. Chỉ có $Boot là
luôn nằm ở các cluster đầu tiên của ổ đĩa logic. Các cluster còn lại được sử
dụng để cấp cho các tập tin và thư mục thông thường của người dùng. Hình dưới
đây minh họa tổ chức của NTFS trên hai hệ thống Windows 2000 và XP.
---------------
Tham khảo
[1] Brian Carrie, File
System Forensic Analysis, Addison Wesley Professional, 2005
----------------------
Cập nhật: 2014/1/14