MBR與GPT

對很多PC的使用者來說,UEFI就像是一顆深水炸彈,表面風平浪靜,暗地裡卻早已引發了巨大的震動。多虧了Microsoft的強橫,預裝WIN8的電腦指定需要GPT分區這一舉措,讓人們不禁發出感慨:哦天哪,我的電腦里還有這東西?一些好學的人對GPT進行了解以後,進一步發現了我們的幕後功臣:UEFI。本期文章我們就來說說,硬碟和硬碟分區這點事。

簡單地說,硬碟分區是就使用分區編輯器(partition editor)將一個硬碟上劃分幾個獨立的邏輯部分,碟片一旦劃分成數個分區,不同類的目錄與文件可以存儲進不同的分區。越多分區,也就有更多不同的地方,可以將文件的性質區分得更細,按照更為細分的性質,存儲在不同的地方以管理文件;但太多分區就成了麻煩。

硬碟分區就像給一間空蕩的房子劃分出卧室,廚房,客廳等相互隔離的空間一樣。主要是為了方面用戶的使用。另一方面,通過合理的硬碟分區,有效保護系統盤空間,確實能夠提高系統運行速度,再者,硬碟分區也可以有效地對數據進行保護。你當然可以不分區,只不過,當你面對越來越多的子目錄,或者是越來越慢的Windows,不得不費功夫去管理你的文件,或者重裝Windows的時候,恐怕會悔不當初。 「不要把所有的雞蛋放在同一個籃子里」這句至理名言在經濟學以外的其他領域也同樣是句警世恆言。

在講解MBR之前,有必要講講機械硬碟的一些相關概念,畢竟MBR作為20世紀最棒的磁碟管理方式,與機械硬碟可是聯繫緊密的

(這樣可以更好地理解後面的內容)。

機械硬碟原理

機械硬碟由堅硬金屬材料製成的塗以磁性介質的碟片,碟片兩面稱為盤面或扇面,都可以記錄信息,由磁頭對盤面進行操作(如果你有壞的硬碟,可以動手拆開看。嗯?為什麼用壞的?用好的可能費錢……)一般用磁頭號區分。結構特性決定了機械硬碟如果受到劇烈衝擊(摔在地上或是勤奮的你想拆開學習),磁頭與盤面可能產生的哪怕是輕微撞擊都有可能報廢。

繼續講原理:假設磁頭不動,硬碟旋轉,那麼磁頭就會在磁碟表面畫出一個圓形軌跡並將之磁化,數據就保存在這些磁化區中,稱之為磁軌,將每個磁軌分段,一個弧段就是一個扇區。一個硬碟可以包含多個扇面,扇面同軸重疊放置,每個盤面磁軌數相同,具有相同周長的磁軌所形成的圓柱稱之為柱面,柱面數與磁軌數相等。如下圖

了解了這些,我們就可以對最初的硬碟地址管理方式作一個原理層面的了解:

最初的定址方式稱為CHS,在LBA(Logical Block Address)概念誕生之前,由他負責管理磁碟地址。所謂CHS即柱面(cylinder),磁頭(header),扇區(sector),通過這三個變數描述磁碟地址,需要明白的是,這裡表示的已不是物理地址而是邏輯地址了。這種方法也稱作是LARGE定址方式。該方法下:

硬碟容量=磁頭數×柱面數×扇區數×扇區大小(一般為512byte)。

後來,人們通過為每個扇區分配邏輯地址,以扇區為單位進行定址,也就有了LBA定址方式。但是為了保持與CHS模式的兼容,通過邏輯變換演算法,可以轉換為磁頭/柱面/扇區三種參數來表示,和 LARGE定址模式一樣,這裡的地址也是邏輯地址了。(固態硬碟的存儲原理雖然與機械硬碟不同,採用的是flash存儲,但仍然使用LBA進行管理,此處不再詳述。)

科普到這裡,我們可以試圖去理解MBR分區了。現在我們來看看MBR分區的技術原理。

MBR原理

MBR:Master Boot Record,主分區引導記錄。最早在1983年在IBM PC DOS 2.0中提出。前面說過,每個扇區/區塊都被分配了一個邏輯塊地址,即LBA,而引導扇區則是每個分區的第一扇區,而主引導扇區則是整個硬碟的第一扇區(主分區的第一個扇區)。MBR就保存在主引導扇區中。另外,這個扇區里還包含了硬碟分區表DPT(Disk Partition Table),和結束標誌字(Magic number)。扇區總計512位元組,MBR佔446位元組(0000H - 01BDH),DPT佔據64個位元組(01BEH - 01FDH),最後的magic number佔2位元組(01FEH – 01FFH)。

現在,我們來看一個MBR記錄的實例:

80 01 01 00, 0B FE BF FC, 3F 00 00 00, 7E 86 BB 00

其中, 「80」是一個分區的激活標誌,表示系統可引導;「01 01 00」表示分區開始的磁頭號為01,開始的扇區號為01,開始的柱面號為00;「0B」表示該分區的系統類型是FAT32,其他比較常用的有04(FAT16)、07(NTFS);「FE BF FC」表示分區結束的磁頭號為254,分區結束的扇區號為63、分區結束的柱面號為764;「3F 00 00 00」表示首扇區的相對扇區號為63;「7E 86 BB 00」表示總扇區數為12289622。

可以看到,在只分配64位元組給DPT的情況下,每個分區項分別佔用16個位元組,因此只能記錄四個分區信息,儘管後來為了支持更多的分區,引入了擴展分區及邏輯分區的概念。但每個分區項仍然用16個位元組存儲。能表示的最大扇區數為FF FF,FF FFH,因此可管理的最大空間=總扇區數*扇區大小(512byte),也就是2TB(由於硬碟製造商採用1:1000進行單位換算,因此也有2.2TB一說,別怪他們,他們不是程序員)。超過2TB以後的空間,不能分配地址,自然也就無法管理了。

MBR的諸多缺點使其應用大大受限。硬碟技術日新月異,硬碟容量突飛猛進(希捷將於今年開賣60TB 固態硬碟),多出來的硬碟空間總不能晾著吧,於是,在剛誕生的UEFI規範下一起研發了新技術

GPT原理

GPT分區:全稱為Globally Unique Identifier Partition Table,也叫做GUID分區表,它是UEFI 規範的一部分。由於硬碟容量的急速增長,MBR的2.2T容量難以滿足要求,而UEFI BIOS的推廣也為GPT的實現打下了堅實的技術基礎,GPT應運而生,

我們來看看GPT的結構圖:

等等,MBR是不是走錯片場了?答案當然是沒有。這裡的P意為protective,PMBR存在的意義就是,當不支持GPT的分區工具試圖對硬碟進行操作時(例如MS-DOS和Linux的fdisk程序),它可以根據這份PMBR以傳統方式啟動,過程和MBR+BIOS完全一致,極大地提高了兼容性。而支持GPT的系統在檢測PMBR後會直接跳到GPT表頭讀取分區表。和MBR類似,分區表中存儲了某個分區的起始和結束位置及其文件系統屬性信息,而分區才是實際存在的物理磁碟的一部分。

GPT HDR:GPT表頭,如下圖,主要定義了分區表中項目數及每項大小,還包含硬碟的容量信息。在64位的Windows Server 2003的機器上,最多可以創建128個分區,即分區表中保留了128個項,其中每個都是128位元組。(也是EFI標準中的最低要求:分區表最小要有16,384位元組)分區表頭還記錄了這塊硬碟的GUID,分區表頭位置(總是LBA1)和大小,也包含了備份分區表頭和分區表的位置和大小信息(LBA-1~LBA-34)。同時還儲存著它本身和分區表的CRC32校驗。固件、引導程序和操作系統在啟動時可以根據這個校驗值來判斷分區表是否出錯,如果出錯,可以使用軟體從硬碟最後的備份GPT中恢復整個分區表,如果備份GPT也校驗錯誤,硬碟將不可使用。具體內容如下表:

Partition Table:分區表,包含分區的類型GUID(如:EFI系統分區的GUID類型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}),名稱,起始終止位置,該分區的GUID以及分區屬性。其內容如下:

Microsoft對分區屬性做了更詳細的區分,目前有:

相較於MBR,GPT具有以下優點:

