CHS 到 LBA 的映射 -(磁盘存储)

Posted

技术标签:

【中文标题】CHS 到 LBA 的映射 -(磁盘存储)【英文标题】:CHS to LBA mapping - (Disk Storage) 【发布时间】:2015-12-15 00:18:09 【问题描述】:

在 LBA 之前,您只需拥有磁盘的物理映射,它最初在一台旧的 IBM-PC 兼容机器上看起来如下所示:

气缸数:(10 位) 0-1024 (1024 = 2^10) 磁头编号:(8 位) 0-256 (256 = 2^8) 扇区号(6 位) 0 通常为“boot sector”保留(c-0,h-0,s-0) 1-64 (63 = 2^6 - 1) *0 保留

总 CHS 地址位: 24 位


过去平均(文件|块|扇区)大小为 512B。

来自wikipedia的示例:

512(bytes) × 63(sectors) x 256(heads) × 1024(cylinders) = 8064 MiB (yields what is known as 8 GiB limit) 

当我在 LBA 公式中称为 heads-per-cylinder 时,我对 head 的实际含义感到困惑。这对我来说没有意义,因为据我所知,头部是 head,除非它是可移动媒体,否则每个 盘子 都有两个(顶部,底部)对于它的每个表面。

在我看来,将它们称为heads-per-diskheads-per-surface 会更有意义,因为圆柱体穿过整个磁盘(多个盘片)。


逻辑块寻址:

公式:A = (c ⋅ Nheads + h) ⋅ Nsectors + (s − 1)

A - 逻辑块地址 Nheads - 磁盘上的磁头数 heads-per-disk Nsectors - 磁道上的扇区数 sectors-per-track c,h,s - 是气缸、气缸盖、扇区号 24-bits total (10+8+6)

here上的第一个例子:

For geometry 1020 16 63 of a disk with 1028160 sectors CHS 3 2 1 is LBA  3150=(3× 16+2)× 63

几何:

气缸编号 - 1020 (0-1024) 头数 - 16 (0-256) 扇区号 - 63 (1-64)

这些几何如何将 CHS 编号映射到要在此公式中使用的 CHS 元组 (3,2,1)?

【问题讨论】:

【参考方案1】:

我不认为正面是一个字面意义上的数字。我拆开几个来打捞钕磁铁,只见过一个磁盘,除了大的 5-1/4 英寸驱动器。和2个头。柱面从 0 开始,但磁头和扇区从 1 开始。一些早期的 Windows 版本只能处理 255 个磁头,因此数字会被玩弄。

简答:将柱面 # 乘以磁头 # 乘以扇区 #,它接近 LBA。我尝试在此处粘贴一个 OpenBSD fdisk 列表,但它有 80 个字符宽,网页不会接受它。

【讨论】:

【参考方案2】:

“头”这个词通常不是指实际的物理头,而是指盘子的两侧。所以 C,H,S 可以被认为是 P,T,S(盘片、磁道、扇区)。首先它现在缩小到一个特定的层,从磁盘中心到外部的径向磁道,然后是单个扇区。在软盘上是类似的,但没有盘片,所以你只需使用 T.S(磁道,扇区)

【讨论】:

以上是关于CHS 到 LBA 的映射 -(磁盘存储)的主要内容,如果未能解决你的问题,请参考以下文章

MBR主引导记录

centos下为大硬盘分区(大于2T)

为啥我不能跳过这个 div 指令?

为啥Linux的fdisk分区时First Sector是63或2048

是否可以在 Android 设备中访问 SD 卡的特定 LBA

在引导加载程序中使用 int 13h ah=42h 读取 LBA 硬盘