--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn dia. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn dia. Hiển thị tất cả bài đăng

He thong quan ly tap tin NTFS - 2 - MBR

(tiếp theo của He thong quan ly tap tin NTFS - 1 - MBR)


Địa chỉ dạng CHS


Đĩa cứng thường sử dụng hai phương pháp đánh địa chỉ: CHS và LBA. Phương pháp CHS được sử dụng cho các đĩa theo chuẩn IDE. Trong khi phương pháp LBA được sử dụng cho các đĩa theo chuẩn IDE, EIDE, và SCSI.

Để hiểu về địa chỉ dạng CHS, trước hết cần biết một số khái niệm liên quan đến tổ chức vật lý và logic của đĩa cứng.

-         Track[1]: là một vòng tròn đồng tâm của các bit từ (magnetic bit).

-         Sector: là các đoạn bit bằng nhau trên track. Mỗi sector thường có kích thước là 512 byte, có một định danh (ID) riêng. Định danh của sector là một số kiểu nguyên, thường gọi là chỉ số của sector. Cấu trúc của một sector gồm: header, mã sửa lỗi (error correction code – ECC) và phần chứa dữ liệu. Hình 6[2] minh họa về track và sector.

-         Cylinder: là tập hợp các track có cùng bán kính trên các mặt đĩa (các vòng tròn màu đỏ trong Hình 7[3] là một cylinder).

-         Head: là đầu từ đọc/ghi, số head tương ứng với số mặt đĩa.

-         Platter: phiến đĩa, là những phiến tròn làm bằng kim loại, thủy tinh, hoặc gốm…v.v. Trên bề mặt được phủ một lớp chất nhạy từ tính. Mỗi phiến đĩa thường được sử dụng cả hai mặt.







CHS là dạng viết rút gọn của Cylinder-Head-Sector, là một phương pháp đánh địa chỉ cho các khối dữ liệu trên đĩa cứng. Với ba giá trị cylinder, head và sector sẽ xác định được vị trí duy nhất của các khối dữ liệu, khối dữ liệu ở đây có thể hiểu là sector.

Địa chỉ dạng CHS gồm ba byte. Trong đó, H (head) gồm tám bit của byte đầu tiên, S (sector) gồm sáu bit thấp của byte thứ hai, cuối cùng C (cylinder) gồm tám bit của byte thứ ba và hai bit cao của byte thứ hai (Hình 8[4]).



Từ Hình 8, với ba byte dữ liệu của CHS (byte 1, 2, 3), tính ra giá trị hệ 10 là: H = 254, S = 63 và C = 723.

Hạn chế của CHS là chỉ có thể đánh địa chỉ cho đĩa có dung lượng không vượt quá 504MB. Cụ thể, số cylinder không vượt quá 1024, số head không vượt quá 16, số sector trên một track là 63, kích thước của một sector là 512 byte, thì  ta có:

1024 x 16 x 63 x 512 = 504 MB.

Để khắc phục hạn chế này, một phương pháp đánh địa chỉ khác đã được giới thiệu là ECHS (Extended CHS). ECHS là cải tiến của phương pháp CHS. Tuy nhiên, phương pháp này cũng chỉ đánh được địa chỉ cho đĩa có dung lượng không vượt quá 7560 MB.

Hiện nay (năm 2014), phương pháp đánh địa chỉ được sử dụng rộng rãi là phương pháp LBA.

 

Địa chỉ dạng LBA


LBA (logical block addressing) là một hệ thống đánh địa chỉ, được sử dụng để đánh địa chỉ cho các khối dữ liệu (block hay sector) trên các thiết bị lưu trữ của máy tính, thường là các thiết bị lưu trữ thứ cấp, ví dụ: đĩa cứng.

LBA là hệ thống đánh địa chỉ tuyến tính đơn giản, các khối dữ liệu được đánh dấu bằng các số nguyên. Khối đầu tiên mang giá trị 0, các khối tiếp theo mang giá trị 1, 2, 3 ...v.v.

Đĩa cứng theo chuẩn IDE sử dụng địa chỉ LBA 22-bit, chuẩn ATA-1 (1994) là 28-bit, chuẩn ATA-6 (2003) là 48-bit. Hầu hết các ổ đĩa cứng sản xuất sau năm 1996 sử dụng hệ thống đánh địa chỉ LBA.

 

Kiểu của phân vùng


Để dễ quản lý và đảm bảo an toàn dữ liệu, đĩa cứng vật lý thường được chia thành các đơn vị lưu trữ logic nhỏ hơn gọi là các phân vùng (partition), trong mỗi partition lại có thể được chia nhỏ hơn nữa thành các ổ đĩa logic (logical drive).

Các hệ thống máy tính chạy hệ điều hành DOS, Windows, Linux và các hệ thống tương thích với IBM PC khác, thường sử dụng hai loại partition là: primary partition và extended partition.

Sau đây là một số tùy chọn liên quan đến việc chia đĩa cứng dựa trên primary partition và extended partition:

-         Có thể tạo nhiều nhất bốn primary partition, hoặc

-         Ba primary partition + một extended partition, hoặc

-         Hai primary partition + một extended partition, hoặc

-         Một primary partition + một extended partition (hay được chọn).

Các thông tin về chia partition này được lưu trong các entry 16-byte tại partition table của MBR.

Trong mỗi entry 16-byte, hệ thống sử dụng một trường có kích thước một byte, để lưu một giá trị là một số nguyên, giá trị này cho biết kiểu của partition. Giá trị này được thống nhất và được dùng như một “mã nhận diện”. Ví dụ:

-         0x05: là extended partition.

-         0x07: là ổ đĩa logic, định dạng theo NTFS.

-         0x0B: là ổ đĩa logic, định dạng theo FAT32.

Tham khảo thêm các mã khác trên Internet.

Đoạn mã khởi động dựa vào “mã nhận diện” này để xác định xem nó có thể truy cập tới partition đó hay không.

Ngoài ra, mã này còn là cơ sở để hệ thống thực hiện các thao tác khác, như ẩn partition không cho hệ điều hành thấy. Mã này có thể bị thay đổi bởi phần mềm tiện ích.

 

Lưu dữ liệu theo định dạng little-endian


Little-endian là một trong hai cách thức lưu dữ liệu trên đĩa cứng, loại khác là big-endian.

Để dễ hiểu, xét việc lưu dữ liệu xuống đĩa cứng theo đơn vị byte. Giả sử, cần lưu một số có giá trị không vượt quá khả năng biểu diễn của một byte, ví dụ, số 2A hệ 16. Số 2A sẽ được lưu xuống một byte nào đó trên đĩa cứng theo đúng định dạng 2A, tức là: số 2 nằm ở phần bit cao (bốn bit phía trái của byte) và số A nằm ở phần bit thấp (bốn bit phía phải của byte).

Tuy nhiên, nếu cần lưu một số có giá trị từ hai byte trở lên, hệ thống sẽ sử dụng kiểu lưu dữ liệu little-endian.

Các byte trên đĩa cứng được ngầm hiểu là đã được đánh số thứ tự theo chiều tăng dần, tính từ đầu đĩa.

Đặc điểm của kiểu little-endian: nội dung trên byte thấp của biến, hoặc thanh ghi sẽ được lưu vào byte có số thứ tự nhỏ trên đĩa cứng, và nội dung trên byte cao của biến, hoặc thanh ghi sẽ được lưu vào byte có số thứ tự lớn trên đĩa cứng.

Ví dụ:

-         Một ổ đĩa logic có kích thước là 3992 MB, hệ thống đĩa cứng sử dụng một trường bốn byte (32-bit) để lưu kích thước này.

-         Vì dữ liệu lưu trên đĩa cứng là hệ 16, và kích thước đĩa được tính theo đơn vị là sector, nên cần đổi 3992 MB sang số sector ở hệ 16 trước khi lưu. Giả sử một sector có kích thước 512 byte, vậy 3992 MB tương đương 8 177 085 sector, đổi sang hệ 16 là 0x7CC5BD. Để lấp đầy bốn byte, cần thêm giá trị 0 vào byte đầu tiên, kích thước đĩa khi đó là 0x007CC5BD.

-         Bây giờ cần lưu số 32-bit hệ-16 này vào đĩa cứng. Cách lưu được thể hiện trong Hình 9.



[1] http://www.dataclinic.it/data-recovery/hard-disk-functionality.htm
[2] http://flylib.com/books/2/48/1/html/2/images/0321268172/graphics/02fig09.gif
[3] http://www.dataclinic.it/data-recovery/HDD7.gif
[4] http://thestarman.pcministry.com/asm/mbr/PartTables.htm



Tài liệu đã tham khảo

Lê Gia Công, FAT32, Khoa CNTT, Đại học Đà Lạt
Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005

-------------------
Cập nhật 2014/5/28
-------------------
Đọc thêm
He thong quan ly tap tin - NTFS - 3 - EBR

He thong quan ly tap tin NTFS - 1 - MBR



Hệ thống quản lý tập tin NTFS



Mở đầu

