天天看點

硬碟分區2----GPT與MBR的差別

GPT:GUID(Globally Unique Identifier) Partition Table,全局唯一辨別磁盤分區表。

硬碟分區2----GPT與MBR的差別

轉自:http://blog.csdn.net/kofkyo/article/details/6939342

基本磁盤與動态磁盤

磁盤的使用方式可以分為兩類:一類是“基本磁盤”。基本磁盤非常常見,我們平時使用的磁盤類型基本上都是“基本磁盤”。“基本磁盤”受26個英文字母的限制,也就是說磁盤的盤符隻能是26個英文字母中的一個。因為A、B已經被軟驅占用,實際上磁盤可用的盤符隻有C~Z 24個。另外,在“基本磁盤”上隻能建立四個主分區(注意是主分區,而不是擴充分區);另一種磁盤類型是“動态磁盤”。“動态磁盤”不受26個英文字母的限制,它是用“卷”來命名的。“動态磁盤”的最大優點是可以将磁盤容量擴充到非鄰近的磁盤空間。

動态硬碟,是指在磁盤管理器中将本地硬碟更新得來的。動态磁盤與基本磁盤相比,最大的不同就是不再采用以前的分區方式,而是叫做卷集(Volume),卷集分為簡單磁碟區、跨距磁碟區、等量磁碟區、鏡像卷、RAID-5 卷。基本磁盤和動态磁盤相比,有以下差別:

1、卷集或分區數量。動态磁盤在一個硬碟上可建立的卷集個數沒有限制。而基本磁盤在一個硬碟上隻能分最多四個主分區。

2、磁盤空間管理。動态磁盤可以把不同磁盤的分區建立成一個卷集,并且這些分區可以是非鄰接的,這樣的大小就是幾個磁盤分區的總大小。基本磁盤則不能跨硬碟分區并且要求分區必須是連續的空間,每個分區的容量最大隻能是單個硬碟的最大容量,存取速度和單個硬碟相比也沒有提升。

3、磁盤容量大小管理。動态磁盤允許我們在不重新啟動機器的情況下調整動态磁盤大小,而且不會丢失和損壞已有的資料。而基本磁盤的分區一旦建立,就無法更改容量大小,除非借助于第三方磁盤工具軟體,比如PQ Magic。

4、磁盤配置資訊管理和容錯。動态磁盤将磁盤配置資訊放在磁盤中,如果是RAID容錯系統會被複制到 其他動态磁盤上,這樣可以利用RAID-1的容錯功能,如果某個硬碟損壞,系統将自動調用另一個硬碟的資料,保持資料的完整性。而基本磁盤将配置資訊存放在引導區,沒有容錯功能。

基本磁盤轉換為動态磁盤可以直接進行,但是該過程是不可逆的。要想轉回基本磁盤,隻有把所有資料全部拷出,然後删除硬碟所有分區後才能轉回去。

GPT磁盤與MBR磁盤

GPT(Globally Unique Identifier Partition Table Format)一種由基于 Itanium 計算機中的可擴充固件接口 (EFI) 使用的磁盤分區架構。與主啟動記錄 (MBR) 分區方法相比,GPT 具有更多的優點,因為它允許每個磁盤有多達 128 個分區,支援高達 18 千兆兆位元組的卷大小,允許将主磁盤分區表和備份磁盤分區表用于備援,還支援唯一的磁盤和分區 ID (GUID)。

與支援最大卷為 2 TB (terabytes) 并且與每個磁盤最多有 4 個主分區(或 3 個主分區,1 個擴充分區和無限制的邏輯驅動器)的主啟動記錄 (MBR) 磁盤分區的樣式相比,GUID 分區表 (GPT) 磁盤分區樣式支援最大卷為 18 EB (exabytes) 并且每磁盤最多有 128 個分區。與 MBR 分區的磁盤不同,至關重要的平台操作資料位于分區,而不是位于非分區或隐藏扇區。另外,GPT 分區磁盤有多餘的主要及備份分區表來提高分區資料結構的完整性。

