Kiểu của partition (partition type hay partition ID)
Đĩa cứng thường
được chia thành các đơn vị lưu trữ hay các phân vùng nhỏ hơn gọi là các
partition.
Có nhiều phương
pháp chia, tổ chức và lưu trữ thông tin partition khác nhau, phần này chỉ tập
trung mô tả về partition cho 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.
Có hai loại
partition là: primary partition và extended partition.
Một đĩa cứng có thể chia thành nhiều nhất là bốn primary
partition, hoặc ba primary partition + một extended partition. Tất nhiên có thể
chia thành một hoặc hai primary partition + một extended partition. Các thông
tin về chia partition này được lưu trong các entry 16-byte tại phần Thông tin
mô tả các primary partition (partition table) trong MBR. Partition table có
kích thước 64 byte.
Partition type là một trường có kích thước một byte, giá trị
của byte này chính là ‘‘mã’’ cho biết hệ thống tập tin (file system) nào được sử
dụng trong partition. Tuy nhiên, có một số “mã” (ví dụ 0x05, 0x0F) được sử dụng
để chỉ ra partition đó chính là extended partition.
‘‘Mã’’ này sẽ được bootloader sử dụng để xác định xem nó có
thể làm việc được với partition đó hay không?
Giá trị của
partition type còn là cơ sở để hệ thống thực hiện các thao tác khác, ví dụ: ẩn
partition không cho hệ điều hành thấy. Tuy nhiên, nếu hệ điều hành hoặc một
công cụ chia partition nào đó đã được lập trình để xem boot sector của mọi
partition thì việc ẩn này không còn ý nghĩa. Ngoài ra, giá trị này cũng có thể
bị thay đổi bởi các phần mềm khác.
Primary partition
Mỗi primary
partition sử dụng một hệ thống quản lý tập tin duy nhất (file system). Trong hệ
điều hành DOS hoặc các phiên bản Microsoft Windows đầu tiên, phân vùng của hệ
thống (phân vùng cài đặt hệ điều hành) luôn được yêu cầu là partition đầu tiên
trên ổ đĩa cứng. Các hệ điều hành Microsoft Windows gần đây (Windows XP,
7...v.v) có thể cài đặt ở mọi phân vùng, với điều kiện là tập tin khởi động
(boot file: bootmgr, ntldr...v.v.) phải được đặt ở primary partition. Tuy
nhiên, BIOS cũng có thể đưa ra yêu cầu partition nào sẽ phải chứa hệ điều hành
khởi động.
Với primary
partition, “mã” có thể cho biết kiểu của hệ thống tập tin (ví dụ: 0x07 là NTFS
hoặc HPFS) hoặc cho biết partition đó được sử dụng cho mục đích đặc biệt (ví dụ:
0x82 là partition swap của hệ thống Linux).
Có nhiều “mã”
khác nhau cho hệ thống tập tin FAT16 và FAT32 do các giới hạn của các phiên bản
hệ điều hành DOS và Windows.
Mặc dù hệ điều
hành Linux có thể làm việc được với các hệ thống tập tin khác nhau (ext4, ext3,
ext2...v.v), nhưng chúng vẫn sử dụng cùng một “mã” là 0x83.
Extended partition
Mỗi đĩa cứng chỉ có duy nhất một extended partition. Từ
extended partition này có thể tiếp tục chia nhỏ thành nhiều logical partition. Trong
các hệ thống DOS/Windows, mỗi logical partition được gán bằng một kí tự ổ đĩa
(D:\, E:\ ...v.v).
Đị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 hệ thống 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 chỉ mục bằng các số nguyên. Khối đầu tiên mang giá trị 0, khối
tiếp theo mang giá trị 1, ...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 địa chỉ LBA.
Với các đĩa cứng sử dụng zone bit recording, số sector trên
mỗi track không bằng nhau mà phụ thuộc vào vị trí của track trên đĩa cứng, nên
hệ thống đánh địa chỉ CHS không còn phù hợp.
Công thức đổi địa chỉ CHS sang LBA :
LBA = ((C x HPC) + H) x SPT + S – 1
Trong đó:
o C,
H, S là giá trị của địa chỉ dạng CHS.
o HPC:
số head tối đa/cylinder.
o SPT:
số sector tối đa/track.
Chú ý: C được đánh
số từ 0, H đánh số từ 0 và S đánh số từ 1.
Ví dụ: giá trị của ba byte CHS là “FE FF FF”. Tính được H =
254, S = 63, C = 1023.
Đổi từ địa chỉ CHS sang địa chỉ dạng LBA.
Áp dụng công thức
ở trên:
LBA = ((1023 x
255) + 254) x 63 + 63 - 1 = 16,450,559
Tính ra byte:
(16450559 + 1) x
512 = 8,422,686,720 byte = ~ 8,4 GB hay 7.8GiB. (do LBA đánh từ 0 nên phải cộng thêm 1).
Định dạng kiểu “little endian” và “big endian”
Tất cả các hệ thống FAT ban đầu được thiết kế cho các máy
tính dòng IBM PC. Đặc điểm quan trọng cần lưu ý là các máy tính này lưu dữ liệu
trên đĩa theo kiểu “little endian”.
Có hai kiểu lưu trữ dữ liệu phổ biến trên hệ thống đĩa là
“little endian” và “big endian”.
-
Little endian: phần giá trị trên byte thấp (của
biến, thanh ghi) được lưu vào vùng địa chỉ thấp (của đĩa cứng), giá trị trên
byte cao được lưu vào vùng địa chỉ cao.
-
Big endian: phần giá trị trên byte thấp được lưu
vào vùng địa chỉ cao, giá trị trên byte cao được lưu vào vùng địa chỉ thấp.
-
Hình
minh họa :
Ví dụ: ta có một số hệ-16 chứa trong hai byte là AB45(16)
-
AB(16) là giá trị của byte cao
-
45(16) là giá trị của byte thấp
Khi lưu trên đĩa theo kiểu little endian:
byte thứ
|
0
|
1
|
2
|
…
|
45
|
AB
|
Khi lưu trên đĩa theo kiểu big endian:
byte thứ
|
0
|
1
|
2
|
…
|
AB
|
45
|
Vì vậy, khi đọc và ghi dữ liệu trên đĩa cứng cần lưu ý đặc
điểm này, để thao tác cho phù hợp.
----------------------
Cập nhật: 2013_3_5
----------------------
Tham khảo:
Cập nhật: 2013_3_5
----------------------
Tham khảo:
[3] FAT32_Hardware White Paper
[4] http://en.wikipedia.org