(二)主機(jī)規(guī)劃與磁盤分區(qū) - 2.2 磁盤分區(qū)

2.2 磁盤分區(qū)

那Linux系統(tǒng)是安裝在計(jì)算機(jī)元件的磁盤中。
一塊磁盤是可以被分區(qū)成多個(gè)分區(qū)的(partition),以舊有的Windows觀點(diǎn)來(lái)看,你可能會(huì)有一顆磁盤并且將他分區(qū)成為C:, D:, E:盤對(duì)吧!那個(gè)C, D, E就是分區(qū)(partition)啰。但是Linux的設(shè)備都是以文件的型態(tài)存在,那分區(qū)的文件名又是什么? 如何進(jìn)行磁盤分區(qū)?磁盤分區(qū)有哪些限制?目前的 BIOS 與 UEFI分別是啥?MSDOS 與 GPT 又是啥?

2.2.1 磁盤連接的方式與設(shè)備文件名的關(guān)系

個(gè)人計(jì)算機(jī)常見(jiàn)的磁盤接口有兩種, 分別是SATA與SAS接口,目前(2015)的主流是SATA接口。不過(guò)更老舊的計(jì)算機(jī)則有可能是已經(jīng)不再流行的IDE界面喔!

正常的實(shí)體機(jī)器大概使用的都是 /dev/sd[a-] 的磁盤文件名,至于虛擬機(jī)環(huán)境下面,為了加速,可能就會(huì)使用 /dev/vd[a-p] 這種設(shè)備文件名。

再以SATA接口來(lái)說(shuō),由于SATA/USB/SAS等磁盤接口都是使用SCSI模塊來(lái)驅(qū)動(dòng)的, 因此這些接口的磁盤設(shè)備文件名都是/dev/sd[a-p]的格式。 所以SATA/USB接口的磁盤根本就沒(méi)有一定的順序,那如何決定他的設(shè)備文件名呢? 這個(gè)時(shí)候就得要根據(jù)Linux核心偵測(cè)到磁盤的順序了!

例題:如果你的PC上面有兩個(gè)SATA磁盤以及一個(gè)USB磁盤,而主板上面有六個(gè)SATA的插槽。這兩個(gè)SATA磁盤分別安插在主板上的SATA1, SATA5插槽上, 請(qǐng)問(wèn)這三個(gè)磁盤在Linux中的設(shè)備文件名為何?
答:由于是使用偵測(cè)到的順序來(lái)決定設(shè)備文件名,并非與實(shí)際插槽代號(hào)有關(guān),因此設(shè)備的文件名如下:

  1. SATA1插槽上的文件名:/dev/sda
  2. SATA5插槽上的文件名:/dev/sdb
  3. USB磁盤(開(kāi)機(jī)完成后才被系統(tǒng)捉到):/dev/sdc

因?yàn)槿绻愕拇疟P被分區(qū)成兩個(gè)分區(qū),那么每個(gè)分區(qū)的設(shè)備文件名又是什么?在了解這個(gè)問(wèn)題之前,我們先來(lái)復(fù)習(xí)一下磁盤的組成, 因?yàn)楝F(xiàn)今磁盤的分區(qū)與他物理的組成很有關(guān)系!

磁盤的組成主要有盤片、機(jī)械手臂、磁頭與主軸馬達(dá)所組成, 而數(shù)據(jù)的寫(xiě)入其實(shí)是在盤片上面。盤片上面又可細(xì)分出扇區(qū)(Sector)與磁道(Track)兩種單位,其中扇區(qū)的物理量設(shè)計(jì)有兩種大小,分別是 512Bytes 與 4KBytes。

盤片組成示意圖

整顆磁盤的第一個(gè)扇區(qū)特別的重要,因?yàn)樗涗浟苏w磁盤的重要信息! 早期磁盤第一個(gè)扇區(qū)里面含有的重要信息我們稱為MBR (Master Boot Record)格式,但是由于近年來(lái)磁盤的容量不斷擴(kuò)大,造成讀寫(xiě)上的一些困擾, 甚至有些大于 2TB 以上的磁盤分區(qū)已經(jīng)讓某些操作系統(tǒng)無(wú)法存取。因此后來(lái)又多了一個(gè)新的磁盤分區(qū)格式,稱為GPT (GUID partition table)!

那么分區(qū)表又是啥?其實(shí)你剛剛拿到的整顆硬盤就像一根原木,你必須要在這根原木上面切割出你想要的區(qū)段, 這個(gè)區(qū)段才能夠再制作成為你想要的家具!如果沒(méi)有進(jìn)行切割,那么原木就不能被有效的使用。 同樣的道理,你必須要針對(duì)你的硬盤進(jìn)行分區(qū),這樣硬盤才可以被你使用!

2.2.2 MSDOS(MBR) 與 GPT 磁盤分區(qū)表(partition table)

柱面