在運作帶有 Service Pack 1 (SP1) 的 Windows Server 2003 的基于 x86 的計算機和基于 x64 的計算機上,作業系統必須駐留在 MBR 磁盤上。其他的硬碟可以是 MBR 或 GPT。

在基于 Itanium 的計算機上,作業系統加載程式和啟動分區必須駐留在 GPT 磁盤上。其他的硬碟可以是 MBR 或 GPT。

在單個動态磁盤組中既可以有 MBR,也可以有 GPT 磁盤。也使用将基本 GPT 和 MBR 磁盤的混合,但它們不是磁盤組的一部分。可以同時使用 MBR 和 GPT 磁盤來建立鏡像卷、等量磁碟區、跨距磁碟區和 RAID-5 卷,但是 MBR 的柱面對齊的限制可能會使得建立鏡像卷有困難。通常可以将 MBR 的磁盤鏡像到 GPT 磁盤上,進而避免柱面對齊的問題。可以将 MBR 磁盤轉換為 GPT 磁盤,并且隻有在磁盤為空的情況下,才可以将 GPT 磁盤轉換為 MBR 磁盤。否則資料将發生丢失!!!

不能在可移動媒體,或者在與群集服務使用的共享 SCSI 或 Fibre Channel 總線連接配接的群集磁盤上使用 GPT 分區樣式

MBR,全稱為Master Boot Record,即硬碟的主引導記錄。 

為了便于了解,一般将MBR分為廣義和狹義兩種:廣義的MBR包含整個扇區(引導程式、分區表及分隔辨別),也就是上面所說的主引導記錄;而狹義的MBR僅指引導程式而言。

硬碟的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程式、硬碟分區表DPT和硬碟有效标志(55AA)。在總共512位元組的主引導扇區裡主引導程式(boot loader)占446個位元組,第二部分是Partition table區(分區表),即DPT,占64個位元組,硬碟中分區有多少以及每一分區的大小都記在其中。第三部分是magic number,占2個位元組,固定為55AA。

MBR是不屬于任何一個作業系統,也不能用作業系統提供的磁盤操作指令來讀取它,但可以通過指令來修改和重寫,如在minix3裡面,可以用指令:installboot -m /dev/c0d0 /usr/mdec/masterboot來把masterboot這個小程式寫到mbr裡面,masterboot通常用彙編語言來編寫。我們也可以用ROM-BIOS中提供的INT13H的2号功能來讀出該扇區的内容,也可用軟體工具Norton8.0中的DISKEDIT.EXE來讀取。

用INT13H的讀磁盤扇區功能的調用參數如下: 

入口參數:AH=2 (指定功能号) 

AL=要讀取的扇區數 

DL=磁盤号(0、1-軟碟;80、81-硬碟) 

DH=磁頭号 

CL高2位+CH=柱面号 

CL低6位=扇區号 

CS:BX=存放讀取資料的記憶體緩沖位址 

出口參數:CS:BX=讀取資料存放位址 

錯誤資訊:如果出錯CF=1 AH=錯誤代碼 

用DEBUG讀取位于硬碟0柱面、0磁頭、1扇區的操作如下: 

A>DEBUG 

-A 100 

XXXX:XXXX MOV AX,0201 (用功能号2讀1個扇區) 

XXXX:XXXX MOV BX,1000 (把讀出的資料放入緩沖區的位址為CS:1000) 

XXXX:XXXX MOV CX,0001 (讀0柱面,1扇區) 

XXXX:XXXX MOV DX,0080 (指定第一實體盤的0磁頭) 

XXXX:XXXX INT 13 

XXXX:XXXX INT 3 

XXXX:XXXX (按Enter鍵) 

-G=100 (執行以上程式段) 

-D 1000 11FF (顯示512位元組的MBR内容) 

