【Linux】MBR磁碟分割槽表只能有四個分割槽?

widiot1發表於2018-04-26

看《鳥哥的Linux私房菜》的時候,說是partition table只能有四個分割槽,想知道為什麼,以下參考自Wiki

第一個扇區

磁碟的第一個扇區(也可以叫做MBR,根據語境確定是第一個扇區還是主引導分割槽)記錄了整塊磁碟的重要資訊,是計算機開機後訪問磁碟時所必須要讀取的首個扇區。主要有三個部分:

  1. 主引導分割槽(Master Boot Record,MBR):主要作用是檢查分割槽表是否正確,並且在系統硬體完成自檢以後將控制權交給磁碟上的載入程式(如GNU,GRUB)
  2. 分割槽表(partition table):佔據64個位元組,可以對四個分割槽的資訊進行描述,其中每個分割槽的資訊佔據16個位元組
  3. 結束標誌字:0x55AA,最後兩個位元組,是檢驗主開機記錄是否有效的標誌

標準MBR結構如下:

地址 描述 長度(位元組)
0 程式碼區 440(最大446)
440 選用磁碟標誌 4
444 一般為空值; 0x0000 2
446 標準MBR分割槽表規劃(四個16 byte的主分割槽表入口) 64
511 MBR有效標誌:0x55AA 2

MBR總大小:446 + 64 + 2 = 512

分割槽表

由於每個分割槽資訊需要16個位元組,所以對於採用MBR型分割槽結構的磁碟,最多隻能識別4個主(primary)或擴充套件(extend)分割槽。擴充套件分割槽也是主要分割槽的一種,但它與主分割槽的不同在於理論上可以劃分為無數個邏輯分割槽

那為什麼每個分割槽資訊是16個位元組呢?這16個位元組又代表什麼呢?

因為這16個位元組中的每個位元組都表示了一種定義,具體每個位元組的定義可以參見磁碟分割槽結構資訊

偏移 長度(位元組) 意義
00H 1 分割槽狀態:00–>非活動分割槽;80–>活動分割槽;其它數值沒有意義
01H 1 分割槽起始磁頭號(HEAD),用到全部8位
02H 2 分割槽起始扇區號(SECTOR),佔據02H的位0-5;該分割槽的起始磁柱號(CYLINDER),佔據02H的位6-7和03H的全部8位
04H 1 檔案系統標誌位
05H 1 分割槽結束磁頭號(HEAD),用到全部8位
06H 2 分割槽結束扇區號(SECTOR),佔據06H的位0-5;該分割槽的結束磁柱號(CYLINDER),佔據06H的位6-7和07H的全部8位
08H 4 分割槽起始相對扇區號
0CH 4 分割槽總的扇區數

下面是一個例子,如果某一分割槽在磁碟分割槽表的資訊如下:

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

從中可以看到:

  1. 最前面的“80”是一個分割槽的啟用標誌,表示系統可引導;
  2. “01 01 00”表示分割槽開始的磁頭號為1,開始的扇區號為1,開始的柱面號為0;
  3. “0B”表示分割槽的系統型別是FAT32,其他比較常用的有04(FAT16)、07(NTFS);
  4. “FE BF FC”表示分割槽結束的磁頭號為254,分割槽結束的扇區號為63、分割槽結束的柱面號為764;
  5. “3F 00 00 00”表示首扇區的相對扇區號為63(小端序);
  6. “7E 86 BB 00”表示總扇區數為12289662(小端序)

主分割槽和擴充套件分割槽

磁碟中最多可以有4個Primary和Extended的扇區,而Extended只能有一個,如果要把磁碟分割槽成四個分割槽,那麼只能是:

P+P+P+P
或者
P+P+P+E

上面的情況中, 3P+E只有三個主分割槽可用,因為Extended不能被格式化作為資料訪問的分割槽,還需要進一步分割槽成邏輯分割槽。如果要四個都可用,就需要分割槽成4P

擴充套件分割槽中邏輯驅動器的引導記錄是鏈式的。每一個邏輯分割槽都有一個和MBR結構類似的擴充套件引導記錄(EBR),其分割槽表的第一項指向該邏輯分割槽本身的引導扇區,第二項指向下一個邏輯驅動器的EBR,分割槽表第三、第四項沒有用到

需要注意的問題:

  1. 主分割槽和擴充套件分割槽最多隻有四個
  2. 擴充套件分割槽最多隻能有一個
  3. 邏輯分割槽是由擴充套件分割槽持續切割出來的分割槽
  4. 只有主分割槽和邏輯分割槽才能被格式化作為資料訪問的分割槽
  5. Linux系統預設將前4個序號作為主分割槽或擴充套件分割槽,而邏輯分割槽的序號肯定從5開始

下圖來自Inside the Linux boot process,較為清晰的畫出了MBR中各個部分的結構

MBR

相關文章