在前一小節(jié)的圖示中, 我們有看到“開(kāi)始與結(jié)束磁道”吧?而通常磁盤可能有多個(gè)盤片,所有盤片的同一個(gè)磁道我們稱為柱面 (Cylinder), 通常那是文件系統(tǒng)的最小單位,也就是分區(qū)的最小單位啦!為什么說(shuō)“通?!蹦??因?yàn)榻鼇?lái)有 GPT 這個(gè)可達(dá)到 64bit 紀(jì)錄功能的分區(qū)表, 現(xiàn)在我們甚至可以使用扇區(qū) (sector) 號(hào)碼來(lái)作為分區(qū)單位哩!厲害了! 所以說(shuō),我們就是利用參考對(duì)照柱面或扇區(qū)號(hào)碼的方式來(lái)處理!也就是說(shuō),分區(qū)表其實(shí)目前有兩種格式!

? MSDOS (MBR) 分區(qū)表格式與限制
早期的 Linux 系統(tǒng)為了相容于 Windows 的磁盤,因此使用的是支持 Windows 的MBR(Master Boot Record, 主要開(kāi)機(jī)紀(jì)錄區(qū)) 的方式來(lái)處理開(kāi)機(jī)管理程序與分區(qū)表!而開(kāi)機(jī)管理程序紀(jì)錄區(qū)與分區(qū)表則通通放在磁盤的第一個(gè)扇區(qū), 這個(gè)扇區(qū)通常是 512Bytes 的大小 (舊的磁盤扇區(qū)都是 512Bytes 喔?。?,
所以說(shuō),第一個(gè)扇區(qū) 512Bytes 會(huì)有這兩個(gè)數(shù)據(jù):

  • 主要開(kāi)機(jī)記錄區(qū)(Master Boot Record, MBR):可以安裝開(kāi)機(jī)管理程序的地方,有446Bytes
  • 分區(qū)表(partition table):記錄整顆硬盤分區(qū)的狀態(tài),有64 Bytes

由于分區(qū)表所在區(qū)塊僅有64 Bytes容量,因此最多僅能有四組記錄區(qū),每組記錄區(qū)記錄了該區(qū)段的啟始與結(jié)束的柱面號(hào)碼。 若將硬盤以長(zhǎng)條形來(lái)看,然后將柱面以直條圖來(lái)看,那么那64Bytes的記錄區(qū)段有點(diǎn)像下面的圖示:

磁盤分區(qū)表的作用示意圖

假設(shè)上面的硬盤設(shè)備文件名為/dev/sda時(shí),那么這四個(gè)分區(qū)在Linux系統(tǒng)中的設(shè)備文件名如下所示, 重點(diǎn)在于文件名后面會(huì)再接一個(gè)數(shù)字,這個(gè)數(shù)字與該分區(qū)所在的位置有關(guān)喔!

P1:/dev/sda1
P2:/dev/sda2
P3:/dev/sda3
P4:/dev/sda4

上圖中我們假設(shè)硬盤只有400個(gè)柱面,共分區(qū)成為四個(gè)分區(qū),第四個(gè)分區(qū)所在為第301到400號(hào)柱面的范圍。 當(dāng)你的操作系統(tǒng)為Windows時(shí),那么第一到第四個(gè)分區(qū)的代號(hào)應(yīng)該就是C, D, E, F。當(dāng)你有數(shù)據(jù)要寫(xiě)入F盤時(shí), 你的數(shù)據(jù)會(huì)被寫(xiě)入這顆磁盤的301~400號(hào)柱面之間的意思。

分區(qū)表就只有64 Bytes而已,最多只能容納四筆分區(qū)的記錄, 這四個(gè)分區(qū)的記錄被稱為主要(Primary)分區(qū)延伸(Extended)分區(qū)。 根據(jù)上面的圖示與說(shuō)明,我們可以得到幾個(gè)重點(diǎn)信息:

  • 其實(shí)所謂的“分區(qū)”只是針對(duì)那個(gè)64 Bytes的分區(qū)表進(jìn)行設(shè)置而已!
  • 硬盤默認(rèn)的分區(qū)表僅能寫(xiě)入四組分區(qū)信息
  • 這四組分區(qū)信息我們稱為主要(Primary)或延伸(Extended)分區(qū)
  • 分區(qū)的最小單位“通?!睘橹妫╟ylinder)
  • 當(dāng)系統(tǒng)要寫(xiě)入磁盤時(shí),一定會(huì)參考磁盤分區(qū)表,才能針對(duì)某個(gè)分區(qū)進(jìn)行數(shù)據(jù)的處理

你可以這樣思考分區(qū)的角度:

  • 數(shù)據(jù)的安全性: 因?yàn)槊總€(gè)分區(qū)的數(shù)據(jù)是分開(kāi)的!所以,當(dāng)你需要將某個(gè)分區(qū)的數(shù)據(jù)重整時(shí),例如你要將計(jì)算機(jī)中Windows的C 盤重新安裝一次系統(tǒng)時(shí), 可以將其他重要數(shù)據(jù)移動(dòng)到其他分區(qū),例如將郵件、桌面數(shù)據(jù)移動(dòng)到D 盤去,那么C 盤重灌系統(tǒng)并不會(huì)影響到D盤! 所以善用分區(qū),可以讓你的數(shù)據(jù)更安全。
  • 系統(tǒng)的性能考慮: 由于分區(qū)將數(shù)據(jù)集中在某個(gè)柱面的區(qū)段,例如上圖當(dāng)中第一個(gè)分區(qū)位于柱面號(hào)碼1~100號(hào),如此一來(lái)當(dāng)有數(shù)據(jù)要讀取自該分區(qū)時(shí), 磁盤只會(huì)搜尋前面1~100的柱面范圍,由于數(shù)據(jù)集中了,將有助于數(shù)據(jù)讀取的速度與性能!所以說(shuō),分區(qū)是很重要的!

既然分區(qū)表只有記錄四組數(shù)據(jù)的空間,那么是否代表我一顆硬盤最多只能分區(qū)出四個(gè)分區(qū)?當(dāng)然不是啦!有經(jīng)驗(yàn)的朋友都知道, 你可以將一顆硬盤分區(qū)成十個(gè)以上的分區(qū)的!那又是如何達(dá)到的呢?在Windows/Linux系統(tǒng)中, 我們是通過(guò)剛剛談到的延伸分區(qū)(Extended)的方式來(lái)處理的啦!延伸分區(qū)的想法是: 既然第一個(gè)扇區(qū)所在的分區(qū)表只能記錄四筆數(shù)據(jù), 那我可否利用額外的扇區(qū)來(lái)記錄更多的分區(qū)信息?

磁盤分區(qū)表的作用示意圖

在上圖當(dāng)中,我們知道硬盤的四個(gè)分區(qū)記錄區(qū)僅使用到兩個(gè),P1為主要分區(qū),而P2則為延伸分區(qū)。請(qǐng)注意, 延伸分區(qū)的目的是使用額外的扇區(qū)來(lái)記錄分區(qū)信息,延伸分區(qū)本身并不能被拿來(lái)格式化。 然后我們可以通過(guò)延伸分區(qū)所指向的那個(gè)區(qū)塊繼續(xù)作分區(qū)的記錄。

如上圖右下方那個(gè)區(qū)塊有繼續(xù)分區(qū)出五個(gè)分區(qū), 這五個(gè)由延伸分區(qū)繼續(xù)切出來(lái)的分區(qū),就被稱為邏輯分區(qū)(logical partition)。 同時(shí)注意一下,由于邏輯分區(qū)是由延伸分區(qū)繼續(xù)分區(qū)出來(lái)的,所以他可以使用的柱面范圍就是延伸分區(qū)所設(shè)置的范圍喔! 也就是圖中的101~400啦!
同樣的,上述的分區(qū)在Linux系統(tǒng)中的設(shè)備文件名分別如下:
P1:/dev/sda1
P2:/dev/sda2
L1:/dev/sda5
L2:/dev/sda6
L3:/dev/sda7
L4:/dev/sda8
L5:/dev/sda9

怎么設(shè)備文件名沒(méi)有/dev/sda3與/dev/sda4呢?因?yàn)?strong>前面四個(gè)號(hào)碼都是保留給Primary或Extended用的! 所以邏輯分區(qū)的設(shè)備名稱號(hào)碼就由5號(hào)開(kāi)始了!這在 MBR 方式的分區(qū)表中是個(gè)很重要的特性,不能忘記!

MBR 主要分區(qū)、延伸分區(qū)與邏輯分區(qū)的特性我們作個(gè)簡(jiǎn)單的定義:

  • 主要分區(qū)與延伸分區(qū)最多可以有四筆(硬盤的限制)
  • 延伸分區(qū)最多只能有一個(gè)(操作系統(tǒng)的限制)
  • 邏輯分區(qū)是由延伸分區(qū)持續(xù)切割出來(lái)的分區(qū);
  • 能夠被格式化后,作為數(shù)據(jù)存取的分區(qū)為主要分區(qū)與邏輯分區(qū)。延伸分區(qū)無(wú)法格式化;
  • 邏輯分區(qū)的數(shù)量依操作系統(tǒng)而不同,在Linux系統(tǒng)中SATA硬盤已經(jīng)可以突破63個(gè)以上的分區(qū)限制;

事實(shí)上,分區(qū)是個(gè)很麻煩的東西,因?yàn)樗且灾鏋閱挝坏摹斑B續(xù)”磁盤空間, 且延伸分區(qū)又是個(gè)類似獨(dú)立的磁盤空間,所以在分區(qū)的時(shí)候得要特別注意。

? 例題:
在Windows操作系統(tǒng)當(dāng)中,如果你想要將D與E盤整合成為一個(gè)新的分區(qū),而如果有兩種分區(qū)的情況如下圖所示, 圖中的特殊顏色區(qū)塊為D與E盤的示意,請(qǐng)問(wèn)這兩種方式是否均可將D與E整合成為一個(gè)新的分區(qū)?

磁盤空間整合示意圖

答:

  • 上圖可以整合:D與E同屬于延伸分區(qū)內(nèi)的邏輯分區(qū),因此只要將兩個(gè)分區(qū)刪除,然后再重新創(chuàng)建一個(gè)新的分區(qū),就能夠在不影響其他分區(qū)的情況下,將兩個(gè)分區(qū)的容量合成為一個(gè)。
  • 下圖不可整合:D與E分屬主區(qū)與邏輯分區(qū),兩者不能夠整合在一起。除非將延伸分區(qū)破壞掉后再重新分區(qū)。但會(huì)影響到所有的邏輯分區(qū),要注意的是:如果延伸分區(qū)被破壞,所有邏輯分區(qū)將會(huì)被刪除。因?yàn)檫壿嫹謪^(qū)的信息都記錄再延伸分區(qū)里面。

由于第一個(gè)扇區(qū)所記錄的分區(qū)表與MBR很重要,幾乎只要讀取硬盤都會(huì)由這個(gè)扇區(qū)先讀起。因此,如果整個(gè)硬盤的第一個(gè)扇區(qū)(就是MBR與partition table所在的扇區(qū))物理實(shí)體壞掉了,硬盤大概就沒(méi)有用了。

? 例題:
如果我想將一顆大硬盤“暫時(shí)”分區(qū)成為四個(gè)partitions,同時(shí)還有其他的剩余容量可以讓我在未來(lái)的時(shí)候進(jìn)行規(guī)劃, 我能不能分區(qū)出四個(gè)Primary?若不行,那么你建議該如何分區(qū)?

答:

  • 由于Primary+Extended最多只能由四個(gè),其中Extended最多只能有一個(gè),因此P+P+P+P的分區(qū)方式是不適合的。因?yàn)槭褂玫?個(gè)P,即使硬盤還有剩余容量,因?yàn)闊o(wú)法再繼續(xù)分區(qū),所以剩余容量就被浪費(fèi)掉了。
  • 假設(shè)想將所有四個(gè)分區(qū)記錄都用上,那么P+P+P+E是比較適合的。所以可以用的4個(gè)partitions有3個(gè)主要及1個(gè)邏輯分區(qū),剩余的容量在延伸分區(qū)中。
  • 如果要分區(qū)超過(guò)4個(gè)以上,一定要有Extended分區(qū),而且必須將所有剩下的空間都分配給Extended,然后再以logical的分區(qū)來(lái)規(guī)劃Extended的空間。另外,考慮到磁盤的連續(xù)性,一般建議將Extended的柱面號(hào)碼分配在最后面的柱面內(nèi)。

? 例題:
假如我的PC有兩顆SATA硬盤,我想在第二顆硬盤分區(qū)出6個(gè)可用的分區(qū)(可以被格式化來(lái)存取數(shù)據(jù)之用), 那每個(gè)分區(qū)在Linux系統(tǒng)下的設(shè)備文件名為何?且分區(qū)類型各為何?至少寫(xiě)出兩種不同的分區(qū)方式。

答:
由于P(Primary) + E(Extended)最多只能有四個(gè),其中E最多只能有一個(gè)。需要分6個(gè)分區(qū)則不能分出4個(gè)P。
假設(shè)兩種環(huán)境:

  • P+P+P+E的環(huán)境
分區(qū)示意圖

示意圖中可用的是 /dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb4, /dev/sdb5, /dev/sdb6, /dev/sdb7, 至于/dev/sdb4這個(gè)延伸分區(qū)本身僅是提供來(lái)給邏輯分區(qū)創(chuàng)建之用。

  • P+E的環(huán)境
分區(qū)示意圖

1~4號(hào)是保留給主要/延伸分區(qū)的,因此第一個(gè)邏輯分區(qū)一定是由5號(hào)開(kāi)始的! 所以/dev/sdb3, /dev/sdb4 就會(huì)保留下來(lái)沒(méi)有用到。

MBR分區(qū)表除了上述的主分區(qū)、延伸分區(qū)、邏輯分區(qū)需要注意之外,由于每組分區(qū)表僅有16Bytes而已,因此可記錄的信息是相當(dāng)有限的!所以,在過(guò)去MBR分區(qū)表的限制中經(jīng)常發(fā)現(xiàn)以下問(wèn)題:

  • 操作系統(tǒng)無(wú)法抓取到2.2T以上的磁盤容量
  • MBR僅有一個(gè)區(qū)塊,若被破壞后,經(jīng)常無(wú)法活很難救援
  • MBR內(nèi)的存放開(kāi)機(jī)管理程序的區(qū)塊僅446Bytes,無(wú)法容納較多的程序碼

早期2.2TB限制現(xiàn)象不是很嚴(yán)重,但是目前單一磁盤容量甚至高達(dá)8TB,或者用多顆磁盤搭建出磁盤陣列,可高達(dá)70TB甚至更大,如果使用MBR分割就得2TB/2TB的分割下去,這樣分區(qū)會(huì)很繁瑣。為了解決這個(gè)問(wèn)題,后來(lái)就有了GPT這個(gè)磁盤分區(qū)格式的出現(xiàn)。

? GUID partition table, GPT 磁盤分區(qū)表

過(guò)去一個(gè)扇區(qū)大小就是512Bytes,不過(guò)目前已經(jīng)有4K的扇區(qū)設(shè)計(jì)出現(xiàn)!為了相容于所有的磁盤,因此在扇區(qū)的定義上面,大多會(huì)使用所謂的邏輯區(qū)塊位址(Logical Block, Address, LBA)來(lái)處理。GPT將磁盤所有區(qū)塊以此LBA(默認(rèn)為512Bytes)來(lái)規(guī)劃,而第一個(gè)LBA成為L(zhǎng)BA0(從0開(kāi)始編號(hào))。
與MBR僅使用第一個(gè)512Bytes區(qū)塊來(lái)記錄分區(qū)信息相比,GPT使用34個(gè)LBA區(qū)塊來(lái)記錄分區(qū)信息!同時(shí),GPT除了前面34個(gè)LBA之外,整個(gè)磁盤最后33個(gè)LBA也拿來(lái)作為另一個(gè)備份!

GPT分區(qū)表的結(jié)構(gòu)示意圖
  • LBA0(MBR相容區(qū)塊)
    與MBR模式相似,相容區(qū)塊也分為兩個(gè)部分,一個(gè)就是跟之前446Bytes相似的區(qū)塊,存儲(chǔ)了第一階段的開(kāi)機(jī)管理程序!而在原本的分區(qū)表的記錄區(qū)內(nèi),這個(gè)相容模式僅放入一個(gè)特殊標(biāo)志的分區(qū),用來(lái)表示此磁盤為GPT格式之意。而不動(dòng)GPT分區(qū)表的磁盤管理程序,就不會(huì)認(rèn)識(shí)這顆磁盤,除非用戶有特別要求要處理這顆磁盤,否則該管理軟件不能修改此分區(qū)信息,進(jìn)一步保護(hù)此磁盤。

  • LBA1(GPT表頭記錄)
    這個(gè)部分記錄了分區(qū)表本身的位置與大小,同時(shí)記錄了備份用的GPT分區(qū)(就是磁盤最后的34個(gè)LBA區(qū)塊)放置的未知,同時(shí)放置了分區(qū)表的檢驗(yàn)機(jī)制碼(CRC32),操作系統(tǒng)可以根據(jù)這個(gè)檢驗(yàn)碼來(lái)判斷GPT是否正確。若有錯(cuò)誤,還可以通過(guò)這個(gè)記錄區(qū)來(lái)取得備份的GPT(磁盤最后的備份區(qū)塊)來(lái)恢復(fù)GPT的正常運(yùn)行!

  • LBA2-33(實(shí)際記錄分區(qū)信息處)
    從LBA2區(qū)塊開(kāi)始,每個(gè)LBA可以記錄4筆分區(qū)記錄,所以默認(rèn)情況下,總共可以有432 = 128筆分區(qū)記錄。因?yàn)槊總€(gè)LBA有512Bytes,因此每筆記錄用到128Bytes的空間,除了每筆記錄所需要的識(shí)別碼與相關(guān)的記錄之外,GPT在每筆記錄中分別提供了64bits來(lái)記載開(kāi)始/結(jié)束的扇區(qū)號(hào)碼,因此,GPT分區(qū)表對(duì)于單一分區(qū)來(lái)說(shuō),他的最大容量限制就在“264 512Bytes = 263 1KBytes = 233TB = 8ZB”(1ZB = 230TB)。
    現(xiàn)在GPT分區(qū)默認(rèn)可提供多達(dá)128筆記錄,而在Linux本身的核心設(shè)備記錄中,針對(duì)單一磁盤來(lái)說(shuō),雖然過(guò)去最多只能達(dá)到15個(gè)分區(qū),不過(guò)由于 Linux kernel 通過(guò) udev 等方式的處理,現(xiàn)在LInux也沒(méi)有這個(gè)限制在了!此外,GPT分區(qū)已沒(méi)有所謂的主、延伸、邏輯分區(qū)的概念,既然每筆記錄都可以獨(dú)立存在,所以每個(gè)都可以視為是主分區(qū)!每一個(gè)分區(qū)都可以拿來(lái)格式化使用。

server常常需要比較大容量的磁盤,新版的Linux大多認(rèn)識(shí)了GPT分區(qū)表。不過(guò),老牌的fdisk磁盤管理工具并不認(rèn)識(shí)GPT,要使用GPT,要操作類似gdisk或者是parted指令才行。另外,開(kāi)機(jī)管理程序方面,grub第一版并不認(rèn)識(shí)GPT,得要grub2以后才會(huì)認(rèn)識(shí)。

并不是所有操作系統(tǒng)可以讀取到GPT磁盤分區(qū)格式,同時(shí)也不是所有硬件都可以支持GPT格式。是否能夠讀寫(xiě)GPT格式又與開(kāi)機(jī)檢測(cè)程序(BIOSUEFI)有關(guān)。

