這件事我已經(jīng)預(yù)謀很久了拱撵,然后我終于付出了行動拧略。雖然我現(xiàn)在把操作系統(tǒng)換成Ubuntu并不是件明智的事,但是我那顆Geek的心已經(jīng)等不了了李破。
這次操作系統(tǒng)分區(qū)我先是依照的《鳥哥的私房菜》分區(qū)的:
分區(qū)就和這張圖類似宠哄。之后就出現(xiàn)這個問題:
這我就很蒙了,我明明按照教程來的怎么能錯呢嗤攻?
還是百度大法好總毛嫉,我在這里找到了點啟示:http://forum.ubuntu.org.cn/viewtopic.php?t=465188
沒錯:我就是uefi開機,莫非和uefi開機有關(guān)系妇菱,尤其是那個繁體字的那幾句話還要gpt分區(qū)承粤,這又是個什么鬼。
好吧情急之下只能再次開啟百度大法闯团,我在這里找到了啟示:http://blog.163.com/yangz_ranma/blog/static/121054460201601912253287/
然后按照他的操作總算是把Ubuntu給裝上了
好吧辛臊,雖然把操作系統(tǒng)給裝上了但還是有諸多疑惑,于是我就又去《鳥哥的私房菜》來尋求答案了房交。
我們先來認識下硬盤的結(jié)構(gòu)如圖:
整個磁碟盤上頭好像有多個同心圓繪制出的圓形圖彻舰,而由圓心以放射狀的方式分割出磁碟的最小儲存單位,那就是磁區(qū)(Sector)候味, 在物理組成分面刃唤,每個磁區(qū)大小為512Bytes,這個值是不會改變的白群。而磁區(qū)組成一個圓就成為磁軌(track)尚胞, 如果是在多碟的硬盤上面,在所有磁碟盤上面的同一個磁軌可以組成一個磁柱(Cylinder)帜慢, 磁柱也是一般我們分割硬盤時的最小單位了笼裳!
硬盤這部分鳥哥是這么說的:
整個磁碟盤上頭好像有多個同心圓繪制出的圓形圖唯卖,而由圓心以放射狀的方式分割出磁碟的最小儲存單位,那就是扇區(qū)(Sector)侍咱, 在物理組成分面耐床,每個磁區(qū)大小為512Bytes,這個值是不會改變的楔脯。而磁區(qū)組成一個圓就成為磁道(track), 如果是在多碟的硬盤上面胯甩,在所有磁碟盤上面的同一個磁道可以組成一個柱面(Cylinder)昧廷, 磁柱也是一般我們分割硬盤時的最小單位了!
在計算整個硬盤的儲存量時偎箫,簡單的計算公式就是:『header數(shù)量 * 每個header負責的磁柱數(shù)量 * 每個磁柱所含有的磁區(qū)數(shù)量 * 磁區(qū)的容量』木柬,單位換算為『header * cylinder/header * secter/cylinder * 512bytes/secter』,簡單的寫法如下: Head x Cylinder x Sector x 512 Bytes淹办。 不過要注意的是眉枕,一般硬盤制造商在顯示硬盤的容量時,大多是以十進位來編號怜森,因此市售的500GB硬盤速挑, 理論上僅會有460GBytes左右的容量喔
注釋:Heads就是磁頭數(shù)
接下來我們談MBR分區(qū):
早期的 Linux 系統(tǒng)為了相容于 Windows 的磁盤,因此使用的是支持 Windows 的
MBR(Master Boot Record, 主要開機紀錄區(qū)) 的方式來處理開機管理程序與分區(qū)表!而開
機管理程序紀錄區(qū)與分區(qū)表則通通放在磁盤的第一個扇區(qū), 這個扇區(qū)通常是 512Bytes 的大
小 (舊的磁盤扇區(qū)都是 512Bytes 喔!),所以說,第一個扇區(qū) 512Bytes 會有這兩個數(shù)據(jù):
主要開機記錄區(qū)(Master Boot Record, MBR):可以安裝開機管理程序的地方,有446
Bytes
- 分區(qū)表(partition table):記錄整顆硬盤分區(qū)的狀態(tài),有64 Bytes
-
由于分區(qū)表所在區(qū)塊僅有64 Bytes容量,因此最多僅能有四組記錄區(qū),每組記錄區(qū)記錄了該區(qū)
段的啟始與結(jié)束的柱面號碼。 若將硬盤以長條形來看,然后將柱面以直條圖來看,那么那64
Bytes的記錄區(qū)段有點像下面的圖示:
Diskdivide.jpg
由于分區(qū)表就只有64 Bytes而已,最多只能容納四筆分區(qū)的記錄, 這四個分區(qū)的記錄被稱為
主要(Primary)或延伸(Extended)分區(qū)副硅。 根據(jù)上面的圖示與說明,我們可以得到幾個重
點信息: - 其實所謂的“分區(qū)”只是針對那個64 Bytes的分區(qū)表進行設(shè)置而已!
- 硬盤默認的分區(qū)表僅能寫入四組分區(qū)信息
- 這四組分區(qū)信息我們稱為主要(Primary)或延伸(Extended)分區(qū)
- 分區(qū)的最小單位“通忱驯Γ”為柱面(cylinder)
- 當系統(tǒng)要寫入磁盤時,一定會參考磁盤分區(qū)表,才能針對某個分區(qū)進行數(shù)據(jù)的處理
MBR邏輯分區(qū):
既然分區(qū)表只有記錄四組數(shù)據(jù)的空間,那么是否代表我一顆硬盤最多只能分區(qū)出四個分區(qū)?
當然不是啦!有經(jīng)驗的朋友都知道, 你可以將一顆硬盤分區(qū)成十個以上的分區(qū)的!那又是如
何達到的呢?在Windows/Linux系統(tǒng)中, 我們是通過剛剛談到的延伸分區(qū)(Extended)的方
式來處理的啦!延伸分區(qū)的想法是: 既然第一個扇區(qū)所在的分區(qū)表只能記錄四筆數(shù)據(jù), 那我
可否利用額外的扇區(qū)來記錄更多的分區(qū)信息?實際上圖示有點像下面這樣:
Tips 實際上延伸分區(qū)并不是只占一個區(qū)塊,而是會分佈在每個分區(qū)的最前面幾個扇區(qū)來記載
分區(qū)信息的!只是為了方便讀者記憶, 鳥哥在上圖就將他簡化了!有興趣的讀者可以到下面
的鏈接瞧一瞧實際延伸分區(qū)的紀錄方式: http://en.wikipedia.org/wiki/Extended_boot_record
在上圖當中,我們知道硬盤的四個分區(qū)記錄區(qū)僅使用到兩個,P1為主要分區(qū),而P2則為延伸
分區(qū)。請注意, 延伸分區(qū)的目的是使用額外的扇區(qū)來記錄分區(qū)信息,延伸分區(qū)本身并不能被
拿來格式化恐疲。 然后我們可以通過延伸分區(qū)所指向的那個區(qū)塊繼續(xù)作分區(qū)的記錄腊满。
如上圖右下方那個區(qū)塊有繼續(xù)分區(qū)出五個分區(qū), 這五個由延伸分區(qū)繼續(xù)切出來的分區(qū),就被
稱為邏輯分區(qū)(logical partition)。 同時注意一下,由于邏輯分區(qū)是由延伸分區(qū)繼續(xù)分區(qū)出
來的,所以他可以使用的柱面范圍就是延伸分區(qū)所設(shè)置的范圍喔! 也就是圖中的101~400
啦!
MBR 主要分區(qū)培己、延伸分區(qū)與邏輯分區(qū)的特性我們作個簡單的定義啰:
- 主要分區(qū)與延伸分區(qū)最多可以有四筆(硬盤的限制)
- 延伸分區(qū)最多只能有一個(操作系統(tǒng)的限制)
- 邏輯分區(qū)是由延伸分區(qū)持續(xù)切割出來的分區(qū);
- 能夠被格式化后,作為數(shù)據(jù)存取的分區(qū)為主要分區(qū)與邏輯分區(qū)碳蛋。延伸分區(qū)無法格式化;
- 邏輯分區(qū)的數(shù)量依操作系統(tǒng)而不同,在Linux系統(tǒng)中SATA硬盤已經(jīng)可以突破63個以上的
分區(qū)限制;
GPT分區(qū):
因為過去一個扇區(qū)大小就是 512Bytes 而已,不過目前已經(jīng)有 4K 的扇區(qū)設(shè)計出現(xiàn)!為了相容
于所有的磁盤,因此在扇區(qū)的定義上面, 大多會使用所謂的邏輯區(qū)塊位址(Logical Block
Address, LBA)來處理。GPT 將磁盤所有區(qū)塊以此 LBA(默認為 512Bytes 喔!) 來規(guī)劃,
而第一個 LBA 稱為 LBA0 (從 0 開始編號)省咨。
與 MBR 僅使用第一個 512Bytes 區(qū)塊來紀錄不同, GPT 使用了 34 個 LBA 區(qū)塊來紀錄分區(qū)
信息!同時與過去 MBR 僅有一的區(qū)塊,被干掉就死光光的情況不同, GPT 除了前面 34 個
LBA 之外,整個磁盤的最后 33 個 LBA 也拿來作為另一個備份!這樣或許會比較安全些吧!
詳細的結(jié)構(gòu)有點像下面的模樣:
- LBA0 (MBR 相容區(qū)塊)
與 MBR 模式相似的,這個相容區(qū)塊也分為兩個部份,一個就是跟之前 446 Bytes 相似的
區(qū)塊,儲存了第一階段的開機管理程序! 而在原本的分區(qū)表的紀錄區(qū)內(nèi),這個相容模式
僅放入一個特殊標志的分區(qū),用來表示此磁盤為 GPT 格式之意肃弟。而不懂 GPT 分區(qū)表的
磁盤管理程序, 就不會認識這顆磁盤,除非用戶有特別要求要處理這顆磁盤,否則該管
理軟件不能修改此分區(qū)信息,進一步保護了此磁盤喔! - LBA1 (GPT 表頭紀錄)
這個部份紀錄了分區(qū)表本身的位置與大小,同時紀錄了備份用的 GPT 分區(qū) (就是前面談
到的在最后 34 個 LBA 區(qū)塊) 放置的位置, 同時放置了分區(qū)表的檢驗機制碼
(CRC32),操作系統(tǒng)可以根據(jù)這個檢驗碼來判斷 GPT 是否正確。若有錯誤,還可以通
過這個紀錄區(qū)來取得備份的 GPT(磁盤最后的那個備份區(qū)塊) 來恢復(fù) GPT 的正常運
行! - LBA2-33 (實際紀錄分區(qū)信息處)
從 LBA2 區(qū)塊開始,每個 LBA 都可以紀錄 4 筆分區(qū)紀錄,所以在默認的情況下,總共可
以有 432 = 128 筆分區(qū)紀錄喔!因為每個 LBA 有 512Bytes,因此每筆紀錄用到 128
Bytes 的空間,除了每筆紀錄所需要的識別碼與相關(guān)的紀錄之外,GPT 在每筆紀錄中分
別提供了 64bits 來記載開始/結(jié)束的扇區(qū)號碼,因此,GPT 分區(qū)表對於單一分區(qū)來說,
他的最大容量限制就會在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意 1ZB=230TB
啦! 你說有沒有夠大了?
現(xiàn)在 GPT 分區(qū)默認可以提供多達 128 筆紀錄,而在 Linux 本身的核心設(shè)備紀錄中,針對單一
磁盤來說,雖然過去最多只能到達 15 個分區(qū),不過由于 Linux kernel 通過 udev 等方式的處
理,現(xiàn)在 Linux 也已經(jīng)沒有這個限制在了! 此外,GPT 分區(qū)已經(jīng)沒有所謂的主茸炒、延伸愕乎、邏輯
分區(qū)的概念,既然每筆紀錄都可以獨立存在, 當然每個都可以視為是主分區(qū)!每一個分區(qū)都
可以拿來格式化使用喔!
BIOS+MBR/GPT搭配啟動情況
在計算機概論里面我們有談到那個可愛的BIOS與CMOS兩個東西, CMOS是記錄各項硬件參
數(shù)且嵌入在主板上面的儲存器,BIOS則是一個寫入到主板上的一個固件(再次說明, 固件就
是寫入到硬件上的一個軟件程序)。這個BIOS就是在開機的時候,計算機系統(tǒng)會主動執(zhí)行的
第一個程序了!
接下來BIOS會去分析計算機里面有哪些儲存設(shè)備,我們以硬盤為例,BIOS會依據(jù)使用者的設(shè)
置去取得能夠開機的硬盤, 并且到該硬盤里面去讀取第一個扇區(qū)的MBR位置壁公。 MBR這個僅
有446 Bytes的硬盤容量里面會放置最基本的開機管理程序, 此時BIOS就功成圓滿,而接下
來就是MBR內(nèi)的開機管理程序的工作了感论。
這個開機管理程序的目的是在載入(load)核心文件, 由于開機管理程序是操作系統(tǒng)在安裝
的時候所提供的,所以他會認識硬盤內(nèi)的文件系統(tǒng)格式,因此就能夠讀取核心文件, 然后接
下來就是核心文件的工作,開機管理程序與 BIOS 也功成圓滿,將之后的工作就交給大家所
知道的操作系統(tǒng)啦!
簡單的說,整個開機流程到操作系統(tǒng)之前的動作應(yīng)該是這樣的:
- BIOS:開機主動執(zhí)行的固件,會認識第一個可開機的設(shè)備;
- MBR:第一個可開機設(shè)備的第一個扇區(qū)內(nèi)的主要開機記錄區(qū)塊,內(nèi)含開機管理程序;
- 開機管理程序(boot loader):一支可讀取核心文件來執(zhí)行的軟件;
- 核心文件:開始操作系統(tǒng)的功能...
第二點要注意,如果你的分區(qū)表為 GPT 格式的話,那么 BIOS 也能夠從 LBA0 的 MBR 相容
區(qū)塊讀取第一階段的開機管理程序碼, 如果你的開機管理程序能夠認識 GPT 的話,那么使用
BIOS 同樣可以讀取到正確的操作系統(tǒng)核心喔!換句話說, 如果開機管理程序不懂 GPT ,例
如 Windows XP 的環(huán)境,那自然就無法讀取核心文件,開機就失敗了!
第二點要注意,如果你的分區(qū)表為 GPT 格式的話,那么 BIOS 也能夠從 LBA0 的 MBR 相容
區(qū)塊讀取第一階段的開機管理程序碼, 如果你的開機管理程序能夠認識 GPT 的話,那么使用
BIOS 同樣可以讀取到正確的操作系統(tǒng)核心喔!換句話說, 如果開機管理程序不懂 GPT ,例
如 Windows XP 的環(huán)境,那自然就無法讀取核心文件,開機就失敗了!
UEFI+GPT搭配啟動情況:
我們現(xiàn)在知道 GPT 可以提供到 64bit 的尋址,然后也能夠使用較大的區(qū)塊來處理開機管理程
序。但是 BIOS 其實不懂 GPT 耶!還得要通過 GPT 提供相容模式才能夠讀寫這個磁盤設(shè)備
~而且 BIOS 僅為 16 位的程序,在與現(xiàn)階段新的操作系統(tǒng)接軌方面有點弱掉了! 為了解決這
個問題,因此就有了 UEFI (Unified Extensible Firmware Interface) 這個統(tǒng)一可延伸固件界
面的產(chǎn)生紊册。
UEFI 主要是想要取代 BIOS 這個固件界面,因此我們也稱 UEFI 為 UEFI BIOS 就是了比肄。
UEFI 使用 C 程序語言,比起使用組合語言的傳統(tǒng) BIOS 要更容易開發(fā)!也因為使用 C 語言
來撰寫,因此如果開發(fā)者夠厲害,甚至可以在 UEFI 開機階段就讓該系統(tǒng)了解 TCP/IP 而直接
上網(wǎng)! 根本不需要進入操作系統(tǒng)耶!這讓小型系統(tǒng)的開發(fā)充滿各式各樣的可能性!
另外,與 BIOS 模式相比,雖然 UEFI 可以直接取得 GPT 的分區(qū)表,不過最好依舊擁有
BIOS boot 的分區(qū)支持, 同時,為了與 windows 相容,并且提供其他第三方廠商所使用的
UEFI 應(yīng)用程序儲存的空間,你必須要格式化一個 vfat 的文件系統(tǒng), 大約提供 512MB 到 1G左右的容量,以讓其他 UEFI 執(zhí)行較為方便快耿。