NTFS (New Technology File System) là một trong những hệ thống quản lý tập tin được Microsoft phát triển từ năm 1993. Hiện nay đã qua một số phiên bản như: 1.0, 1.1, 1.2, 3.0, và hiện nay (2014) là 3.1.

Tài liệu này sẽ trình bày về hệ thống quản lý tập tin NTFS ở mức đơn giản, để người đọc có những hình dung ban đầu về nó.

Để dễ theo dõi, và tiện cho người đọc tự kiểm tra, tài liệu sẽ vừa trình bày nội dung lý thuyết, vừa minh họa trên dữ liệu được trích ra từ một máy tính đang chạy hệ điều hành Windows 7, có ổ đĩa logic định dạng NTFS.

Phần mềm để đọc đĩa cứng dạng thô (hex) được sử dụng là Norton Disk Editor 2002, phần mềm này có trong đĩa Hiren’s Boot 10.1. Đọc thêm phần “Hướng dẫn đọc đĩa cứng bằng phần mềm Disk Editor” ở phần Phụ lục.

Phần mềm WinHex đọc đĩa cứng tiện hơn nhiều so với Norton Disk Editor (bổ sung 2016)

Tình huống ví dụ được sử dụng để minh họa là:

-         Trong ổ đĩa logic C:\, được định dạng theo NTFS, tạo tập tin Test.txt.

-         Nhập nội dung cho tập tin là một vài dòng văn bản tiếng Việt không dấu.

-         Sử dụng phần mềm Disk Editor đọc đĩa cứng dạng hex, phân tích theo cấu trúc tổ chức của NTFS để làm sao đọc được phần văn bản trong tập tin Test.txt (Hình 1).

Tài liệu sẽ viết dựa trên tình huống này.




Tổ chức của đĩa cứng

Đĩa cứng vật lý thường được chia thành các phân vùng (partition).

Có hai loại phân vùng là: phân vùng chính (primary partititon) và phân vùng mở rộng (extended partition). Hình 2 là một ví dụ về đĩa cứng có hai phân vùng. Phân vùng chính không thể chia nhỏ, được xem như một ổ đĩa logic, trong trường hợp này là ổ đĩa C:\. Phân vùng mở rộng có thể chia tiếp thành các vùng nhỏ hơn gọi là các ổ đĩa logic (D:\, E:\).

Dưới cái nhìn của người sử dụng, đĩa cứng sẽ gồm ba ổ đĩa logic (C:\, D:\, E:\) như trong Hình 2.




Thực tế, thông tin về tổ chức của đĩa cứng đã bị ẩn đi đối với người sử dụng. Để quản lý tổ chức của đĩa cứng có thể sử dụng cấu trúc MBR, EBR. Tất nhiên, ngoài cấu trúc này còn có nhiều cấu trúc khác.

Đĩa cứng tổ chức theo cấu trúc MBR, EBR được thể hiện trong Hình 3.




Master Boot Record

Tổ chức của MBR


Master Boot Record (MBR) là bản ghi khởi động chính. Một đĩa cứng vật lý chỉ có một MBR. MBR là sector vật lý đầu tiên của đĩa cứng, thường gọi là sector 0.

MBR chứa: mã khởi động (code area), bảng thông tin về các phân vùng trên đĩa cứng (partition table)...v.v.

Trong quá trình khởi động, sau quá trình POST, máy tính sẽ đọc và thực thi đoạn mã khởi động trong MBR. Nhiệm vụ của đoạn mã này là xác định xem đĩa cứng đã được chia thành mấy phân vùng, phân vùng nào đã được thiết lập là phân vùng khởi động chính (active). Nếu không tìm thấy phân vùng khởi động chính, hệ thống sẽ báo lỗi. Nếu có phân vùng khởi động chính, hệ thống sẽ tìm kiếm và chạy đoạn mã khởi động trong phân này, để tiếp tục quá trình tìm và nạp hệ điều hành.

Cấu trúc của MBR được minh họa trong bảng sau:

Địa chỉ (dạng offset)
Mô tả
Số byte
Hệ 16
Hệ 8
Hệ 10
0000
0000
0
Vùng mã khởi động
 (Code area)
440
(tối đa 446)
01B8
0670
440
Mô tả đĩa (Optional disk signature)
4
01BC
0674
444
Không sử dụng (0x0000)
2
01BE
0676
446
Bảng thông tin về các phân vùng
(Partition table)
64
01FE
0776
510
55h
Dấu hiệu nhận biết MBR (0xAA55)
2
01FF
0777
511
Aah
Tổng kích thước của MBR
512

Hình 4 là nội dung của MBR dạng hex. Trong đó, vùng màu trắng là Code area, vùng màu đỏ là Optional Disk signature, vùng màu xám không sử dụng, vùng màu vàng là Partition table, và vùng màu xanh là dấu hiệu nhận biết MBR.