2.2.3 開(kāi)機(jī)流程中的 BIOS 與 UEFI 開(kāi)機(jī)檢測(cè)程序

主機(jī)系統(tǒng)在嵌入硬件驅(qū)動(dòng)方面的程序,主要有早期的BIOS與新的UEFI兩種機(jī)制

? BIOS搭配MBR/GPT的開(kāi)機(jī)流程

BIOS與CMOS,CMOS是記錄各項(xiàng)硬件參數(shù)且嵌入在主板上面的存儲(chǔ)器,BIOS則是一個(gè)寫(xiě)入到主板上的一個(gè)固件(固件就是寫(xiě)入到硬件上的一個(gè)軟件程序)。BIOS就是開(kāi)機(jī)適合,計(jì)算機(jī)系統(tǒng)會(huì)主動(dòng)執(zhí)行的第一個(gè)程序!
BIOS會(huì)分析計(jì)算機(jī)里面有哪些存儲(chǔ)設(shè)備,以硬盤為例,BIOS會(huì)依據(jù)使用者的設(shè)置去取得能夠開(kāi)機(jī)的硬盤,并去讀取硬盤里第一個(gè)扇區(qū)的MBR未知。MBR這個(gè)僅有446Bytes的硬盤容量里面會(huì)放置最基本的開(kāi)機(jī)管理程序,此時(shí)BIOS就功成圓滿,接下來(lái)就是MBR內(nèi)開(kāi)機(jī)管理程序的工作了。

這個(gè)開(kāi)機(jī)管理程序的目的是在載入(load)核心文件,由于開(kāi)機(jī)管理程序是操作系統(tǒng)在安裝時(shí)候提供的,所以會(huì)認(rèn)識(shí)硬盤內(nèi)的文件系統(tǒng)格式,因此能夠讀取核心文件,接下來(lái)就是核心文件的工作,開(kāi)機(jī)管理程序與BIOS也功成圓滿,之后的工作就交給操作系統(tǒng)。

整個(gè)開(kāi)機(jī)流程到操作系統(tǒng)之前的動(dòng)作應(yīng)該是這樣的:

  1. BIOS:開(kāi)機(jī)主動(dòng)執(zhí)行的固件,會(huì)認(rèn)識(shí)第一個(gè)可開(kāi)機(jī)設(shè)備;
  2. MBR:第一個(gè)可開(kāi)機(jī)設(shè)備的第一個(gè)扇區(qū)內(nèi)的主要開(kāi)機(jī)記錄區(qū)塊,內(nèi)含開(kāi)機(jī)管理程序;
  3. 開(kāi)機(jī)管理程序(boot loader):一支可讀取核心文件來(lái)執(zhí)行的軟件;
  4. 核心文件:開(kāi)始操作系統(tǒng)的功能 ... ...

如果分區(qū)表為GPT格式,BIOS也能從LBA0的MBR相容區(qū)塊讀取第一階段的開(kāi)機(jī)管理程序碼,那么BIOS同樣可以讀取到正確的操作系統(tǒng)核心(當(dāng)然前提是開(kāi)機(jī)管理程序能夠認(rèn)識(shí)GPT,比如Windows XP 就無(wú)法識(shí)別GPT格式)。

GPT中LBA0僅提供第一階段的開(kāi)機(jī)管理程序碼,因此如果使用類似grub的開(kāi)機(jī)管理程序,那么就得額外分區(qū)出一個(gè)“BIOS boot”分區(qū)來(lái)放置其他開(kāi)機(jī)過(guò)程所需的程序碼。在CentOS中,這個(gè)分區(qū)通常占用2MB左右。

BIOS與MBR都是硬件本身會(huì)支持的功能,Boot loader則是操作系統(tǒng)安裝在MBR上面的一套軟件。MBR僅有446Bytes,因此這個(gè)開(kāi)機(jī)管理程序是非常小而美的。boot loader主要任務(wù)有:

  1. 提供菜單:使用者可以選擇不同的開(kāi)機(jī)項(xiàng)目,這也是多重開(kāi)機(jī)的重要功能!
  2. 載入核心文件:直接指向可開(kāi)機(jī)的程序區(qū)段來(lái)開(kāi)始操作系統(tǒng);
  3. 轉(zhuǎn)交其他loader:將開(kāi)機(jī)管理功能轉(zhuǎn)交給其他loader負(fù)責(zé)。

計(jì)算機(jī)系統(tǒng)可能具有兩個(gè)以上的開(kāi)機(jī)管理程序!硬盤只有一個(gè)MBR,但是開(kāi)機(jī)管理程序除了可以安裝在MBR,還可以安裝在每個(gè)分區(qū)的開(kāi)機(jī)扇區(qū)(boot sector)。

? 例題