在windows作業系統下,例如xp,2003,Vista,windows7,有微軟提供的接口直接讀寫mbr; 

FILE * fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+"); 

char buffer[512]; 

fread(buffer,512,1,fd); 

//then you can edit buffer[512] as your wish...... 

fseek(fd,0,SEEK_SET); //很重要 

fwrite(buffer,512,1,fd); //把修改後的MBR寫入到你的機器 

fclose(fd); //大功告成 

MBR組成 

一個扇區的硬碟主引導記錄MBR由如圖6-15所示的4個部分組成。 

·主引導程式(偏移位址0000H--0088H),它負責從活動分區中裝載,并運作系統引導程式。 

·出錯資訊資料區,偏移位址0089H--00E1H為出錯資訊,00E2H--01BDH全為0位元組。 

·分區表(DPT,Disk Partition Table)含4個分區項,偏移位址01BEH--01FDH,每個分區表項長16個位元組,共64位元組為分區項1、分區項2、分區項3、分區項4。

·結束标志字,偏移位址01FE--01FF的2個位元組值為結束标志55AA,如果該标志錯誤系統就不能啟動。

補充知識:EFI(可擴充固件接口) 

可擴充固件接口(英文名Extensible Firmware Interface 或EFI)是由英特爾,一個主導個人電腦技術研發的公司推出的一種在未來的類PC的電腦系統中替代BIOS的更新方案。BIOS技術的興起源于IBM PC/AT機器的流行以及第一台由康柏公司研制生産的“克隆”PC。在PC啟動的過程中,BIOS擔負着初始化硬體,檢測硬體功能,以及引導作業系統的責任,在早期,BIOS還提供一套運作時的服務程式給作業系統及應用程式使用。BIOS程式存放于一個掉電後内容不會丢失的隻讀存儲器中,系統加電時處理器的第一條指令的位址會被定位到BIOS的存儲器中,便于使初始化程式得到執行。

EFI的産生

衆所周知,英特爾在近二十年來引領以x86系列處理器為基礎的PC技術潮流,它的産品如CPU,晶片組等在PC生産線中占據絕對上司的位置。是以,不少人認為這一舉動顯示了英特爾公司欲染指固件産品市場的野心。事實上,EFI技術源于英特爾安騰處理器(Itanium)平台的推出。安騰處理器是英特爾瞄準伺服器高端市場投入近十年研發力量設計産生的與x86系列完全不同的64位新架構。在x86系列處理器進入32位的時代,由于相容性的原因,新的處理器(i80386)保留了16位的運作方式(實模式),此後多次處理器的更新換代都保留了這種運作方式。甚至在含64位擴充技術的至強系列處理器中,處理器加電啟動時仍然會切換到16位的實模式下運作。英特爾将這種情況歸咎于BIOS技術的發展緩慢。自從PC相容機廠商通過淨室的方式複制出第一套BIOS源程式,BIOS就以16位彙編代碼,寄存器參數調用方式,靜态連結,以及1MB以下記憶體固定編址的形式存在了十幾年。雖然由于各大BIOS廠商近年來的努力,有許多新元素添加到産品中,如PnP BIOS,ACPI,傳統USB裝置支援等等,但BIOS的根本性質沒有得到任何改變。這迫使英特爾在開發更新的處理器時,都必須考慮加進使效能大大降低的相容模式。有人曾打了一個比喻:這就像保時捷新一代的全自動檔跑車被人生套上去一個蹩腳的挂檔器。

然而,安騰處理器并沒有這樣的顧慮,它是一個新生的處理器架構,系統固件和作業系統之間的接口都可以完全重新定義。并且這一次,英特爾将其定義為一個可擴充的,标準化的固件接口規範,不同于傳統BIOS的固定的,缺乏文檔的,完全基于經驗和晦澀約定的一個事實标準。基于EFI的第一套系統産品的出現至今已經有五年的時間,如今,英特爾試圖将成功運用在高端伺服器上的技術推廣到市場占有率更有優勢的PC産品線中,并承諾在2006年間會投入全力的技術支援。