(1)得益於LBA提升至64位,以及分區表中每項128位設定,GPT可管理的空間近乎無限大,假設一個扇區大小仍為512位元組,可表示扇區數為,算下來,可管理的硬碟容量=18EB(1EB=1024PB=1,048,576TB),2T在它面前完全不在話下。按目前的硬碟技術來看,確實近乎無限,不過,以後的事誰知道呢。

(2)分區數量幾乎沒有限制,由於可在表頭中設置分區數量的大小,如果願意,設置個分區也可以(有人願意管理這麼多分區嗎),不過,目前windows僅支持最大128個分區。

(3)自帶保險,由於在磁碟的首尾部分各帶一個GPT表頭,任何一個受到破壞後都可以通過另一份恢復,極大地提高了磁碟的抗性(兩個一起壞的請出門買彩票)。

(4)循環冗餘檢驗值針對關鍵數據結構而計算,提高了數據崩潰的檢測幾率。

(5)儘管目前分區類型不超過百數(十數也沒有吧。),GPT仍提供了16位元組的GUID來標識分區類型,使其更不容易產生衝突。

(6)每個分區都可以擁有一個特別的名字,最長72位元組,足夠寫一首七律了。滿足你的各種奇葩起名需求。

完美支持UEFI,畢竟它就是UEFI規範的衍生品。在將來全行業UEFI的情境下,GPT必將更快淘汰MBR。

其他

接下來進入加料時間,更詳細的講述硬碟知識。

前面說到過,磁化的弧段稱作一個扇區,一個扇區大小512B,但硬碟在進行文件操作時並非以扇區為單位,而是——簇,「簇」是系統進行分配的最小單位,一個簇可以包含多個扇區,假設目前一個簇包含4個扇區,簇大小為2KB,一個文件大小恰為2KB,則佔用了簇的所有可用空間,即便你有一個1B大小的文件需要保存,那麼你佔用的空間也是一個簇,簇內其他空間不可讀寫。

而對簇的大小進行管理的就是文件系統:

FAT16/FAT32: 早期的MS-DOS和WIN95操作系統中最常見的硬碟分區格式。一個簇最小為512個位元組,其大小可以成倍增長,最大為32K,系統為每個簇分配唯一的索引號——一個16位二進位數來標識。因為16位二進位數最大為65536,所以FAT分區所擁有的簇的數量不可能超過65536個。這正是FAT分區大小不能超過2GB的原因。FAT16的繼任者——FAT32與其原理基本相同,相比前任優勢僅在於分區可以大於2GB,但不能存儲大於4GB的單個文件,看看現在一部BD的電影都要3,4個G,顯然不能滿足時代的需求,被淘汰的很快。

更多FAT文件系統知識:FAT文件系統與UEFI - 知乎專欄

NTFS文件系統相比FAT,最大優點在於支持文件加密,通過採用日誌式文件系統,詳細記錄磁碟的所有讀寫操作,提高了數據和系統的安全性,另一點則是突破了4GB大小限制。也是目前機械硬碟上的分區主流。不過對於目前越來越親民的的flash存儲,過多的操作記錄對存儲介質造成了較大的負擔,同樣的存取操作,NTFS下的讀寫次數就會比FAT32下來得多,造成了壽命較短的缺陷。因此針對移動存儲設備和固態硬碟,推出了exFAT文件系統。

exFAT:分區大小和單文件大小最大可達16EB(16×1024×1024TB);簇大小非 常靈活,最小512B,最高達32MB;採用了剩餘空間分配表,空間利用率更高;同一目錄下最大文件數可達65536個。其特性未必強於NTFS,主要是針對flash存儲設備進行了優化(SSD,U盤),傳統硬碟不能格式化為該格式。

要是到現在你對扇區,簇,文件系統,分區幾個名詞有點混淆,不妨看看下圖:

有人會問,圖中的怎麼突然出現了4k扇區,而且為什麼下面又包含的是8個512b的扇區呢?邊上的偽裝是啥意思?恭喜你,你已經抓住了近年來的硬碟發展潮流。

扇區的大小雖然約定俗成,但其實是可以更改的,開始於 2009 年晚期,硬碟製造商正在從傳統的 512 位元組扇區遷移到更大、更高效的 4096 位元組扇區,國際硬碟設備與材料協會(International Disk Drive Equipment and

Materials Association,IDEMA)將之稱為高級格式化,也就是現在常說的「4K扇區」。

