首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

U 盤 MBR 中 CHS 參數的由來與作用:兼容 BIOS/舊系統的虛擬幾何結構

     編輯:程式設計疑難解答

現象

U 盤 MBR 分區表 (DPT) 中記錄了起始/結束磁頭、柱面、扇區 (CHS) 值,但 U 盤無物理磁頭/柱面。

核心結論

CHS 值由 BIOS/主板在啟動時根據 U 盤容量「虛擬」計算得出,僅為兼容 DOS 時代的實模式啟動代碼(如 INT 13h)與老舊分區工具,現代 OS (Windows/Linux) 全程使用 LBA 線性地址,完全忽略 CHS。

虛擬 CHS 計算規則(典型)

  • 磁頭數:255 (0xFF) —— 最大值,利用 INT 13h 傳參上限;
  • 每磁道扇區數:63 (0x3F) —— 同為最大值;
  • 柱面數:總扇區數 / (255 * 63),向上取整,超過 1023 則飽和為 1023 (INT 13h 柱面上限)。

此即所謂「Large/CHS 模式」轉換算法,由 BIOS 實現,非 U 盤固件存儲。

為何同一 U 盤在不同電腦 CHS 不同?

  • BIOS 實現差異:舊 BIOS 可能用 16/255/63 或 64/32/63 等不同虛擬幾何;
  • CMOS 設置中可手動指定 CHS(User 模式),覆蓋 BIOS 自動計算;
  • 因此不應依賴 CHS 值做任何業務邏輯,僅作啟動兼容保留。

    現代啟動流程

    1. UEFI 系統:直接讀取 GPT 分區表 + EFI 系統分區,完全無視 MBR/CHS;
    2. Legacy BIOS:讀取 MBR → 跳轉到啟動扇區 → 啟動載入器 (GRUB/Windows Bootmgr) 切換到保護模式 → 使用 LBA 讀取內核;
    3. INT 13h 僅在啟動載入器加載階段短暫使用,隨後即被棄用。

    實際建議

    • 分區工具 (fdisk/parted/DiskGenius) 顯示的 CHS 僅供參考,操作時請使用 LBA 扇區號;
    • 制作啟動 U 盤時,確保 MBR 代碼支持 LBA (如 syslinux/grub2),無需關心 CHS;
    • 若遇老舊工業控制機必須用 CHS 啟動,進 BIOS 手動固定合理的虛擬幾何參數。

    總結

    U 盤 MBR 中的 CHS 是 BIOS 為兼容 INT 13h 而臨時虛擬的幾何參數,不存儲於 U 盤,不隨 U 盤遷移,現代系統均使用 LBA,可完全忽略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved