天天看點

MBR 的2TB限制



使用大于2T的塊裝置(MBR介紹)

       Linux在核心中選擇支援Large Block Device時,是可以使用大于2T的塊裝置的。但是當使用Fdisk來檢視這個塊裝置時,卻發現最大隻能顯示出來2T的空間,而且使用其他的分區工具時也很難使用大于2T的塊裝置。

Fdisk所使用的分區表為MBR,Master Boot Record,即主引導記錄。他是不屬于任何一個作業系統,也不能用作業系統提供的磁盤操作指令來讀取它。硬碟的0柱面、0磁頭、1扇區稱為主引導扇區,Fdisk将會寫512個位元組的記錄在此,即MBR記錄。啟動過程詳見How It Works : Master Boot Record (MBR),http://cang.baidu.com/lis/snap/2a0542a949b8e3b8ba4fb147.html。

MBR的組成

一個扇區的硬碟主引導記錄MBR由4個部分組成:

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

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

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

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

MBR的組成結構圖:

0000-0088

Master Boot Record 主引導程式

主引導程式

0089-01BD

出錯資訊資料區

資料區

01BE-01CD

分區項1(16位元組)

 

分區表

 

01CE-01DD

分區項2(16位元組)

01DE-01ED

分區項3(16位元組)

01EE-01FD

分區項4(16位元組)

01FE

55

結束标志

01FF

AA

MBR中的分區資訊結構

占用512個位元組的MBR中,偏移位址01BEH--01FDH的64個位元組,為4個分區項内容(分區資訊表)。它是由磁盤媒體類型及使用者在使用 FDISK定義分區說确定的。在實際應用中,FDISK對一個磁盤劃分的主分區可少于4個,但最多不超過4個。每個分區表的項目是16個位元組,其内容含義如下所示。

分區項表(16位元組)内容及含義

存貯位元組位

内容及含義

第1位元組

引導标志。若值為80H表示活動分區,若值為00H表示非活動分區。

第2、3、4位元組

本分區的起始磁頭号、扇區号、柱面号。其中:

磁頭号——第2位元組;

扇區号——第3位元組的低6位;

柱面号——為第3位元組高2位+第4位元組8位。

第5位元組

分區類型符。

00H——表示該分區未用(即沒有指定);

06H——FAT16基本分區;

0BH——FAT32基本分區;

05H——擴充分區;

07H——NTFS檔案系統;

0FH——(LBA模式)擴充分區(83H為Linux分區等)。

第6、7、8位元組

本分區的結束磁頭号、扇區号、柱面号。其中:

磁頭号——第6位元組;

扇區号——第7位元組的低6位;

柱面号——第7位元組的高2位+第8位元組。

第9、10、11、12位元組

本分區之前已用了的扇區數。

第13、14、15、16位元組

本分區的總扇區數。

從上述來看,在使用MBR時,最大的分區資料為4個。從分區資訊表的結構組成可以看到,一個分區的總扇區數是由4個位元組來代表的,那麼他所包含的最大扇區為2^(4*8)個,每個扇區為512位元組,即每個分區包含的最大位元組數為(2^32)*2^9=2^41 bytes,即2T。

其實這個限制在Fdisk和Parted等分區工具在定義磁盤的結構體時,也可以非常容易的看到。

fdisk:

struct pte {

struct partition *part_table;

struct partition *ext_pointer;

char changed;

unsigned int offset; <--限制在這裡

char *sectorbuffer;

} ptes[MAXIMUM_PARTS];

parted:

struct _DosRawPartition {

uint8_t boot_ind;

RawCHS chs_start;

uint8_t type;

RawCHS chs_end;

uint32_t start; <--限制

uint32_t length; <--限制

} __attribute__((packed));

由上可見,如果使用fdisk來分區的話,是不可能使用到大于2T的塊裝置的。這裡,就要引入GPT的概念。

在EFI規範中,一種突破傳統MBR磁盤分區結構限制的GUID磁盤分區系統(GPT)被引入。GUID 分區表 (GPT)是一種由基于 Itanium 計算機中的可擴充固件接口 (EFI) 使用的磁盤分區架構。與主啟動記錄 (MBR) 分區方法相比,GPT 具有更多的優點,因為它允許每個磁盤有多達 128 個分區,支援高達 18 EB位元組的卷大小,允許将主磁盤分區表和備份磁盤分區表用于備援,還支援唯一的磁盤和分區 ID (GUID)。

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

下面說一下如何使用GPT分區表。首先要在核心(需要64位的)中加入對EFI的支援(一般預設都加了),然後使用parted即可。

例:

parted /dev/cciss/c0d1

mklabel gpt

mkpart primary 0 7143487.601

quit

這樣就把/dev/cciss/c0d1使用gpt分區表,并且建立一個分區,分區大小約為7T。然後使用mkfs對/dev/cciss/c0d1p1進行建立檔案系統就可以使用了。

上述是針對Linux作業系統來做的相關操作,其實在其他系統上都是相似的,隻要改變塊裝置的分區表類型為GPT即可使用超過2T的塊裝置了

繼續閱讀