比較EFI和BIOS

一個顯著的差別就是EFI是用子產品化,C語言風格的參數堆棧傳遞方式,動态連結的形式建構的系統,較BIOS而言更易于實作,容錯和糾錯特性更強,縮短了系統研發的時間。它運作于32位或64位模式,乃至未來增強的處理器模式下,突破傳統16位代碼的尋址能力,達到處理器的最大尋址。它利用加載EFI驅動的形式,識别及操作硬體,不同于BIOS利用挂載實模式中斷的方式增加硬體功能。後者必須将一段類似于驅動的16位代碼,放置在固定的0x000C0000至0x000DFFFF之間存儲區中,運作這段代碼的初始化部分,它将挂載實模式下約定的中斷向量向其他程式提供服務。例如,VGA圖形及文本輸出中斷(INT 10h),磁盤存取中斷服務(INT 13h)等等。由于這段存儲空間有限(128KB),BIOS對于所需放置的驅動代碼大小超過空間大小的情況無能為力。另外,BIOS的硬體服務程式都已16位代碼的形式存在,這就給運作于增強模式的作業系統通路其服務造成了困難。是以BIOS提供的服務在現實中隻能提供給作業系統引導程式或MS-DOS類作業系統使用。而EFI系統下的驅動并不是由可以直接運作在CPU上的代碼組成的,而是用EFI Byte Code編寫而成的。這是一組專用于EFI驅動的虛拟機器指令,必須在EFI驅動運作環境(Driver Execution Environment,或DXE)下被解釋運作。這就保證了充分的向下相容性,打個比方說,一個帶有EFI驅動的擴充裝置,既可以将其安裝在安騰處理器的系統中,也可以安裝于支援EFI的新PC系統中,而它的EFI驅動不需要重新編寫。這樣就無需對系統更新帶來的相容性因素作任何考慮。另外,由于EFI驅動開發簡單,所有的PC部件提供商都可以參與,情形非常類似于現代作業系統的開發模式,這個開發模式曾使Windows在短短的兩三年時間内成為功能強大,性能優越的作業系統。基于EFI的驅動模型可以使EFI系統接觸到所有的硬體功能,在操作作業系統運作以前浏覽網際網路站不再是天方夜譚,甚至實作起來也非常簡單。這對基于傳統BIOS的系統來說是件不可能的任務,在BIOS中添加幾個簡單的USB裝置支援都曾使很多BIOS設計師痛苦萬分,更何況除了添加對無數網絡硬體的支援外,還得憑空建構一個16位模式下的TCP/IP協定棧。

一些人認為BIOS隻不過是由于相容性問題遺留下來的無足輕重的部分,不值得為它花費太大的更新努力。而反對者認為,當BIOS的出現制約了PC技術的發展時,必須有人對它作必要的改變。

EFI和作業系統

EFI在概念上非常類似于一個低階的作業系統,并且具有操控所有硬體資源的能力。不少人感覺它的不斷發展将有可能代替現代的作業系統。事實上,EFI的締造者們在第一版規範出台時就将EFI的能力限制于不足以威脅作業系統的統治地位。首先,它隻是硬體和預啟動軟體間的接口規範;其次,EFI環境下不提供中斷的通路機制,也就是說每個EFI驅動程式必須用輪詢的方式來檢查硬體狀态,并且需要以解釋的方式運作,較作業系統下的驅動效率更低;再則,EFI系統不提供複雜的存儲器保護功能,它隻具備簡單的存儲器管理機制,具體來說就是指運作在x86處理器的段保護模式下,以最大尋址能力為限把存儲器分為一個平坦的段,所有的程式都有權限存取任何一段位置,并不提供真實的保護服務。當EFI所有元件加載完畢時,系統可以開啟一個類似于作業系統Shell的指令解釋環境,在這裡,使用者可以調入執行任何EFI應用程式,這些程式可以是硬體檢測及除錯軟體,引導管理,設定軟體,作業系統引導軟體等等。理論上來說,對于EFI應用程式的功能并沒有任何限制,任何人都可以編寫這類軟體,并且效果較以前MS-DOS下的軟體更華麗,功能更強大。一旦引導軟體将控制權交給作業系統,所有用于引導的服務代碼将全部停止工作,部分運作時代服務程式還可以繼續工作,以便于作業系統一時無法找到特定裝置的驅動程式時,該裝置還可以繼續被使用。

