在使用 LBA（邏輯區塊位址）時，可以藉由以下的公式將 LBA 值轉換為 CHS（磁柱-磁頭-磁區）位址：

1. **從 LBA 轉換為 CHS 的公式：**

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

   其中：
   - `#lba` 是邏輯區塊編號。
   - `#c` 是磁柱的編號。
   - `#h` 是磁頭的編號。
   - `#s` 是磁區的編號。
   - `H` 是每個磁柱的磁頭數（heads per cylinder）。
   - `S` 是每個磁道的磁區數（sectors per track）。

2. **計算過程示範：**

   假設我們有以下參數：
   - `#lba = 1234`
   - `H = 10`（每磁柱的磁頭數）
   - `S = 84`（每磁道的磁區數）

   現在我們將 LBA = 1234 轉換為 CHS：

   - 計算磁柱 `#c`：
     ```
     #c = #lba / (S * H)
        = 1234 / (84 * 10)
        = 1234 / 840
        = 1（整數除法結果）
     ```

   - 計算磁頭 `#h`：
     ```
     #h = (#lba / S) % H
        = (1234 / 84) % 10
        = 14 % 10
        = 4
     ```

   - 計算磁區 `#s`：
     ```
     #s = (#lba % S) + 1
        = (1234 % 84) + 1
        = 58 + 1
        = 59
     ```

   因此，從 LBA 值 1234 轉換得到的 CHS 位址為：
   ```
   #chs = (1, 4, 59)
   ```

這樣的計算過程能幫助我們了解如何從 LBA 轉換到 CHS。
在使用 LBA 時，如何將 LBA 值轉換為 CHS 位址？具體的公式和計算過程是什麼？
**邏輯區塊位址**（**英語：**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
```

其中，

* #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。

## 外部連結

* 如何在 Windows XP 中啟用 ATAPI 磁碟機的 48 位元邏輯區塊定址支援 （頁面存檔備份，存於網際網路檔案館）
* LBAs explained （頁面存檔備份，存於網際網路檔案館）
* LBA and CHS format, LBA mapping （頁面存檔備份，存於網際網路檔案館）
* Microsoft article on 7.8GB limit on NT 4.0 （頁面存檔備份，存於網際網路檔案館）
* Hard Drive Size Limitations and Barriers （頁面存檔備份，存於網際網路檔案館）
* Upgrading and Repairing PC's （頁面存檔備份，存於網際網路檔案館）, by Scott Mueller. Pages 524-531.
* Source for 48-bit LBA Information （頁面存檔備份，存於網際網路檔案館）
## 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 定址機制

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 再傳給硬體控制器。 **邏輯區塊位址**（**英語：**Logical Block Address，**LBA**）是描述電腦儲存裝置上資料所在區塊的通用機制，一般用在像硬碟這樣的輔助記憶裝置。LBA 可以意指某個資料區塊的位址或是某個位址所指向的資料區塊。現今電腦上所謂一個邏輯區塊通常是 512 或 1024 位元組。ISO-9660 格式的標準 CD 則以 2048 位元組為一個邏輯區塊大小。 例如:

　
: 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。