逻辑区块地址

逻辑区块地址英语:Logical Block AddressLBA)是描述电脑存储设备资料所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个资料区块的地址或是某个地址所指向的资料区块。现今电脑上所谓一个逻辑区块通常是512或1024位组。ISO-9660格式的标准CD则以2048位组为一个逻辑区块大小。

LBA寻址机制

LBA是非常单纯的一种寻址模式﹔从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。这种寻址模式取代了原先操作系统必须面对存储设备硬件构造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁头-扇区)寻址模式,区块必须以硬盘上某个磁柱、磁头、扇区的硬件位置所合成的地址来指定。CHS模式对硬盘以外的设备来说没什么作用(例如磁带或是网络存储设备),所以通常也不会用在这些地方。过去MFM(Modified Frequency Modulation, 改良调频式)和RLL(Run Length Limited)存储设备都曾使用CHS模式,ATA-1设备更将延伸CHS(Extended Cylinders-Heads-Sectors, ECHS)也派上了用场。

SCSI采用LBA抽象寻址。实际上硬件控制器还是以CHS来寻址区块,但无论驱动程序还是任何以低端访问磁盘的应用程序(例如数据库软件)通常都不再需要这个参数。各种要求区块低端访问的系统调用把定义好的LBA传给驱动程序﹔最直接的情况下(逻辑器件与实体设备单一对应)驱动程序只是将LBA再传给硬件控制器。

LBA对应与逻辑器件虚拟化

当逻辑器件是经由虚拟化或是集合所构成的,像是RAID(磁盘阵列)和SANs(Storage Area Network)这种复杂的情况,就得把应用程序根据其观点中的磁盘来指定的LBA转换成每个实体存储设备上的LBA。在复杂的分布式存储结构下,从发出要求的应用程序到实体甚至是远程设备之间,会有太多这样的LBA转换。

CHS与LBA互换

CHS地址可用以下公式转成LBA,

#lba=(#c*H+#h)*S+#s-1

其中,

  • #c、#h、#s分别是磁柱、磁头、扇区的编号
  • #lba是逻辑区块编号
  • H=heads per cylinder,每个磁柱的磁头数
  • S=sectors per track,每磁道的扇区数

LBA可用以下公式对应到CHS:

#c=#lba/(S*H)
#h=(#lba/S)%H
#s=(#lba%S)+1

其中,

  • / 是整数除法
  • % 是取整数除法中的余数
  • 请注意,当今的磁盘使用ZBR(Zone Bit Recording, 等密度记录)方式,实际的每轨扇区数得根据它是哪一轨。不过磁盘还是会提供这个参数来符合公式,内部再自动调整。

其它公式:

#lba/S=q 餘 r
#s=1+r
q/H=#c 餘 #h

例如:

CHS总数=[600, 10, 84],求#lba=1234所对应的CHS编号:
1234/84=14 余 58
#s=1+58=59
14/10=1 余 4
#c=1
#h=4
#chs=(1, 4, 59)
验算: (1*10+4)*84+59-1=14*84+58=1234

LBA、ATA设备以及Enhanced BIOS

ATA-1规范中定义了28位寻址模式,当成LBA或是CHS都可以。如果用CHS这28位拆成: 磁柱16位、磁头4位、扇区8位。注意CHS模式扇区是从1开始算,所以在这个规范中扇区数最多只有255个,最大扇区编号为254(0xFE)。

规范采用当时,CHS的BIOS规范只有24位: 磁柱10比特、磁头8位、扇区6比特,定义在BIOS的INT 13H软件中断里,而且已经用在DOS的MBR(Master Boot Record,主要开机记录)。这造成了BIOS CHS跟ATA CHS之间必须经过转换,否则各参数只能用到两者的最大公因数即CHS比特数={10, 4, 6},也就是1024×16×63个扇区,以每扇区512位组计算得504 MiB。转换方式其一是Large模式或称Enhanced BIOS模式(又名Bit Shift Translation, 位移转换),此方式会重新对应侦测到的磁柱和磁头数而扇区数不变﹔方式其二是将头一种CHS对应到LBA之后再换算成另一种CHS机制,称为LBA-assist。

即使利用这些转址方式,BIOS定给MS-DOS逻辑扇区(以及Windows NT 4.0硬盘分区)的CHS比特数={10, 8, 6}机制顶多也只能达到7.84 GiB。以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes。

外部链接