Dia cung - 18 - NTFS - Siêu tập tin



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