1. 程式人生 > >uefi和legacy bios的深度剖析

uefi和legacy bios的深度剖析

這個是我總結的,參考了幾個論壇還有《鳥哥的私房菜》,還有一部分是我自己的經驗..適合初步瞭解uefi和legacy的人更深入的瞭解

uefi&legacy

Legacy

1.我們可將MBR磁碟分割槽結構用下圖簡單表示(Windows下基本磁碟、4個主分割槽):
這裡寫圖片描述

為了方便計算機訪問硬碟,把硬碟上的空間劃分成許許多多的區塊(英文叫sectors,即扇區),然後給每個區塊分配一個地址,稱為邏輯塊地址(即LBA)。

  • 在MBR磁碟的第一個扇區內儲存著啟動程式碼(446bytes)和硬碟分割槽表(64bytes)。
  • 啟動程式碼(446bytes) 的作用是指引計算機從活動分割槽引導啟動作業系統(BIOS下啟動作業系統的方式);
  • 分割槽表的作用是記錄硬碟的分割槽資訊。在MBR中,分割槽表的大小(64bytes)是固定的,一共可容納4個主分割槽資訊,每一個都記錄區段的開始與結束柱面號碼。擴充套件分割槽(作業系統限制)最多有一個,擴充套件分割槽的目的是使用額外的扇區來記錄分割槽資訊 。
  • 在MBR分割槽表中邏輯塊地址採用32位二進位制數表示,因此一共可表示2^32(2的32次方)個邏輯塊地址。如果一個扇區大小為512位元組,那麼硬碟最大分割槽容量僅為2TB.

2.原理
       磁碟起始位置以特定格式描述磁碟上的分割槽,幷包含“啟動裝載程式 (boot loader)”,BIOS 韌體知道如何執行這一小段啟動裝載程式程式碼。啟動裝載程式的職責是啟動作業系統(現代啟動裝載程式的大小通常超出了 MBR 空間所能容納的範圍,因此必須採用多階段設計,其中 MBR 部分只知道如何從其他位置載入下一階段)。

3.引導順序
       bios->mbr(內含引導載入程式)->引導載入程式boot loader(一個可讀取核心檔案來執行的軟體)(作用1提供選單2載入核心3其它的loader)。
安裝系統的時候mbr和boot sector(每一個分割槽的第一個扇區,檔案系統會保留)均放bootloader(所以先裝linux後裝win,引導會掉)。但是windows的bootloader沒有轉移控制權的功能。所以一般mbr放grub引導裝載程式(1指向linux核心檔案2移交控制權給boot sector的windows bootloader)。

       系統啟動時順序 BIOS -> MBR (主引導記錄)-> DPT (硬碟分割槽表)-> PBR -> 尋找根目錄下 NTLDR(XP) ->boot.ini(xp)
BIOS -> MBR -> DPT -> PBR-> 尋找根目錄下bootmgr(WIN7/Vista)/grldr(Grub)/btldr.mbr(BootLink)->\boot\bcd->winload.exe->核心
       當xp和win7共存,則bootmgr起作用。Xp顯示為早期的windows版本

4.要求

  • bios方式只要存在一個非隱藏的活動主分割槽(必須放在這,如果不放在活動分割槽,可以用ntbootautofix修復,會自動從非活動分割槽的系統盤複製引導進入活動分割槽!)就能引導系統。所以可以將系統裝在任何一個分割槽。也可以將系統和引導放不同分割槽。這個主分割槽的位置不固定。然後安裝系統成功後系統自動設定這個活動主分割槽為隱藏。

GPT磁碟分割槽結構可用下圖簡單表示(Windows下基本磁碟):
GPT分割槽結構
這裡寫圖片描述

  • 在GTP磁碟的第一個資料塊中同樣有一個與MBR(主引導記錄)類似的標記,叫做PMBR。PMBR的作用是,當使用不支援GPT的分割槽工具時,整個硬碟將顯示為一個受保護的分割槽,以防止分割槽表及硬碟資料遭到破壞。UEFI並不從PMBR中獲取GPT磁碟的分割槽資訊,它有自己的分割槽表,即GPT分割槽表。
  • GPT的分割槽方案之所以比MBR更先進,是因為在GPT分割槽表頭中可自定義分割槽數量的最大值,也就是說GPT分割槽表的大小不是固定的。在Windows中,微軟設定GPT磁碟最大分割槽數量為128個。另外,GPT分割槽方案中邏輯塊地址(LBA)採用64位二進位制數表示,可以計算一下2^64是一個多麼龐大的資料,以我們的需求來講完全有理由認為這個大小約等於無限。除此之外,GPT分割槽方案在硬碟的末端還有一個備份分割槽表,保證了分割槽資訊不容易丟失。
    這裡寫圖片描述

Windows作業系統對GPT磁碟的支援
       因為BIOS無法識別GPT分割槽,所以BIOS下GPT磁碟不能用於啟動作業系統,在作業系統提供支援的情況下可用於資料儲存。
       UEFI可同時識別MBR分割槽和GPT分割槽,因此UEFI下,MBR磁碟和GPT磁碟都可用於啟動作業系統和資料儲存。
下表列出了Windows各版本作業系統對GPT磁碟的支援程度:
32位Windows對GPT分割槽支援情況
這裡寫圖片描述