多年來,硬碟行業一直採用512位元組扇區。然而,隨著硬碟容量的不斷增長,扇區大小日漸成為提高硬碟容量和糾錯效率方面的制約。扇區解析度(扇區大小和總存儲大小的百分比)越來越低,儘管在管理小型離散數據時,解析度越低越好。但現代的計算系統中多的是大型數據塊,一般遠比傳統 512 位元組扇區大小要大得多。另外,隨著區域密度的增加,小型 512 位元組扇區在硬碟表面上佔用的空間也將越來越小。硬碟扇區中的數據佔據的空間越小,錯誤糾正就會變得越困難,因為同樣大小的介質缺陷對總體數據負載損害的百分比更高,所以就需要更大的糾錯強度。現在,硬碟開始通過先進的區域密度來提高錯誤糾正的上限。因此,為了改善錯誤糾正和實現格式化效率,提高扇區大小是硬碟行業內的普遍訴求。

不過,由於計算機系統的緩慢發展,多數仍將扇區假定為512位元組,因此就產生了4K對齊問題。即使物理硬碟分區與計算機使用的邏輯分區對齊,保證硬碟讀寫效率。

有4k對齊當然就有4k對不齊。這個鍋,或許應該甩給操作系統。硬碟廠商為了保證與操作系統的兼容性,將新標準的"4K扇區"的硬碟模擬成扇區為512B的硬碟,問題出現在此時:當在一些特殊情況下格式化的系統(比如用ghost11.5以下版本),會默認定義為4096位元組大小為一個簇,這沒毛病,但是,由於其引導區只佔用了不多不少63個扇區,真正的文件系統在63號扇區之後,

我們可以算出前63個扇區大小為:63*512B = 32256B。

63個扇區佔用簇個數:32256B/4096B=7.875簇。

從第64個扇區開始,每個簇都會跨越兩個物理單元,佔據前一個單元的一小部分和後一個單元的一大部分,前面說過,系統文件操作以簇為單位,如果每個簇都要用到兩個扇區,勢必拖累讀寫速度。也就產生了「4k對不齊」的概念,「4K對齊」要做的事就是將硬碟的模擬扇區(512B)對齊到的8整數倍個「實際」4K扇區,即8*4096 = 32768B,使其正好跨過63扇區的特性,從第64個扇區對齊。

其實不僅是操作系統,一些廣泛使用的軟體程序也可能引發4k對不齊現象。因此,對齊技術的存在確有其必要性。儘管4k必然取代512b,但冰凍三尺非一日之寒,全行業仍需要一個時間來進行技術的全面推廣。

後記

一些經常被問到的關於GPT的問題:

1. Q:怎麼知道我的硬碟是MBR的還是GPT的?

A: windows自帶個非常好用的工具-diskpart,簡單幾條命令即可,如圖:

2. Q:如何將GPT轉換為MBR?

A: 還是diskpart,(警告:請先備份內容),通過convert mbr指令

不過我還是建議你不要這樣做,畢竟MBR是個被淘汰的技術。在轉換之前要刪除所有分區或者直接用clean。如果不想丟失內容,推薦使用AOMEI Partition Assistant Standard,它是個免費軟體。非常好用。為謹慎起見還是建議提前備份內容。

3. Q:GPT真好,我想立刻使用,可是如何將MBR轉換為GPT?

A:這是個好主意,答案還是Diskpart

在轉換之前要刪除所有分區或者直接用clean。如果不想丟失內容,我推薦使用AOMEI Partition Assistant Standard,它是個免費軟體。非常好用。為謹慎起見還是建議提前備份內容。

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!

用微信掃描二維碼加入UEFIBlog公眾號

推薦閱讀:

UEFI 固件更新
如何判斷我的電腦是否為通過UEFI模式啟動的?
uefi啟動全部過程是怎麼樣的?
UEFI 引導與 BIOS 引導在原理上有什麼區別?
Win10下固態硬碟與機械硬碟混搭應該採取GPT還是MBR?

TAG:UEFI | 电脑硬件 | 电脑知识 |