如何从MBR的table分区获取CHS信息?

How to access the CHS information from the partition table of MBR?

我正在创建一个基本的 MBR,它读取分区 Table 并加载 Bootable 分区的第一个扇区。我对 CHS 和 LBA 寻址模式感到困惑。我在教程中读到,除了兼容性原因外,或多或少不使用 CHS。 所以,我选择使用 LBA(INT 13h 扩展)。要加载驱动器的扇区,我必须从该分区的分区 table 中读取 CHS 值。只有这样我才能将它转换为 LBA 并将其存储在 "Disk Address Packet".

我的疑问是,分区table中的CHS每个都是1个字节。我应该直接把这个值转换成LBA吗(或者)我必须先把它转换成,

Cylinder = 10 bits
Sector   = 6 bits
Head     = 8 bits

然后转换成LBA?

注意:我的 MBR 必须能够访问 HDD 和 USB 上的扇区 - 这就是动机。

OS : Ubuntu

汇编器:气体

Partition table entries 使用 CHS 只是为了向后兼容非常旧的操作系统。
他们还有 LBA 地址字段:




请注意,这里使用LBA32,因此分区大小和位置有限制。引用维基百科:

Since block addresses and sizes are stored in the partition table of an MBR using 32 bits, the maximum size as well as the highest start address of a partition using drives that have 512-byte sectors (actual or emulated) cannot exceed 2 TiB−512 bytes (2,199,023,255,040 bytes or 4,294,967,295 (232−1) sectors × 512 (29) bytes per sector).[2] Alleviating this capacity limitation was one of the prime motivations for the development of the GPT.

CHS寻址也是如此
使用 CHS 字段的操作系统的大小限制约为 8 GiB。
所以如果你想与他们兼容,你需要保持在这个限制之下。


LBA <-> CHS的转换公式很容易推导或在网上找到,你可以用扇区号(即LBA)来思考并在创建分区条目时转换成CHS(或使用默认值分区的 1023、255、63 管对于 CHS 来说太大了)。

行的底部,使用 LBA 字段。
或者去 GPT.