假設(shè)你的個(gè)人計(jì)算機(jī)只有一個(gè)硬盤,里面切成四個(gè)分區(qū),其中第一、二分區(qū)分別安裝了Windows及Linux, 你要如何在開(kāi)機(jī)的時(shí)候選擇用Windows還是Linux開(kāi)機(jī)呢?假設(shè)MBR內(nèi)安裝的是可同時(shí)認(rèn)識(shí)Windows/Linux操作系統(tǒng)的開(kāi)機(jī)管理程序, 那么整個(gè)流程可以圖示如下:

開(kāi)機(jī)管理程序的工作執(zhí)行示意圖

MBR開(kāi)機(jī)管理程序提供兩個(gè)菜單,菜單一(M1)可以直接載入Windows的核心文件來(lái)開(kāi)機(jī);菜單二(M2)將開(kāi)機(jī)管理工作交給第二個(gè)分區(qū)的開(kāi)機(jī)扇區(qū)(boot sector)。選擇M2后,該開(kāi)機(jī)管理程序僅有一個(gè)開(kāi)機(jī)菜單,因此能夠使用Linux核心文件來(lái)開(kāi)機(jī)。

  • 每個(gè)分區(qū)都擁有自己的開(kāi)機(jī)扇區(qū)(boot sector)
  • 圖中的系統(tǒng)盤為第一及第二分區(qū)
  • 實(shí)際可開(kāi)機(jī)的核心文件是放置到個(gè)分區(qū)內(nèi)的
  • loader只會(huì)認(rèn)識(shí)自己的系統(tǒng)盤內(nèi)的可開(kāi)機(jī)核心文件,以及其他loader
  • loader可直接指向或間接將管理權(quán)轉(zhuǎn)交給另一個(gè)管理程序

如果安裝多重開(kāi)機(jī),最好先安裝Windows再安裝Linux

  • Linux安裝時(shí),可以將開(kāi)機(jī)管理程序安裝再M(fèi)BR或個(gè)別分區(qū)的開(kāi)機(jī)扇區(qū),而且Linux的loader可以手動(dòng)設(shè)置菜單,所以可以在Linux的boot loader里加入Windows的開(kāi)機(jī)選項(xiàng);
  • Windows安裝時(shí),會(huì)主動(dòng)覆蓋調(diào)MBR以及自己所在分區(qū)的開(kāi)機(jī)扇區(qū),沒(méi)有讓我們自己選擇菜單的功能。
    因此,先裝Linux再裝Windows,MBR的開(kāi)機(jī)管理程序就只會(huì)有WIndows項(xiàng)目。(也有處理方法,利用Linux的救援模式來(lái)挽救MBR)

? UEFI BIOS 搭配 GPT開(kāi)機(jī)的流程

GPT可以提供64bit的尋址,也能使用較大的區(qū)塊來(lái)處理開(kāi)機(jī)管理程序。但是BIOS需要GPT提供相容模式才能夠讀寫(xiě)這個(gè)磁盤設(shè)備~ 而且BIOS僅為16位的程序,與現(xiàn)階段的操作系統(tǒng)接軌方面有點(diǎn)弱!為了解決這個(gè)問(wèn)題,就有了UEFI(Unified Extensible Firmware Interface)可延伸固件界面的產(chǎn)生。
UEFI主要想取代BIOS固件界面,因此也成UEFI 為 UEFI BIOS。
UEFI使用C程序語(yǔ)言,比使用組合語(yǔ)言的BIOS更容易開(kāi)發(fā)!如果開(kāi)發(fā)者夠厲害,甚至可以在UEFI開(kāi)機(jī)階段就讓該系統(tǒng)了解TCP/IP而直接上網(wǎng),根本不需要進(jìn)入操作系統(tǒng)。

  • BIOS與UEFI的差異
比較項(xiàng)目 傳統(tǒng)BIOS UEFI
使用程序語(yǔ)言 組合語(yǔ)言 C語(yǔ)言
硬件資源控制 使用中斷(IRQ)管理 不可變的內(nèi)存讀取 不可變得 輸入/ 輸出存取 使用驅(qū)動(dòng)程序與協(xié)定
處理器運(yùn)行環(huán)境 16位 CPU保護(hù)模式
擴(kuò)充方式 通過(guò)IRQ鏈接 直接載入驅(qū)動(dòng)程序
第三方廠商支持 較差 較佳且可支持多平臺(tái)
圖形化能力 較差 較佳
內(nèi)置簡(jiǎn)化操作系統(tǒng)前環(huán)境 不支持 支持

與BIOS不同,UEFI簡(jiǎn)直像是一個(gè)低階的操作系統(tǒng)~ 甚至主板上硬件資源的管理,也跟操作系統(tǒng)相當(dāng)類似,只需要載入驅(qū)動(dòng)程序即可控制操作。

2.2.4 Linux安裝模式下,磁盤分區(qū)的選擇(極重要)

windows系統(tǒng)重裝之前,都需要事先考慮C盤多少容量?D盤又要給多大容量?實(shí)際安裝時(shí)候,發(fā)現(xiàn)C盤之前會(huì)有100MB的分區(qū)被獨(dú)立出來(lái)(WIN7分兩個(gè)盤時(shí)會(huì)預(yù)留100MB空間),所以實(shí)際上有三個(gè)分區(qū)。