EFI的組成

一般認為,EFI由以下幾個部分組成: 

1. Pre-EFI初始化子產品 

2. EFI驅動執行環境 

3. EFI驅動程式 

4. 相容性支援子產品(CSM) 

5. EFI高層應用 

6. GUID 磁盤分區

在實作中,EFI初始化子產品和驅動執行環境通常被內建在一個隻讀存儲器中。Pre-EFI初始化程式在系統開機的時候最先得到執行,它負責最初的CPU,主橋及存儲器的初始化工作,緊接着載入EFI驅動執行環境(DXE)。當DXE被載入運作時,系統便具有了枚舉并加載其他EFI驅動的能力。在基于PCI架構的系統中,各PCI橋及PCI擴充卡的EFI驅動會被相繼加載及初始化;這時,系統進而枚舉并加載各橋接器及擴充卡後面的各種總線及裝置驅動程式,周而複始,直到最後一個裝置的驅動程式被成功加載。正因如此,EFI驅動程式可以放置于系統的任何位置,隻要能保證它可以按順序被正确枚舉。例如一個具PCI總線接口的ATAPI大容量存儲擴充卡,其EFI驅動程式一般會放置在這個裝置的符合PCI規範的擴充隻讀存儲器(PCI Expansion ROM)中,當PCI總線驅動被加載完畢,并開始枚舉其子裝置時,這個存儲擴充卡旋即被正确識别并加載它的驅動程式。部分EFI驅動程式還可以放置在某個磁盤的EFI專用分區中,隻要這些驅動不是用于加載這個磁盤的驅動的必要部件。在EFI規範中,一種突破傳統MBR磁盤分區結構限制的GUID磁盤分區系統(GPT)被引入,新結構中,磁盤的分區數不再受限制(在MBR結構下,隻能存在4個主分區),并且分區類型将由GUID來表示。在衆多的分區類型中,EFI系統分區可以被EFI系統存取,用于存放部分驅動和應用程式。很多人擔心這将會導緻新的安全性因素,因為EFI系統比傳統的BIOS更易于受到計算機病毒的攻擊,當一部分EFI驅動程式被破壞時,系統有可能面臨無法引導的情況。實際上,系統引導所依賴的EFI驅動部分通常都不會存放在EFI的GUID分區中,即使分區中的驅動程式遭到破壞,也可以用簡單的方法得到恢複,這與作業系統下的驅動程式的存儲習慣是一緻的。CSM是在x86平台EFI系統中的一個特殊的子產品,它将為不具備EFI引導能力的作業系統提供類似于傳統BIOS的系統服務。

EFI的發展

英特爾無疑是推廣EFI的積極因素,近年來由于業界對其認識的不斷深入,更多的廠商正投入這方面的研究。包括英特爾,AMD在内的一些PC生産廠家聯合成立了聯合可擴充固件接口論壇,它将在近期推出第一版規範。這個組織将接手規劃EFI發展的重任,并将英特爾的EFI架構解釋為這個規範的一個具體實作。另外,各大BIOS提供商如Phoenix, AMI等,原先被認為是EFI發展的阻礙力量,現在也不斷的推出各自的解決方案。分析人士指出,這是由于BIOS廠商在EFI架構中重新找到了諸如Pre-EFI啟動環境之類的市場位置,然而,随着EFI在PC系統上的成功運用,以及英特爾新一代晶片組的推出,這一部分市場佔有率将會不出意料的在英特爾的掌控之中。

