逻辑区块地址(Logical Block Address, LBA)是描述计算机存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。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

其中,

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

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

其中,

其它公式:

#lba/S=q 餘 r#s=1+rq/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。

www.zuoweixin.com
问题反馈联系QQ:暂无联系方式,也可发qq邮箱。