邏輯區塊位址 (Logical block addressing, LBA)

現今都使用LBA(Logical block addressing)的方式來描述資料對應到硬碟的儲存區塊. 而下就以硬碟的基本架構為頭, 再接著說明LBA的計算方式.

CHS (cylinders-heads-sectors, 磁柱-磁頭-磁區)

硬碟主要可以看成磁盤和磁頭兩個部分, 如圖1. 磁盤負責存放資料, 資料的讀寫則透過磁頭. 通常一個磁盤上下兩面皆可讀寫, 所以會有對應到兩個磁頭. 而磁頭的起始編號為 0, 1, 2, n.


圖1. 硬碟架構

磁盤又可以在分為磁軌(track)和磁區(sector), 如圖2. 磁盤會被分成數個軌道, 這可以想像成操場的跑道. 每個軌道即是磁軌. 編號由外而內編號, 0, 1, 2,...,n. 而磁軌又會被被劃分成數個區段稱為磁區, 起始為 1, 2, 3, ...n. 每個磁區的大小依照規範而定. 傳統常用為 512 bytes, 現今主流則偏向 4096 bytes(Advance Format).


圖2. 磁盤

而多個磁盤相同磁軌所呈現的關係則稱為磁柱. 基本上磁柱的數量等同於磁軌.

計算硬碟容量的公式如下:

容量 = 磁柱 x 磁頭 x 磁軌擁有的磁區數量 x 磁區大小.

LBA (Logical block addressing)

由於要經由CHS來算出要存資料的位置頗麻煩的. 所以就有了 LBA 的方式, 來對應硬碟的每一個存取區塊. 公式如下[1]:

LBA = (C × HPC + H) × SPT + (S - 1)

LBA: the logical block address
C, H, S: cylinder number, the head number, and the sector number
HPC: maximum number of heads per cylinder
SPT: the maximum number of sectors per track

而 LBA 反推回 CHS 的公式如下[1]:

C = LBA ÷ (HPC × SPT)
H = (LBA ÷ SPT) mod HPC
S = (LBA mod SPT) + 1

e.g. 最大的 C,H,S 分別為 16382, 16, 63, 經由 CHS 來算出對應的 LBA

C,H,S(00, 00, 01) => LBA = 0 = (0 x 16 + 0) x 63 + (1 - 1)
...
C,H,S(00, 00, 63) => LBA = 62 = (0 x 16 + 0) x 63 + (63 - 1)
C,H,S(00, 01, 01) => LBA = 63 = (0 x 16 + 1) x 63 + (1 - 1)
...
C,H,S(00, 01, 63) => LBA = 125 = (0 x 16 + 1) x 63 + (63 - 1)
...
C,H,S(16382, 15, 63) => LBA = 16,514,063 = (16382 x 16 + 15) x 63 + (63 -1)

Reference

  1. Logical block addressing
  2. 認識磁碟結構與檔案系統

留言

這個網誌中的熱門文章

yocto recipe : (1) 撰寫 recipe

yocto recipe : (2) 撰寫 bbappend

yocto recipe : (3) 使用 External Source 來編譯軟體