關于UEFI 

UEFI中圖形化的硬體設定界面Extensible Firmware Interface(EFI,可擴充固件接口)是 Intel 為全新類型的 PC 固件的體系結構、接口和服務提出的建議标準。其主要目的是為了提供一組在 OS 加載之前(啟動前)在所有平台上一緻的、正确指定的啟動服務,被看做是有近20多年曆史的PC BIOS的繼任者。

由于電腦教育普及,很多人都知道BIOS就是Basic Input/Output System,翻成中文是“基本輸入/輸出系統”,是一種所謂的“固件”,負責在開機時做硬體啟動和檢測等工作,并且擔任作業系統控制硬體時的中介角色。

然而,那些都是過去DOS 時代的事情,自從Windows NT出現,Linux 開始嶄露頭角後,這些作業系統已将過去需要通過BIOS完成的硬體控制程式放在作業系統中完成,不再需要調用BIOS功能。一般來說,當今所謂的“電腦高手”,多半是利用BIOS來對硬體性能做些超頻調校,除了專業人士外,鮮有人再利用 BIOS 進行底層工作。

因為硬體發展迅速,傳統式(Legacy)BIOS 成為進步的包袱,現在已發展出最新的EFI(Extensible Firmware Interface)可擴充固件接口,以現在傳統 BIOS 的觀點來說,未來将是一個“沒有特定 BIOS”的電腦時代。

UEFI是由EFI1.10為基礎發展起來的,它的所有者已不再是Intel,而是一個稱作Unified EFI Form(www.uefi.org)的國際組織,貢獻者有Intel,Microsoft,AMI,等幾個大廠,屬于open source,目前版本為2.1。與legacy BIOS 相比,最大的幾個差別在于:

1. 編碼99%都是由C語言完成; 

2. 一改之前的中斷、硬體端口操作的方法,而采用了Driver/protocal的新方式; 

3. 将不支援X86模式,而直接采用Flat mode(也就是不能用DOS了,現在有些 EFI 或 UEFI 能用是因為做了相容,但實際上這部分不屬于UEFI的定義了);

4. 輸出也不再是單純的二進制code,改為Removable Binary Drivers; 

5. OS啟動不再是調用Int19,而是直接利用protocol/device Path; 

6. 對于第三方的開發,前者基本上做不到,除非參與BIOS的設計,但是還要受到ROM的大小限制,而後者就便利多了。 

UEFI将是近3年的趨勢,到時候對于PC的利用以及維護都将步入一個新的時代。 

[編輯本段]UEFI結構 

uEFI概念根據UEFI概念圖的結構,我們将把uEFI概念劃為兩部分:uEFI的實體 (uEFI Image)跟平台初始化架構。 

uEFI的實體-uEFI Image(圖中藍框圍起部分) 

根據uEFI規範定義,uEFI Image包含三種:uEFI Applications, OS Loaders and uEFI Drivers。 

uEFI Applications是硬體初始化完,作業系統啟動之前的核心應用,比如:啟動管理、BIOS設定、uEFI Shell、診斷程式、排程和供應程式、調試應用...等等

OS Loaders是特殊的uEFI Application,主要功能是啟動作業系統并退出和關閉uEFI應用。 

uEFI Drivers是提供裝置間接口協定,每個裝置獨立運作提供裝置版本号和相應的參數以及裝置間關聯,不再需要基于作業系統的支援。 

啟動隊列 

平台初始化架構 

uEFI架構主要包含兩部分,一是PEI(EFI預初始化),另一部分是驅動執行環境 (DXE)。 

PEI主要是用來檢測啟動模式、加載主存儲器初始化子產品、檢測和加載驅動執行環境核心。 

DXE是裝置初始化的主要環節,它提供了裝置驅動和協定接口環境界面。

繼續閱讀