跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 繁中維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 磁碟區開機記錄 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
磁碟區開機記錄
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
磁碟區開機紀錄(VBR)(又稱為磁碟區開機磁區、磁碟分割開機紀錄或磁碟分割開機磁區)是由 IBM 個人電腦所引入的一種開機磁區。它可能存在於已分割的資料儲存裝置(如硬碟)或未分割的裝置(如軟碟)上,並包含用於啟動載入儲存在裝置其他部分之程式(通常是作業系統,但非必要)的機器碼。在未分割的儲存裝置上,它是裝置的第一個磁區。在已分割的裝置上,它是裝置上個別磁碟分割的第一個磁區,而整個裝置的第一個磁區則是包含磁碟分割表的主要開機紀錄(MBR)。 磁碟區開機紀錄中的程式碼可由機器的韌體直接呼叫,或由主要開機紀錄或開機管理程式中的程式碼間接呼叫。MBR 和 VBR 中的程式碼本質上是以相同的方式載入。 透過開機管理程式呼叫 VBR 的過程稱為鏈式載入。一些雙重開機系統,例如 NTLDR(微軟 Windows NT 衍生作業系統所有版本,直至並包含 Windows XP 和 Windows Server 2003 的開機載入程式),會將各個作業系統安裝到單一磁碟分割 VBR 中的啟動載入碼複製並儲存於磁碟檔案中,在開機載入程式詢問使用者要啟動哪個作業系統後,從檔案載入相關的 VBR 內容。 在 Windows Vista、Windows Server 2008 及更新版本中,NTLDR 已被取代;開機載入功能改由兩個新元件提供:WINLOAD.EXE 和 Windows 開機管理程式。 在 FAT12(DOS 1.x 除外)、FAT16、FAT32、HPFS 和 NTFS 等檔案系統中,VBR 也包含一個 BIOS 參數區塊(BPB),用以指定檔案系統主要磁碟上資料結構的位置和佈局。(關於 FAT VBR 的磁區配置、各種 FAT BPB 版本及其條目的詳細討論,可在 FAT 的相關文章中找到。) ==技術細節== ===簽章=== 依照慣例,開機磁區中若存在適用於 x86 CPU 的 IBM PC 相容開機載入程式,會由一個稱為開機磁區簽章的雙位元組十六進位序列表示(在磁區大小為 512 位元組或以上時,於固定位移 `+1FEh` 處為 `55h`,`+1FFh` 處為 `AAh`)。對於 512 位元組的磁區,開機磁區簽章也標誌著磁區的結尾。在更小或更大磁區上的 VBR 也可能在其實際磁區大小的末端顯示簽章,然而,此處描述的語意僅適用於 `+1FEh` 處的 16 位元簽章。 此簽章表示至少存在一個可安全執行的虛設開機載入程式,即使它可能無法實際載入作業系統。它並不表示存在某個(或甚至特定的)檔案系統或作業系統,儘管某些 3.3 版之前的舊版 DOS 在其偵測 FAT 格式化媒體的過程中依賴此簽章(較新版本則不然)。其他平台或 CPU 的開機程式碼不應使用此簽章,因為當 BIOS 假設開機磁區包含有效的可執行碼而將執行權交給它時,可能會導致當機。這意味著,要讓非常舊版的 DOS 也能使用的 FAT12/FAT16 媒體必須保留此簽章,即使它們不包含作業系統或僅用於在其他平台上開機;因此,它們也必須至少包含一個 x86 相容的(虛設)載入程式(可比較 Atari ST 上的 FAT 和 MSX-DOS 的範例)。儘管如此,一些用於其他平台的媒體即使沒有 x86 相容的虛設載入程式,也錯誤地包含了此簽章,使得這項檢查在實務上並非 100% 可靠。 自(至少)IBM PC/AT 以來的大多數系統 BIOS 都會測試此簽章(但最初的 IBM PC 和其他一些機器則不會)。不僅如此,大多數 MBR 開機載入程式在將控制權交給開機磁區之前也會檢查它。某些 BIOS(如 IBM PC/AT)只對固定磁碟/可卸除式磁碟機執行此檢查,而對於軟碟和超級軟碟,只要起始位元組大於或等於 `B0h` 且前九個字不包含相同的值,開機磁區就會被視為有效,從而避免對軟碟進行 `55h`、`AAh` 的明確測試。由於舊的開機磁區(即非常古老的 CP/M-86 和 DOS 媒體)有時即使可以成功開機也沒有此簽章,因此在某些環境下可以禁用此檢查。這也反映了軟碟可以被格式化為使用小於 512 位元組的磁區大小。 如果 BIOS 或 MBR 程式碼未偵測到有效的開機磁區,因此無法將執行權交給開機磁區程式碼,它將嘗試序列中的下一個開機裝置。如果所有裝置都失敗,它通常會顯示一則錯誤訊息並呼叫 INT 18h。這將會啟動 ROM 中的可選常駐軟體(ROM BASIC)、嘗試透過網路遠端開機、在使用者確認後透過 INT 19h 重新啟動系統,或導致系統中止啟動載入過程,直到下次開機。 從十進位位移 72 到 79,一個 NTFS PBR 包含磁碟分割 UUID 磁碟區 ID 序號。 ===呼叫=== VBR 中的開機程式碼可以假設 BIOS 已經設定好其資料結構和中斷,並已初始化硬體。為求容錯操作,程式碼不應假設存在超過 32 KB 的記憶體;如果需要更多記憶體,應為此查詢 INT 12h,因為其他開機前程式碼(例如 BIOS 擴充功能覆蓋層、加密系統或遠端啟動載入程式)也可能存在於記憶體的其他地方(並且通常會透過相應減少回報的 INT 12h 記憶體大小來隱藏自己,以免被 MBR 和 VBR 的操作覆寫)。BIOS 開機規範允許 64 KB 的記憶體,並明確建議將 `0000h:8000h` 至 `0000h:FFFFh` 作為 MBR 和/或 VBR 的記憶體空間。開機程式碼不得假設 CPU 優於原始的 Intel 8088 或 8086(用於原始 PC),且不得對硬體的確切狀態、中斷系統(中斷可為啟用或停用狀態)或堆疊的位置和大小做任何假設。儘管原始 IBM BIOS 將 DS、ES 和 SS CPU 暫存器初始化為區段 `0000h` 並將初始堆疊維持在 SS:SP = `0000h:0400h`,但這並非一個可依賴的條件,因為並非所有 BIOS 和 MBR 程式碼都遵循此慣例。下方未提及的暫存器必須視為未初始化。通常不允許直接存取硬體。雖然磁碟參數表(DPT/FDPB)通常已在記憶體的 `0000h:0078h` 處設定好,但 VBR 必須將 INT 1Eh 向量所指向的 DPT 移動(並可能修復)至此位置(INT 1Eh 不是中斷,而是指向 DPT 的遠指標)。 在受控環境中,某些條件可以放寬,例如,現今一些開機載入程式在正常操作中會假設有高達 128 KB 的記憶體可供使用(無需查詢更多),而一些使用 LBA 存取的開機載入程式則假設至少有 Intel 80188 或 80186 CPU。 當先前的啟動載入程式(通常是 BIOS 或 MBR,但可能為另一開機載入程式)透過跳轉至 CPU 真實模式下的 `0000h`:`7C00h` 將執行權交給 VBR 時,VBR 會被載入到記憶體位址 `0000h`:`7C00h`,且 CPU 暫存器設定如下。 * CS:IP = `0000h`:`7C00h` (固定) 某些 Compaq BIOS 錯誤地使用 `07C0h`:`0000h`。雖然這在真實模式記憶體中解析為相同的位置,但這是不標準的,應予以避免,因為假設特定暫存器值或未編寫為可重定位的 VBR 程式碼可能因此無法運作。 * DL = 開機磁碟機單元(軟碟/超級軟碟:`00h` = 第一個,`01h` = 第二個,...,`7Eh`;固定磁碟/可卸除式磁碟機:`80h` = 第一個,`81h` = 第二個,...,`FEh`;值 `7Fh` 和 `FFh` 保留給 ROM/遠端磁碟機,不得在磁碟上使用)。DL 受 IBM BIOS 及大多數其他 BIOS 支援。已知 Toshiba T1000 BIOS 不正確支援此功能,且某些舊的 Wyse 286 BIOS 對硬碟使用大於或等於 2 的 DL 值。被設定為超級軟碟的 USB 隨身碟通常會被分配 DL = `00h` 或 `01h`,然而,一些罕見的 BIOS 也錯誤地將設定為可卸除式磁碟機的 USB 隨身碟呈現為 DL = `01h`,而非使用 DL = `80h`。傳統上,BIOS 在開機期間只傳遞 `00h` 和 `80h` 這兩個值,且許多開機磁區無論如何都硬性編碼為使用固定值。隨插即用 BIOS 規範和 BIOS 開機規範(BBS)也允許其他裝置變得可開機。後者也建議 MBR 和 VBR 程式碼應使用 DL 而非內部硬性編碼的預設值。(注意:MS-DOS/PC DOS 和 OS/2 的 VBR 會忽略提供的 DL 值,而改為擷取儲存在延伸 BIOS 參數區塊(EBPB)位移 `+19h` 處或 DOS 3.2 至 3.31 版中磁區位移 `+1FDh` 處的值。某些版本的 DR-DOS 從 7.02 開始使用 DL。DR-DOS 7.07 的 VBR 預設使用 DL 並忽略 BPB 值,但可使用 `SYS /O[:nnn]` 重新啟用使用 BPB 值的舊行為,甚至強制將特定的開機磁碟機單元 `nnn` 儲存在那裡。在 FAT32 磁碟區上,FreeDOS 也利用 DL 值,而在 FAT12/FAT16 磁碟區上,僅當 BPB 值設為 `FFh` 時才如此。) * DH 位元 5 = 0:裝置透過 INT 13h 支援;否則:不理會(應為零)。DH 受某些 IBM BIOS 支援。某些 MBR 和 VBR 程式碼會保留 DH 的值。 具備隨插即用 BIOS 或 BBS 支援的系統,除了 DL 之外,還會提供一個指向 PnP 資料的指標: * DL = 開機磁碟機單元(見上文) * ES:DI = 指向 "``$PnP``" 安裝檢查結構 此資訊允許開機載入程式(在 MBR 或 VBR 中)主動與 BIOS 或記憶體中常駐的 PnP / BBS 覆蓋層互動,以設定開機順序等,然而,此資訊被大多數標準的 MBR 和 VBR 忽略。理想情況下,ES:DI 會被傳遞,但支援 PnP 的作業系統通常也有備援方法來稍後擷取 PnP BIOS 進入點,因此大多數作業系統並不依賴此項。ES:DI 中的資訊可作為提示——根據 PnP BIOS 規範,「$PnP」安裝檢查結構可透過在系統記憶體中從 F0000h 到 FFFFFh 每 16 位元組邊界搜尋 ASCII 字串 $PnP 的簽章來找到。 對於已分割的媒體,當 VBR 由 MBR(或其他開機載入程式)而非 BIOS 啟動時,許多實作除了 DL(有時也包括 DH 和 ES:DI)外,還會傳遞額外資訊給 VBR: * DS:SI = 指向對應於已啟動 VBR 的 16 位元組 MBR 磁碟分割表項目(在重定位的 MBR 中)。如果磁碟分割表中沒有任何磁碟分割被標記為可開機,PC-MOS 5.1 依賴此項來開機。結合 LOADER,Multiuser DOS 和 REAL/32 的開機磁區在找不到開機檔案(LOADER.SYS)時,會用此來定位作用中磁碟分割的開機磁區(或磁碟上固定位置的另一個啟動載入程式,如 IBMBIO.LDR)。PTS-DOS 6.5 和 S/DOS 1.0 結合其進階作用中磁碟分割(AAP)功能使用此項。除了支援 LOADER 和 AAP,DR-DOS 7.07 在使用其雙重 CHS/LBA VBR 程式碼時,可利用此項來決定必要的 INT 13h 存取方法。OS/2、MS-DOS(7.0 之前)、PC DOS(至 7.10)和 Windows NT(至約 2007 年)的 MBR 程式碼恰好也提供相同的介面,儘管這些系統並未使用它。Windows NT 6.0(及更高版本)安裝的 MBR 使用其他暫存器,因此不再與這些擴充功能相容。雖然某些擴充功能僅依賴於 16 位元組的磁碟分割表項目本身,但其他擴充功能可能需要整個 4(或 5 個項目)的磁碟分割表也存在。 在 DR-DOS 7.07 下,MBR 可選擇性地使用一個擴充介面並與 LOADER 結合: * AX = 魔術簽章,表示此擴充功能的存在(`0EDCh`) * DL = 開機磁碟機單元(見上文) * DS:SI = 指向所使用的 16 位元組 MBR 磁碟分割表項目(見上文) * ES:BX = 開機磁區或特殊 "``NEWLDR``" 磁區映像的起始位置(通常為 `7C00h`) * CX = 保留 結合 GUID 磁碟分割表(GPT),一份增強型磁碟機規格(EDD)4 混合式 MBR 提案建議對 MBR 至 VBR 介面進行另一項擴充: * EAX = `54504721h` ("`!GPT`") * DL = 開機磁碟機單元(見上文) * ES:DI = 指向 "``$PnP``" 安裝檢查結構(見上文) * DS:SI = 指向一個混合式 MBR 遞交結構,該結構由一個 16 位元組的虛設 MBR 磁碟分割表項目(除了位移 `+0h` 的開機旗標和位移 `+4h` 的磁碟分割類型外,所有位元均設為 1)以及額外資料組成。如果那些較舊的擴充功能只需要 16 位元組的磁碟分割項目而非整個磁碟分割表,這部分相容於上述較舊的 DS:SI 擴充功能。 ==參見== * 主要開機紀錄 (MBR) * 延伸開機紀錄 (EBR) * BIOS 參數區塊 (BPB) * FAT 檔案系統中的 BPB 格式 * 磁碟分割 * 磁碟分割對齊 ==註解== ==參考資料== ==延伸閱讀== Category:電腦檔案系統 Category:BIOS Category:開機 [[分類: 待校正]]
返回到「
磁碟區開機記錄
」。