邏輯區塊地址

描述計算機數據所在區塊的機制

邏輯區塊地址(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:
其中
• #c、#h、#s分別是磁柱、磁頭、扇區的編號
• #lba是邏輯區塊編號
• H=heads per cylinder,每個磁柱的磁頭數
• S=sectors per track,每磁軌的扇區數
LBA可用以下公式對應到CHS:
其中:
• / 是整數除法
• % 是取整數除法中的餘數
• 請注意,當今的磁碟使用ZBR(Zone Bit Recording, 等密度記錄)方式,實際的每軌扇區數得根據它是哪一軌。不過磁碟還是會提供這個參數來匹配公式,內部再自動調整。 [2]
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。