Đĩa cứng - 0 - MBR


Quá trình khởi động

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.
o       Bậ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.
o       Quá trình POST kết thúc.
o       Nế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ự:
o       MBR (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 đó.
o       VBR (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.
Cấu trúc của mỗi entry:

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 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:


[3] FAT32_Hardware White Paper
[4] http://en.wikipedia.org