He thong quan ly tap tin NTFS - 6 - MFT - MFT entry



(tiếp theo của He thong quan ly tap tin NTFS - 5 - VBR - BPB vi du)


MFT


MFT (Master File Table) là thành phần quan trọng nhất trong hệ thống NTFS. MFT chứa thông tin về tất cả các tập tin và thư mục trong ổ đĩa logic.

Khi đĩa được định dạng theo NTFS, Microsoft sẽ khởi tạo MFT với kích thước nhỏ nhất có thể, sau này sẽ mở rộng thêm khi có nhu cầu. Cách làm này giúp tăng tính linh hoạt của hệ thống NTFS, MFT có thể mở rộng một cách dễ dàng khi người dùng tăng dung lượng của ổ đĩa logic.

MFT được xem là điểm bắt đầu để đi đến các tập tin trên một ổ đĩa logic, có thể xem nó như là “mục lục” của ổ đĩa logic, xem Hình 20.

Vị trí bắt đầu của MFT được  tính bằng cluster, được lưu trong BPB tại offset 30h, là một số kích thước 8 byte.



Đọc MFT

Từ bảng thông tin của BPB trong VBR, xét 8 byte tại offset 30h, giá trị của 8 byte này cho biết MFT bắt đầu tại cluster: 0x0000 0000 000C 0000 = 786 432.

Đổi sang sector: (lưu ý, số sector của một cluster được lưu trong BPB)

Sector = Cluster * số sector của một cluster

= 786 432 * 8

= 6 291 456

Lưu ý: đây là sector bắt đầu logic, tức là tính từ đầu ổ đĩa logic. Như vậy, sector vật lý sẽ là: 6 291 456 + 63 = 6 291 519 (63 là số sector đứng trước ổ đĩa logic C:\).

Hình 21 dưới đây là một phần nội dung của MFT bắt đầu tại sector 6 291 519.



MFT entry


MFT được chia nhỏ thành các phần bằng nhau gọi là MFT entry. Kích thước của một MFT entry được quy định trong BPB, thường là 1024 byte.

Khi một tập tin hoặc thư mục được tạo ra, sẽ có ít nhất một MFT entry được tạo ra trong MFT, để mô tả thông tin cho tập tin hoặc thư mục đó.

Trong các hệ thống của Microsoft, MFT entry sẽ không bị xóa, khi đã được tạo ra. Ví dụ, khi người dùng tạo tập tin A, một MFT entry cho tập tin A sẽ được tạo ra trong MFT. Khi tập tin A bị xóa, hệ thống sẽ không xóa MFT entry thuộc về tập tin A, mà nó chỉ đánh dấu MFT entry đó là chưa có tập tin nào sử dụng và có thể cấp cho các tập tin khác.

MFT bản chất là một tập tin, do vậy cũng có một MFT entry mô tả cho chính nó, đó chính là MFT entry đầu tiên trong MFT, có tên là $MFT. $MFT mô tả về kích thước và tổ chức của MFT.

Có hai loại MFT entry:

-         MFT entry cho tập tin siêu dữ liệu (metadata file): chứa các thông tin mô tả về cấu trúc tổ chức của hệ thống NTFS.

-         MFT entry cho tập tin dữ liệu (data file): chứa thông tin mô tả cho các tập tin dữ liệu, có thể chứa cả phần dữ liệu của tập tin.

Windows dành một số MFT entry đầu tiên trong MFT cho các tập tin siêu dữ liệu. Các MFT entry còn lại cho các tập tin dữ liệu.

Cấu trúc của MFT entry

MFT entry gồm hai thành phần: header và các attribute.

Header gồm 42 byte đầu tiên được sử dụng để chứa một số thông tin mô tả cho MFT entry.

Phần còn lại của MFT entry được sử dụng để chứa các attribute. Nếu các attribute không sử dụng hết 1024 byte, hệ thống sẽ sử dụng giá trị 0xffffffff để đánh dấu kết thúc.

Hình 22 dưới đây minh họa tổ chức của một MFT entry, gồm header và ba attribute.



Các trường cụ thể của header được thể hiện trong bảng sau.