Bảng thông tin phân vùng


Bảng thông tin phân vùng (Partition table) là bảng thông tin về các phân vùng trên đĩa cứng. Nó cho biết đĩa cứng vật lý hiện tại được chia thành mấy phân vùng, bắt đầu từ đâu, kết thúc ở đâu, kích thước mỗi phân vùng là bao nhiêu…v.v.

Theo tình huống ví dụ, tập tin Test.txt được tạo ra trong ổ đĩa logic C:\. Vì vậy, cần phải định vị xem ổ đĩa C:\ bắt đầu ở đâu?

Dựa vào cấu trúc của MBR, định vị được vùng Partition table (màu vàng) bắt đầu tại địa chỉ (offset) 0x01BE.

Partition table gồm 64 byte, được chia thành bốn phần bằng nhau, các phần bằng nhau này gọi là các entry. Mỗi entry có kích thước 16 byte, mô tả thông tin về một partition.

-         Entry 1: bắt đầu tại địa chỉ 0x01BE, kết thúc tại 0x01CD.

-         Entry 2: bắt đầu tại địa chỉ 0x01CE, kết thúc tại 0x01DD.

-         Entry 3: bắt đầu tại địa chỉ 0x01DE, kết thúc tại 0x01ED.

-         Entry 4: bắt đầu tại địa chỉ 0x01EE, kết thúc tại 0x01FD.

Cấu trúc của mỗi entry gồm:


Địa chỉ
(offset)
Số
byte
Mô tả
0x00
1
Trạng thái khởi động:
 - 0x80: có khả năng khởi động.
 - 0x00: không có khả năng khởi động.
 - Giá trị khác: không hợp lệ.
0x01
3
Địa chỉ bắt đầu của partition. Sử dụng địa chỉ dạng CHS. Giá trị CHS được mô tả cụ thể trong ba byte dưới đây.
0x01
1
Chỉ số head của CHS, kí hiệu là H.
0x02
1
Chỉ số sector của CHS, được lưu trong sáu bit thấp (bit 5–0); hai bit: thứ 6 và thứ 7 được chuyển qua thành bit thứ 8 và thứ 9 của chỉ số cylinder.
0x03
1
Tám bit thấp của chỉ số cylinder (chỉ số của cylinder gồm 10 bit).
0x04
1
Kiểu của partition (partition type).
0x05
3
Địa chỉ kết thúc của partition. Sử dụng địa chỉ dạng CHS. Giá trị CHS được mô tả cụ thể trong ba byte dưới đây.
0x05
1
Chỉ số head của CHS, kí hiệu là H.
0x06
1
Chỉ số sector của CHS, được lưu trong sáu bit thấp (bit 5–0); hai bit: thứ 6 và thứ 7 được chuyển qua thành bit thứ 8 và thứ 9 của chỉ số cylinder.
0x07
1
Tám bit thấp của chỉ số cylinder (chỉ số của cylinder gồm 10 bit).
0x08
4
Sector bắt đầu của partition (địa chỉ dạng LBA – Logical Block Address).
0x0C
4
Tổng số khối (block, sector) của partition, được lưu trữ theo định dạng little-endian.


Theo tình huống ví dụ, Entry 1 trong partition table là entry mô tả cho ổ đĩa C:\. Ổ đĩa C:\ chính là primary partition. (Hình 5).


Nội dung cụ thể của Entry 1 được thể hiện trong bảng sau:

Địa chỉ
(offset)
Số
byte
Mô tả
0x00
1
“80”: có khả năng khởi động, đã được thiết lập là  active.
0x01
3
“01 01 00”: ba byte địa chỉ bắt đầu - dạng CHS.
0x01
1
1 (head)
0x02
1
1 (sector)
0x03
1
0 (cylinder)
0x04
1
“07”: NTFS
0x05
3
“FE FF FF”: ba byte địa chỉ kết thúc - dạng CHS.
0x05
1
254 (head)
0x06
1
63 (sector)
0x07
1
1023 (cylinder)
0x08
4
“3F 00 00 00”: sector bắt đầu là 63.
0x0C
4
“01 3A 83 02”: tổng số sector của ổ đĩa C:\ là 42154497; tính ra kích thước là ~20GB.
 

---------------------

Tài liệu đã tham khảo

[2] Lê Gia Công, FAT32, Khoa CNTT, Đại học Đà Lạt
[3] Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005

-------------------
Cập nhật 2014/5/28
-------------------
Đọc thêm
He thong quan ly tap tin NTFS - 2 - MBR (tt)