64位Windows對GPT分割槽支援情況
這裡寫圖片描述
2.原理
在ESP分割槽(或者fat32,即使是這樣,在win系統下該分割槽還不可見)下,(“√”表示必不可少的檔案,其他可以刪除,但是必須是下面的路徑!!!,不區分大小寫):
EFI/Boot/bootx64.efi(或bootia32.efi)
√ EFI/Microsoft/Boot/bootmgfw.efi
√ EFI/Microsoft/Boot/BCD
EFI/Microsoft/Boot/zh-CN
boot×64是系統引導,凌駕於win引導之上,可以讀取開機項

2.啟動順序:
①一般情況下(系統引導和windows引導都管用)
\efi\boot\bootx64.efi->\efi\microsoft\boot\bootmgfw.efi->\efi\microsoft\boot\bcd->winload.efi
②系統引導(windows boot manager不管用了,系統引導管用)
\efi\boot\bootx64.efi->\efi\microsoft\boot\bcd->winload.efi
③windows引導(windows boot manager) \efi\microsoft\boot\bootmgfw.efi->\efi\microsoft\boot\bcd->winload.efi

3.修復引導
bcdboot.exe 會修復系統引導,而且會同時修復計算機預設引導和Windows 預設引導,即在esp(fat)分割槽下沒有任何檔案下的情況下完成所有的檔案複製。在ESP分割槽同時出現bootx64.efi和bootmgfw.efi,並且bootx64.efi是由bootmgfw.efi 改名而來的。與此同時在Boot Menu啟動選擇選單那裡生成“Windows Boot Manager”,Windows Boot Manager 及其包含的資訊是儲存在主機板上的NVRAM裡面的,而不是儲存在硬碟上,故刪除Windows Boot Manager需要到BIOS設定區刪除。

4.UEFI及其優勢

  • 僅從系統啟動原理方面來做比較。UEFI之所以比BIOS強大,是因為UEFI本身已經相當於一個微型作業系統,其帶來的便利之處在於:首先,UEFI已具備檔案系統(作業系統組織管理檔案的一種方法,直白點說就是把硬碟上的資料以檔案的形式呈現給使用者。Fat32、NTFS都是 常見的檔案系統型別)的支援,它能夠直接讀取FAT分割槽中的檔案;
  • 其次,可開發出直接在UEFI下執行的應用程式,這類程式檔案通常以efi結尾。既然UEFI可以直接識別FAT分割槽中的檔案,又有可直接在其中執行的應用程式。那麼完全可以將Windows安裝程式做成efi型別應用程式,然 後把它放到任意fat分割槽中直接執行即可,如此一來安裝Windows作業系統這件過去看上去稍微有點複雜的事情突然就變非常簡單了,就像在Windows下開啟QQ一樣簡單。而事實上,也就是這麼一回事。

要知道,這些都是BIOS做不到的。因為BIOS下啟動作業系統之前,必須從硬碟上指定扇區讀取系統啟動程式碼(包含在主引導記錄中),然後從活動分割槽中引導啟動作業系統。對扇區的操作遠比不上對分割槽中檔案的操作更直觀更簡單,所以在BIOS下引導安裝Windows作業系統,我們不得不使用一些工具對裝置進行配置以達到啟動要求。而在UEFI下,這些統統都不需要,不再需要主引導記錄,不再需要活動分割槽,不需要任何工具,只要複製安裝檔案到一個FAT32(主)分割槽/U盤中,然後從這個分割槽/U盤啟動,安裝Windows就是這麼簡單。

6.要求

  • UEFI+GPT的ESP的位置也是可以隨意設定的,在硬碟起始位置、中間位置、末尾,都可以,只要分割槽屬性和其中的引導檔案正確,就可以引導啟動作業系統 。
  • gpt一定要uefi才能引導系統。uefi不一定要gpt只要有一個fat分割槽即可。
  • 不支援uefi的主機板(系統支援uefi檔案讀取),使用大於2.2T的硬碟,可以用mbr(u盤,另一個硬碟)加gpt。前者放引導。此時系統可以裝在gpt與mbr。
  • uefi加mbr下沒有了活動分割槽,直接引導分割槽和系統分割槽。不能把引導放在esp分割槽,要放fat裡面,並且這個分割槽一定要是活動分割槽!!!

7.經驗
當uefi方式啟動成功系統後引導丟了,目前出現了不能關機,但是能重啟成功的現象。

grub2引導過程:
BIOS:
開機—>按照指定的順序啟動U盤—>啟動U盤主引導—>主引導搜尋指定位置的Grub.cfg—>載入Grub.cfg選單,有使用者自行選擇啟動項
UEFI
開機—>查詢指定U盤內計算機預設引導檔案:\efi\boot\bootx64.efi (grub2.efi改名)—>搜尋指定位置的Grub.cfg—>載入Grub.cfg選單,有使用者自行選擇啟動項
大家如需自行定製Grub2的話需具備 ubuntu 系統,並且需要BIOS和UEFI版本的各一個,然後使用 grub-mkimage 定製。

linux中所謂掛載就是指進該目錄可以直接讀取該分割槽的意思。根目錄一定要掛載到某一個分割槽。

Reset to Setup Mode恢復bios出廠設定,Restore Factory Keys用於清除或恢復內建的安全啟動金鑰,OS Optimized Defaults是一個“頂級”設定選項,開啟該選項後,BIOS會自動將所有相關選項恢復為預裝Win8/8.1 預設啟動方式所要求的標準設定。