Linux又該如何設(shè)計(jì)呢?

? 目錄樹(shù)結(jié)構(gòu)(directory tree)

Linux內(nèi)所有數(shù)據(jù)都是以文件形態(tài)呈現(xiàn),所以Linux最重要的就在于目錄樹(shù)架構(gòu)。
目錄樹(shù)架構(gòu)(directory tree)就是以根目錄為主,然后向下呈現(xiàn)分支狀的目錄結(jié)構(gòu)的一種文件架構(gòu)。整個(gè)目錄樹(shù)架構(gòu)最重要的就是那個(gè)根目錄(root directory),這個(gè)根目錄的表示方法為“/”,所有的文件都與目錄樹(shù)有關(guān)。

目錄樹(shù)相關(guān)性示意圖

如圖所示,所有的文件都是又根目錄(/)衍生來(lái)的,而次目錄下還能夠有其他的數(shù)據(jù)存在。圖中長(zhǎng)方形為目錄,波浪形則為文件。想取的mydata文件,最終的文件名為:/home/dmstai/mydata。

Linux使用目錄樹(shù)架構(gòu),文件放置在磁盤分區(qū)中,“如果結(jié)合目錄樹(shù)的架構(gòu)與磁盤內(nèi)的數(shù)據(jù)”呢?這就牽涉到“掛載(mount)”問(wèn)題了。

? 文件系統(tǒng)與目錄樹(shù)的關(guān)系(掛載)

“掛載”是利用一個(gè)目錄當(dāng)成進(jìn)入點(diǎn),將磁盤分區(qū)數(shù)據(jù)放置在該目錄下;進(jìn)入該目錄就可以讀取該分區(qū)。這個(gè)動(dòng)作成為“掛載”,進(jìn)入點(diǎn)的目錄我們成為“掛載點(diǎn)”。由于Linux系統(tǒng)最重要的是根目錄,因此根目錄一定要掛載到某個(gè)分區(qū)。至于其他目錄可依使用者需求來(lái)掛載到不同的分區(qū)。

目錄樹(shù)與分區(qū)之間的相關(guān)性

如上圖,假設(shè)硬盤分兩個(gè)分區(qū),partition 1是掛載到根目錄, partition 2掛載到 /home目錄。當(dāng)數(shù)據(jù)放置在/home內(nèi)的各次目錄時(shí),數(shù)據(jù)是放置到patition 2的,如果沒(méi)在/home下,則數(shù)據(jù)會(huì)放置到partition 1。

windows也是掛載的概念,比如USB放置到windows時(shí)會(huì)偵測(cè)到F(或其他盤)盤,那么讀取數(shù)據(jù)去相應(yīng)盤讀取即可。

? distributions 安裝時(shí),掛載點(diǎn)與磁盤分區(qū)的規(guī)劃

Linux安裝時(shí)需要規(guī)劃磁盤分區(qū)與目錄樹(shù)的掛載。
Linux安裝時(shí)提供“自訂安裝,Custom” - “Expert,專家模式”

  • 自訂安裝“Custom”
    A:初次接觸Linux:只要分區(qū)“/”及“swap”即可:
    初次安裝Linux,通常直接以一個(gè)最大分區(qū)“/”來(lái)安裝系統(tǒng)。這樣不怕分區(qū)錯(cuò)誤造成無(wú)法安裝的困境!
    例如/usr是Linux可執(zhí)行程序及相關(guān)文件擺放的目錄,所以他的容量需求蠻大的,玩意/usr分區(qū)不夠大,由于無(wú)法將數(shù)據(jù)完全寫(xiě)入的問(wèn)題,就有可能無(wú)法安裝。因此初次安裝,僅分區(qū)成兩個(gè)分區(qū)“/”與Swap即可。

B: 建議分區(qū)方法:預(yù)留一個(gè)備用的剩余磁盤容量
Linux的學(xué)習(xí),最麻煩的可能就是分區(qū)問(wèn)題,分區(qū)是系統(tǒng)管理員很重要得一個(gè)任務(wù)。
預(yù)留的分區(qū)可以拿來(lái)做備份用。Linux實(shí)際使用中,某些script或者重要文件值得備份時(shí),就可以使用剩余容量分出新的分區(qū),來(lái)備份重要配置文件或者script。這樣做最大的好處就是重裝系統(tǒng)時(shí),一些軟件或工具程序馬上在硬盤中找到。

  • Linux安裝程序提供的默認(rèn)硬盤分區(qū)方式
    通常不建議使用各個(gè)distribution所提供默認(rèn)的Server安裝方式,這會(huì)讓你無(wú)法得知Linux在搞什么鬼,也不見(jiàn)得可以符合你的需求!而且需要注意的是,選擇Server時(shí)候,需要“確定”你的硬盤數(shù)據(jù)是否不再需要!因?yàn)長(zhǎng)inux會(huì)自動(dòng)把硬盤舊的數(shù)據(jù)全部殺掉!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容