萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

大容量磁碟與 1024 柱面限制:磁碟幾何與開機深度解析

作者:Andries Brouwer | 譯者:Asd L. Chen | v1.0(1996)

1. 問題核心

若磁碟超過 1024 柱面,且作業系統使用 BIOS INT13 介面(10 位元柱面欄位),將無法存取 1024 之後的區域。Linux 核心不使用 BIOS,故無此問題,但兩個例外:

  1. 開機階段:核心尚未啟動,LILO 等載入程式仍依賴 BIOS,核心映像必須完整位於前 1024 柱面內。
  2. 分割區一致性:同一磁碟上的所有作業系統必須以相同方式解讀分割表,影響核心與 fdisk。

2. 開機流程與解決方案

BIOS 讀取 MBR(磁區 0)並跳轉執行載入程式,載入程式使用 BIOS 服務。解決方法:確保核心與 LILO map 檔放在 BIOS 可存取、完全位於前 1024 柱面的分區(第一或第二顆磁碟)。給 LILO linear 參數可幫助協調幾何資訊。

3. 磁碟幾何與分割表結構

MBR 分割表項目結構:

struct partition {
  char active;       // 0x80 可開機
  char begin[3];     // 起始 CHS
  char type;         // 分割區類型
  char end[3];       // 結束 CHS
  int start;         // 32-bit 起始磁區號 (LBA)
  int length;        // 32-bit 磁區數
};

Linux 僅使用 start、length(支援 2 TB 分區)。BIOS INT13 使用 24-bit CHS(10+8+6 位元),最大定址 7.875 GB。IDE 介面支援 256 磁區/軌、65536 柱面、16 磁頭(128 GB),但受 BIOS 限制僅 504 MB。業界以硬體/軟體轉譯突破。

4. 轉譯技術與磁碟管理程式

  • LBA (Logical Block Addressing):將磁碟視為線性磁區陣列,SCSI 全支援,部份 IDE 支援。BIOS 轉換 CHS→LBA 再交給控制器,可定址 7.875 GB。
  • Large 模式:BIOS 呈現轉換後幾何 (C',H',S') 給 OS,與控制器溝通用實體 (C,H,S)。通常 S'=S、C'=C/N、H'=H×N(N 為 2 的冪使 C'≤1024),同樣達 7.875 GB。
  • 磁碟管理程式 (OnTrack, EZ-Drive):以自有程式取代 BIOS 服務,置於 MBR 及後續磁區(DDO)。影響多重開機,安裝後從軟碟開機可能失敗。Linux 1.3.14+ 支援 OnTrack,1.3.29+ 支援 EZ-Drive。

5. 核心 IDE 磁碟轉譯細節

核心偵測到管理程式會嘗試以相同方式重新對應幾何,使 Linux 看到與 DOS 相同分割。指令列指定幾何(hd=cyls,heads,secs)會停用重新對應。重新對應嘗試磁頭數 4,8,16,32,64,128,255 直到 C≤1024 或 H=255。

5.1 EZD

偵測到第一主分割區類型 0x55。重新對應幾何,忽略磁區 0 分割表,改用磁區 1。寫入磁區 0 導向磁區 1。可修改 ide.c 中 FAKE_FDISK_FOR_EZDRIVE 關閉。

5.2 DM6:DDO

第一主分割區類型 0x54(第一顆磁碟)。重新對應幾何,整碟偏移 63 磁區(舊磁區 63→新 0),從新磁區 0 讀取 MBR。為 DDO 留空間。

5.3 DM6:AUX

其他磁碟偵測到類型 0x51 或 0x53。重新對應幾何,不偏移。

5.4 DM6:MBR

舊版 OnTrack,以 MBR 簽名偵測(第 2、3 位元組偏移 ≤430)。

copyright © 萬盛學電腦網 all rights reserved