1. 前言
最近公司的服務器硬盤壞了,需要換一個新的硬盤,容量是2TB,用的fdisk進行分區,期間搜索分區工具,看到了關於MBR(Master Boot Record)與GPT(GUID partition table)硬盤分區表的一些區別,其中說到MBR分區表最多只能管理2TB的容量,對此查了一下《鳥哥的私房菜》發現是簡化過的,並沒有解決疑惑,於是查了一些資料,總結如下。
2. 機械硬盤的結構
2.1. 基本結構
機械硬盤主要由磁盤盤片、磁頭(header)、主軸與傳動軸等組成,數據就存放在磁盤盤片中,實際圖片如下:
值得注意的是,硬盤是上下磁頭的,也就是一個盤片有兩個磁頭進行操作,如下圖所示:
2.2. 磁道、扇區和柱面
機械硬盤的邏輯結構主要分為磁道、扇區和柱面,如下圖所示:
什么是磁道(track)?每個盤片都在邏輯上有很多的同心圓,最外面的同心圓就是 0 磁道。我們將每個同心圓稱作磁道,硬盤的磁道密度非常高,通常一面上就有上千個磁道。但是相鄰的磁道之間並不是緊挨着的,這是因為磁化單元相隔太近會相互產生影響。
那扇區(sector)又是什么呢?扇區其實是很形象的,大家都見過折疊的紙扇吧,紙扇打開后是半圓形或扇形的,不過這個扇形是由每個扇骨組合形成的。在磁盤上每個同心圓是磁道,從圓心向外呈放射狀地產生分割線(扇骨),將每個磁道等分為若干弧段,每個弧段就是一個扇區。每個扇區的大小是固定的,為 512Byte。扇區也是磁盤的最小存儲單位。
柱面(cylinder)又是什么呢?如果硬盤是由多個盤片組成的,每個盤面都被划分為數目相等的磁道,那么所有盤片都會從外向內進行磁道編號,最外側的就是 0 磁道。具有相同編號的磁道會形成一個圓柱,這個圓柱就被稱作磁盤的柱面,如下圖所示。
硬盤的大小是使用"磁頭數 x 柱面數 x 扇區數 x 每個扇區的大小"這樣的公式來計算的。
3. MBR分區表的結構
MBR磁盤分區是一種使用最為廣泛的分區結構,它也被稱為DOS分區結構,但它並不僅僅應用於Windows系統平台,也應用於Linux,基於X86的UNIX等系統平台。它位於磁盤的0號扇區(一扇區等於512字節),是一個重要的扇區(簡稱MBR扇區)。
MBR扇區由以下幾個部分組成:
- 主要啟動記錄區(Master Boot Record, MBR):可以安裝開機管理程序的地方,有 446 bytes;
- 分區表(partition table):記錄整顆硬盤分區的狀態,有 64 bytes
- MBR結束標志:占MBR扇區最后2個字節,一直為“55 AA”
可以看到分區表只有64字節,最多只能有4個主分區或者3個主分區1個擴展分區。
那么每個分區表項占有16個字節,如果是記錄起始扇區id,也不止2T的容量啊。這就需要了解一下分區表的結構和硬盤的尋址方式了。
如下圖所示,為MBR分區表的詳細結構:
可以看到,這里使用了柱面(cylinder),磁頭(header),扇區(sector)三個變量進行尋址,這種尋址方式稱為CHS,這里表示的地址已經不是物理地址,而是邏輯地址了,又稱為LARGE尋址方式,在這種方式下,
硬盤容量=磁頭數×柱面數×扇區數×扇區大小(一般為512byte)
那如果磁頭數足夠多,豈不是可以管理無限的容量?答案當然是否定的,我們看到上表的最后兩項,如下圖所示:
可以看到兩個以4字節表示分區之前以及本分區的扇區數,也就是可以表示的最大扇區數為:
2^32=4294967296
而每個標准扇區的容量為512字節,於是能表示的最大容量為:
4294967296*512
=2199023255552Bytes(硬盤廠商采用1:1000進行單位換算,因此也有2.2TB一說)
=2147483648 KB
=2097152 MB
=2048 GB
=2TB
在網上還可以找到另外一個答案:
由於它(MBR)是為32位操作系統設計的,這就限制了它的尋址范圍為2的32次方個扇區……
其實這種說法是不嚴謹的,准確來說,MBR分區表最大最大能容納2T容量的主要原因,是因為分區表中的本分區表之前使用的扇區數以及分區的總扇區數這兩個字段為4字節,因此導致的限制。
盡管后來為了支持更多的分區,引入了擴展分區及邏輯分區的概念。但每個分區項仍然用16個字節存儲。
4. 參考
《鳥哥的linux私房菜》
(完)