Offset
Số byte
Mô tả
0x0 – 0x03
4
Dấu hiệu nhận biết MFT entry.
0x04 – 0x05
2
Địa chỉ (offset) của Update sequence.
0x06 – 0x07
2
Số phần tử của mảng Fixup, mảng này chứa các giá trị bị thay thế trong quá trình thao tác với Update sequence.
0x08 – 0x0F
8
$LogFile Sequence Number (LSN): mã định danh MFT entry của file log (log record).
0x10 – 0x11
2
Sequence Number: cho biết số lần MFT entry này đã được sử dụng lại. Giá trị này được tăng lên một đơn vị sau mỗi lần tập tin tương ứng với MFT entry này bị xóa. Mang giá trị 0 nếu MFT entry này chưa được sử dụng.
0x12 – 0x13
2
Reference Count: cho biết số thư mục mà tập tin này được hiển thị trong đó, hay nói cách khác là số thư mục tham chiếu đến tập tin này. Trường này còn có tên gọi khác là hard link count.
0x14 – 0x15
2
Địa chỉ (offset) bắt đầu của các attribute.
0x16 – 0x17
2
Flags:
- giá trị 0x01: MFT entry đã được sử dụng
- giá trị 0x02: MFT entry của một thư mục
- giá trị 0x04, 0x08: không xác định
0x18 – 0x1B
4
Số byte đã được sử dụng trong MFT entry.
0x1C – 0x1F
4
Kích thước vùng đĩa đã được cấp cho MFT entry.
0x20 – 0x27
8
Tham chiếu đến MFT entry cơ sở của nó (Base  MFT Record). Mang giá trị 0 nếu là MFT entry cơ sở. MFT entry cơ sở dùng để chứa các thông tin về các MFT entry mở rộng (Extension Record).
0x28 – 0x29
2
Next attribute ID: mã định danh của attribute kế tiếp sẽ được thêm vào MFT entry.

Ví dụ

Tập tin được tạo trong tình huống ví dụ là Test.txt, như vậy sẽ có một MFT entry cho tập tin Test.txt được tạo ra trong MFT. Để xác định MFT entry này, cách đơn giản nhất là duyệt qua các khối 1024 byte (đây là kích thước của một MFT entry) bằng mắt thường, tại mỗi MFT entry quan sát giá trị tại offset 0x00F2, nếu thấy chuỗi Test.txt thì đó chính là MFT entry cho tập tin Test.txt. Ngoài ra, có thể sử dụng chức năng tìm kiếm của công cụ Disk Editor.

Hình 23 dưới đây là một phần nội dung MFT entry của tập tin Test.txt, nằm tại sector vật lý 6 321 933.



Header của MFT entry này gồm 42 byte đầu tiên, phần tô vàng ở Hình 23. Giá trị của các trường được minh họa ở bảng sau.

Offset
Số byte
Giá trị
Ý nghĩa
0x0 – 0x03
4
“FILE”
Dấu hiệu nhận biết MFT entry là “FILE”, nếu MFT entry bị lỗi giá trị của trường này sẽ là “BAAD”.
0x04 – 0x05
2
0x0030
Địa chỉ (offset) của Update sequence.
0x06 – 0x07
2
0x0003
Số phần tử của mảng Fixup, mảng này chứa các giá trị bị thay thế trong quá trình thao tác với Update sequence
0x08 – 0x0F
8
0x0000 0000 0934 357B
$LogFile Sequence Number (LSN): mã định danh MFT entry của file log (log record).
0x10 – 0x11
2
0x000B
Sequence Number: cho biết số lần MFT entry này đã được sử dụng lại. Giá trị này được tăng lên một đơn vị sau mỗi lần tập tin tương ứng với MFT entry này bị xóa. Mang giá trị 0 nếu MFT entry này chưa được sử dụng. MFT entry này đã được sử dụng 11 lần.
0x12 – 0x13
2
0x0001
Reference Count: cho biết số thư mục mà tập tin này được hiển thị trong đó, hay nói cách khác là số thư mục tham chiếu đến tập tin này. Trường này còn có tên gọi khác là hard link count.
0x14 – 0x15
2
0x0038
Địa chỉ (offset) bắt đầu của attribute đầu tiên, trong MFT entry này là byte thứ 56.
0x16 – 0x17
2
0x0001
Flags:
- giá trị 0x01: MFT entry đã được sử dụng
0x18 – 0x1B
4
0x0000 0168
Số byte trong MFT entry đã được sử dụng. Ví dụ, trong trường hợp này đã sử dụng 0x0168 = 360 byte.
0x1C – 0x1F
4
0x0000 0400
Kích thước vùng đĩa đã được cấp cho MFT entry, Ví dụ: 0x0400 = 1024 byte.
0x20 – 0x27
8
0x0000 0000 0000 0000
Tham chiếu đến MFT entry cơ sở của nó (Base  MFT Record). Mang giá trị 0 nếu là MFT entry cơ sở. MFT entry cơ sở dùng để chứa các thông tin về các MFT entry mở rộng (Extension Record).
0x28 – 0x29
2
0x0004
Next attribute ID: mã định danh của attribute kế tiếp sẽ được thêm vào MFT entry.
 
-------------------
Tài liệu đã tham khảo:
Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
-------------------
Cập nhật 2014/5/29
----------------------
Đọc thêm
He thong quan ly tap tin NTFS - 7 - Attribute
-----
Bạn muốn tự học HTML bài bản? Xem thêm