Sử dụng phần mềm Partition Magic chia đĩa cứng thành ba
partition:
oMột
primary partition kích thước 4 GB, partition type là FAT32.
oMột
primary partition kích thước 2 GB, partition type là NTFS.
oMột
extended partition kích thước 2GB, trong extended partition tạo hai ổ đĩa logic
(chia tiếp thành hai logical partition), mỗi ổ đĩa kích thước 1GB. Cả hai ổ đĩa
đều chọn partition type là FAT32.
Kết quả như hình dưới đây:
Khởi động lại máy tính, sử dụng phần mềm Norton Disk Editor
2002 (trong đĩa Hiren’s Boot, phiên bản đang sử dụng là 10.1) đọc sector 0 của
đĩa cứng. Có thể đọc thêm bài viết “Đọc đĩa cứng bằng phần mềm Disk Editor”.
Kết quả được thể hiện trong hình dưới đây:
Dựa vào cấu trúc của MBR, định vị vùng partition table, vùng
này bắt đầu tại địa chỉ 0x01BE.
Vùng 64 byte này (vùng tô màu) được chia thành bốn phần bằng
nhau (bốn entry). Mỗi entry gồm 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.
Dấu hiệu kết thúc của MBR mang giá trị “55AA”.
Trong bốn entry trên, chỉ có ba entry đầu có dữ liệu, toàn bộ
các byte của entry cuối mang giá trị 0x00. Có thể kết luận đĩa cứng trên gồm ba
partition.
Giá trị các trường của mỗi entry:
Entry 1:
Offset
Số byte
Mô tả
0x00
1
“80” – có khả
năng khởi động (đã được set 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
“0B”: FAT32
0x05
3
“FE 7F FD” (ba
byte địa chỉ kết thúc dạng CHS)
0x05
1
254 (head)
0x06
1
63 (sector)
0x07
1
509 (cylinder)
0x08
4
“3F 00 00 00” (địa
chỉ dạng LBA, sector bắt đầu là: 63)
0x0C
4
“3F 04 7D 00” (tổng
số sector: 8193087; ~4GB)
Entry 2:
Offset
Số byte
Mô tả
0x00
1
“00” – không có
khả năng khởi động
0x01
3
“00 41 FE” (ba
byte địa chỉ bắt đầu dạng CHS)
0x01
1
0 (head)
0x02
1
1 (sector)
0x03
1
510 (cylinder)
0x04
1
“17”: Hidden,
primary partition, NTFS
0x05
3
“FE BF FC” (ba
byte địa chỉ kết thúc dạng CHS)
0x05
1
254 (head)
0x06
1
63 (sector)
0x07
1
764 (cylinder)
0x08
4
“7E 04 7D 00” (địa chỉ LBA, sector bắt đầu là: 8193150)
0x0C
4
“3F 82 3E 00” (tổng
số sector: 4096575; ~2GB)
Entry 3:
Offset
Số byte
Mô tả
0x00
1
“00” – không có
khả năng khởi động
0x01
3
“00 81 FD” (ba
byte địa chỉ bắt đầu dạng CHS)
0x01
1
0 (head)
0x02
1
1 (sector)
0x03
1
765 (cylinder)
0x04
1
“0F”: extended
partition
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
“BD 86 BB 00” (địa
chỉ LBA, sector bắt đầu là: 12289725)
0x0C
4
“57 64 44 00” (tổng
số sector: 4482135; ~2GB)
---------------------- Cập nhật: 2013_3_5
---------------------- Tham khảo:
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 đó:
oC,
H, S là giá trị của địa chỉ dạng CHS.
oHPC:
số head tối đa/cylinder.
oSPT:
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:
Tóm tắt quá trình khởi động máy tính từ khi người sử dụng bật
nguồn cho tới khi máy tính sẵn sàng làm việc.
oBật
công tắc nguồn (bấm nút power), quá trình POST được thực hiện:
·Bộ nguồn chính (power supply) hoạt động, cung cấp
cho mainboard các dòng điện 12V, 5V, 3.3V.
·Các mạch ổn áp hoạt động.
·Mạch tạo xung clock hoạt động.
·Chipset nam hoạt động.
·Chipset bắc hoạt động. Tạo ra tín hiệu reset
CPU.
·CPU hoạt động.
·CPU phát tín hiệu truy cập ROM để nạp chương
trình BIOS.
·Chương trình BIOS kiểm tra RAM, card video, nạp
bản lưu cấu hình máy trong RAM CMOS, kiểm tra các cổng, các ổ đĩa theo thiết lập
trong CMOS.
oQuá
trình POST kết thúc.
oNếu
trong BIOS thiết lập khởi động từ đĩa cứng, hệ thống sẽ truy cập đĩa cứng và nạp
hệ điều hành. Vùng đĩa cứng được hệ thống truy cập trong quá trình khởi động được
gọi là vùng khởi động (boot sector hay boot block).
Vùng khởi động (Boot sector hay boot block)
Vùng khởi động là một vùng trên đĩa cứng, đĩa mềm, đĩa quang
hoặc các thiết bị lưu trữ dữ liệu khác mà có chứa mã khởi động. Mã khởi động là
mã máy sẽ được nạp vào RAM trong quá trình khởi động.
Mục đích của vùng khởi động trên một đĩa là giúp quá trình
khởi động nạp được hệ điều hành đã được cài đặt trên chính đĩa đó vào RAM.
Vị trí và kích thước của vùng khởi động tùy thuộc vào thiết
kế của các hệ thống khác nhau.
Trên các dòng máy tương thích IBM PC, BIOS sẽ lựa chọn thiết
bị để khởi động, sau đó chép nội dung trong sector đầu tiên của thiết bị (có thể
là MBR, VBR hoặc đoạn mã khởi động bất kỳ) vào RAM, bắt đầu tại địa chỉ 0x7C00.
Quá trình này có thể khác nhau tùy thuộc vào các hệ thống khác nhau.
Có hai loại vùng khởi động chính trên đĩa cứng, đĩa mềm và
các thiết bị lưu trữ tương tự:
oMBR
(master boot record): là sector đầu tiên trên thiết bị lưu trữ đã được chia
thành các phân vùng (partition), MBR có thể chứa mã khởi động để xác định
partition nào đã được đánh dấu là có khả năng khởi động (active) và đọc nội
dung VBR trong partition đó.
oVBR
(volume boot record): là sector đầu tiên trên thiết bị lưu trữ không được chia
partition, hoặc là sector đầu tiên của mỗi partition trong các thiết bị đã được
chia partition. VBR có thể chứa mã khởi động để tìm kiếm và nạp hệ điều hành đã
được cài đặt trên thiết bị hoặc trên partition chứa nó.
Trong các dòng máy tương thích với IBM PC, hệ x86; theo quy
ước, hai byte mang giá trị 0x55 và 0xAA được đặt ở cuối của boot sector. Đây là
dấu hiệu để báo cho hệ thống biết là trong boot sector này có chứa đoạn mã khởi
động có thể thực thi được (bootloader), nhưng có dấu hiệu này, không có nghĩa
là đoạn mã khởi động ở đây có thể nạp được hệ điều hành. Dấu hiệu này cũng
không thể đảm bảo được là trong đĩa đã được định dạng bằng một hệ thống quản lý
tập tin hoặc đã có hệ điều hành hay chưa?
Trong thực tế, BIOS thường không quan tâm tới việc đĩa có được
chia partition hay không? nó đang làm việc với VBR hay MBR? BIOS cứ đọc sector
đầu tiên trên thiết bị lưu trữ, nếu thiết bị chưa được chia partition thì
sector đó sẽ là VBR, còn nếu đĩa đã được chia partition thì sector đó sẽ là MBR
và sau đó MBR sẽ tự biết cách để chuyển điều khiển cho VBR nào đã được thiết lập
là có khả năng khởi động hệ thống (active partition).
MBR (master boot record)
Với các đĩa cứng đang được sử dụng trên các máy tính cá
nhân, thường được chia thành ít nhất là hai phân vùng (partition), sector đầu
tiên trên đĩa cứng chính là MBR, hình dưới đây thể hiện tổ chức của đĩa cứng đó:
MBR
partition
partition
….
partition
Tuy nhiên, với các đĩa cứng không được chia partition (cả
đĩa cứng là một partition) thì tổ chức của cả đĩa cứng sẽ tương tự như tổ chức
của một partition.
MBR gồm 512 byte đầu tiên của đĩa cứng (sector vật lý đầu
tiên, sector 0).
MBR chứa các thông tin về việc chia partition của cả đĩa cứng,
hệ thống quản lý tập tin trên mỗi partition, tìm kiếm và triệu gọi đoạn mã khởi
động trong VBR.
Khái niệm MBR được đưa ra vào năm 1983. Với các đĩa cứng có
dung lượng lớn hơn 2TB, việc chia đĩa cứng dựa trên MBR gặp một số hạn chế, do
đó hệ thống GPT đã được phát triển để thay thế.
Công cụ được sử dụng để chia partition là FDISK, partition
magic, công cụ có sẵn trên các đĩa cài đặt hệ điều hành...v.v.
MBR có cấu trúc như sau:
Địa chỉ
Mô tả
Số byte
Hệ 16
Hệ 8
Hệ 10
0000
0000
0
Vùng mã (Code Area)
440
(tối đa 446)
01B8
0670
440
Mô tả đĩa (Optional Disk signature)
4
01BC
0674
444
Chứa giá trị Null (0x0000)
2
01BE
0676
446
Thông tin mô tả các primary partition
(partition table)
64
01FE
0776
510
55h
Dấu hiệu nhận dạng boot sector (0xAA55)
2
01FF
0777
511
AAh
Tổng kích thước của MBR
512
Thông tin mô tả các primary partition gồm 64 byte được chia
thành bốn phần bằng nhau (gọi là các entry), mỗi entry gồm 16 byte (theo mô
hình của IBM PC). Vì vậy, nếu đĩa cứng được chia thành các partition kiểu
primary thì chỉ tạo được tối đa là bốn partition.
Đị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 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. (sector được
đánh số theo 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.
Địa chỉ dạng CHS
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 khối dữ liệu trên đĩa cứng.
Đơn vị nhỏ nhất cho mỗi khối dữ liệu là sector. Địa chỉ dạng
CHS sẽ chỉ ra vị trí của sector trên track, và vị trí của track được xác định bằng
số head và cylinder. Kí hiệu S trong CHS chính là chỉ số sector.
Track là dải sector được tổ chức theo hình tròn, đồng tâm.
Cylinder là tập hợp các track có cùng bán kính trên tất cả
các mặt đĩa. Kí hiệu C trong CHS chính là chỉ số cylinder.
Đĩa cứng gồm nhiều phiến đĩa (platter), mỗi phiến đĩa có hai
mặt đĩa (side), mỗi mặt đĩa có một đầu đọc/ghi (head). Kí hiệu H trong CHS
chính là chỉ số head.
Hình sau minh họa về sector, track, cylinder, head.
Với các đĩa cứng theo phương pháp mã hóa dữ liệu MFM và RLL,
số sector trên mỗi cylinder (hay track) luôn luôn bằng nhau. Do đó, giá trị CHS
còn thể hiện cấu trúc vật lý của ổ đĩa. Ví dụ, một ổ đĩa với giá trị CHS là 500:4:32, sẽ có 500 track trên một mặt
đĩa, hai phiến đĩa, 32 sector/track, và có dung lượng 500 x 4 x 32 x 512 = 32.768.000
byte (khoảng 31,25 MiB).
Các đĩa cứng theo chuẩn ATA/IDE lưu trữ dữ liệu hiệu quả
hơn, bằng việc sử dụng hệ thống Zone Bit Recording (ZBR) thay cho MFM và RLL.
Quay trở lại cấu trúc của mỗi entry trong MBR, trường CHS bắt
đầu và CHS kết thúc gồm ba byte. Trong đó, chỉ số H gồm tám bit của byte đầu
tiên, chỉ số S gồm sáu bit thấp của byte thứ hai, chỉ số C gồm tám bit của byte
thứ ba cộng với hai bit cao của byte thứ hai. Xem hình minh họa dưới đây:
Từ hình vẽ trên, với ba byte dữ liệu của CHS (1, 2, 3), tính
ra giá trị hệ 10: H = 254, S = 63 và C = 723.
----------------------
Cập nhật: 2013_3_5
----------------------
Tham khảo: