跳转到内容

逻辑区块位址

本页使用了标题或全文手工转换
维基百科,自由的百科全书

逻辑区块位址英语: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。

外部链接