使用大于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的塊裝置了