【Linux】MBR磁碟分割槽表只能有四個分割槽?
看《鳥哥的Linux私房菜》的時候,說是partition table只能有四個分割槽,想知道為什麼,以下參考自Wiki
1 第一個扇區
磁碟的第一個扇區(也可以叫做MBR,根據語境確定是第一個扇區還是主引導分割槽)記錄了整塊磁碟的重要資訊,是計算機開機後訪問磁碟時所必須要讀取的首個扇區。主要有三個部分:
- 主引導分割槽(Master Boot Record,MBR):主要作用是檢查分割槽表是否正確,並且在系統硬體完成自檢以後將控制權交給磁碟上的載入程式(如GNU,GRUB);
- 分割槽表(partition table):佔據64個位元組,可以對四個分割槽的資訊進行描述,其中每個分割槽的資訊佔據16個位元組;
- 結束標誌字:0x55AA,最後兩個位元組,是檢驗主開機記錄是否有效的標誌。
標準MBR結構如下:
地址 | 描述 | 長度(位元組) |
---|---|---|
0 | 程式碼區 | 440(最大446) |
440 | 選用磁碟標誌 | 4 |
444 | 一般為空值; 0x0000 | 2 |
446 | 標準MBR分割槽表規劃(四個16 byte的主分割槽表入口) | 64 |
511 | MBR有效標誌:0x55AA | 2 |
MBR總大小:446 + 64 + 2 = 512。
2 分割槽表
由於每個分割槽資訊需要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
從中可以看到:
- 最前面的“80”是一個分割槽的啟用標誌,表示系統可引導;
- “01 01 00”表示分割槽開始的磁頭號為1,開始的扇區號為1,開始的柱面號為0;
- “0B”表示分割槽的系統型別是FAT32,其他比較常用的有04(FAT16)、07(NTFS);
- “FE BF FC”表示分割槽結束的磁頭號為254,分割槽結束的扇區號為63、分割槽結束的柱面號為764;
- “3F 00 00 00”表示首扇區的相對扇區號為63(小端序);
- “7E 86 BB 00”表示總扇區數為12289662(小端序)
3 主分割槽和擴充套件分割槽
磁碟中最多可以有4個Primary和Extended的扇區,而Extended只能有一個,如果要把磁碟分割槽成四個分割槽,那麼只能是:
P+P+P+P
或者
P+P+P+E
上面的情況中, 3P+E只有三個主分割槽可用,因為Extended不能被格式化作為資料訪問的分割槽,還需要進一步分割槽成邏輯分割槽。如果要四個都可用,就需要分割槽成4P。
擴充套件分割槽中邏輯驅動器的引導記錄是鏈式的。每一個邏輯分割槽都有一個和MBR結構類似的擴充套件引導記錄(EBR),其分割槽表的第一項指向該邏輯分割槽本身的引導扇區,第二項指向下一個邏輯驅動器的EBR,分割槽表第三、第四項沒有用到。
需要注意的問題:
- 主分割槽和擴充套件分割槽最多隻有四個
- 擴充套件分割槽最多隻能有一個
- 邏輯分割槽是由擴充套件分割槽持續切割出來的分割槽
- 只有主分割槽和邏輯分割槽才能被格式化作為資料訪問的分割槽
- Linux系統預設將前4個序號作為主分割槽或擴充套件分割槽,而邏輯分割槽的序號肯定從5開始
下圖來自Inside the Linux boot process,較為清晰的畫出了MBR中各個部分的結構
相關文章
- Linux 磁碟與磁碟分割槽Linux
- 磁碟分割槽管理
- 磁碟分割槽表恢復原理
- oracle分割槽表和分割槽表exchangeOracle
- linux 磁碟分割槽掛載-fdiskLinux
- Linux 磁碟分割槽和掛載Linux
- Linux核心之磁碟和分割槽Linux
- linux 新增磁碟 分割槽掛載Linux
- Linux分割槽方案、分割槽建議Linux
- oracle分割槽表和非分割槽表exchangeOracle
- mbr分割槽能不能裝win10_mbr分割槽怎麼裝win10Win10
- Mac磁碟如何分割槽?教你Mac系統磁碟自由分割槽教程!Mac
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- linux新增新磁碟和建立分割槽Linux
- win10分割槽使用mbr好還是gpt好_win10系統gpt分割槽和mbr分割槽的區別Win10GPT
- 非分割槽錶轉換成分割槽表
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- PG的非分割槽表線上轉分割槽表
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 一文全懂:Linux磁碟分割槽Linux
- Linux磁碟分割槽及自動掛載Linux
- Linux下磁碟分割槽工具cfdisk的使用Linux
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- 【MYSQL】 分割槽表MySql
- linux硬碟分割槽Linux硬碟
- linux分割槽方案Linux
- Linux 新增LVM分割槽及LVM分割槽擴容LinuxLVM
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 在Linux中,如何格式化一個磁碟分割槽?Linux
- Linux磁碟分割槽瞭解多少?Linux入門必看Linux
- Linux 擴充套件磁碟分割槽(命令列操作)Linux套件命令列
- Virtualbox中Linux新增新磁碟並建立分割槽Linux
- Linux 磁碟分割槽及檔案系統管理Linux
- linux磁碟分割槽格式化-fdisk命令工具Linux
- Linux下的磁碟分割槽和邏輯卷Linux