- 計(jì)算機(jī)硬件組成之存儲設(shè)備
- 磁盤鏈接方式與設(shè)備文件名
- MBR(MS-DOS)與GPT磁盤分區(qū)表(partition table)
- 啟動流程中的BIOS與UEFI(啟動檢測程序)
- Linux安裝模式下磁盤分區(qū)的選擇
?一、計(jì)算機(jī)硬件組成之存儲設(shè)備
關(guān)于計(jì)算機(jī)硬件組成中的存儲設(shè)備這里只是為了更好的理解Linux文件系統(tǒng)做一些必要的介紹,主要圍繞Linux文件系統(tǒng)管理來展開,而不會涉及存儲設(shè)備硬件的物理特性原理和指令集這些計(jì)算機(jī)組成原理內(nèi)容,但不排除會出現(xiàn)一些相關(guān)的描述,但這些內(nèi)容不會怎么影響對Linux文件系統(tǒng)的軟件部分的理解,如果對相關(guān)內(nèi)容有興趣可以自行查閱資料。
在計(jì)算機(jī)存儲設(shè)備中又分為主存和輔存,而這里要了解的輔存:磁盤在Linux文件系統(tǒng)層面的相關(guān)內(nèi)容。主存包括寄存器、緩存、內(nèi)存,它們需要在通電環(huán)境下才能實(shí)現(xiàn)數(shù)據(jù)的存儲。而輔存屬于持久化的存儲設(shè)備,通過設(shè)備的物理特性存儲數(shù)據(jù),它們一般有磁盤、磁帶等,這里我們需要了解的是磁盤,磁盤是由多個(gè)圓形碟片、機(jī)械手臂、磁頭與主軸馬達(dá)組成。
?
碟片上的數(shù)據(jù)通過機(jī)器手臂移動磁頭和碟片轉(zhuǎn)動配合實(shí)現(xiàn)數(shù)據(jù)讀寫,由于這種轉(zhuǎn)動讀寫數(shù)據(jù)的方式在碟片上畫出很多個(gè)同心圓,然后在這些圓上面切出一個(gè)個(gè)小區(qū)塊讓機(jī)械手臂上的磁頭去讀寫。每一個(gè)小區(qū)塊就是磁盤的最小物理存儲單元稱為扇區(qū)(sector),同一個(gè)同心圓的扇區(qū)組合成的圓就是磁道(track),由于磁盤里可能會有多個(gè)碟片,因此所有碟片上面的同一個(gè)圓組合成所謂的柱面(cylinder)。由于同心圓的外圈圓比內(nèi)圈圓大,所以為了合理利用這些空間,在外圈圓磁道上扇區(qū)比內(nèi)圈圓扇區(qū)多,所以碟片轉(zhuǎn)一圈讀寫的數(shù)據(jù)量比內(nèi)圈多,因此通常數(shù)據(jù)讀寫會由外圈往內(nèi)圈寫。
?二、磁盤鏈接方式與設(shè)備文件名
正常情況下物理機(jī)器大概使用的都是/dev/sd[a-p]的磁盤文件名,至于虛擬機(jī)環(huán)境中,為了加速,可能會使用/dev/vd[a-p]這種設(shè)備文件名。假設(shè)當(dāng)前你的虛擬機(jī)中,僅有一個(gè)virtio接口的磁盤,那么它對應(yīng)在Linux操作系統(tǒng)中文件名應(yīng)該是/dev/vda。
由于SATA、USB、SAS等磁盤接口都是使用SCSI模塊來驅(qū)動的,因此磁盤的文件名都是/dev/sd[a-p]的格式,這時(shí)候要根據(jù)Linux內(nèi)核檢測到磁盤的順序來命名,一般會先檢測主板上的SATA插槽(SAS接口一般在以前的大型機(jī)上),按照接入插槽順序?qū)?yīng)命名,然后接著將將USB接口的磁盤按照順序往后命名,比如現(xiàn)在主板上有六個(gè)SATA插槽,現(xiàn)在有兩個(gè)磁盤分別插入主板的SATA1、SATA5插槽上,還有一個(gè)USB磁盤,這時(shí)候它們的文件名應(yīng)該分別是:
SATA1插槽上的文件名:/dev/sda SATA5插槽上的文件名:/dev/sdb USB磁盤(系統(tǒng)啟動完成后才被系統(tǒng)識別):/dev/sdc
?三、MBR(MS-DOS)與GPT磁盤分區(qū)表(partition table)
磁盤的碟片上可以細(xì)分出扇區(qū)(Sector)與磁道(Track)兩種單位,其中扇區(qū)的物理大小設(shè)計(jì)有兩種,分別是512字節(jié)與4K字節(jié)。在碟片上有一個(gè)重要的扇區(qū),里面記錄了重要的信息被稱為MBR(Master Boot Record)格式,由于磁盤容量不斷擴(kuò)大,造成讀寫上的一些困擾,后來又發(fā)展出GPT磁盤分區(qū)格式。
3.1MBR(MS-DOS)分區(qū)表格式與限制
早期Linux系統(tǒng)了兼容Windows的磁盤,所以使用的是支持Windows的MBR(Master Boot Record,主引導(dǎo)記錄)的方式來處理啟動引導(dǎo)程序與分區(qū)表。而啟動引導(dǎo)程序記錄與分區(qū)表就放在磁盤的第一個(gè)扇區(qū),這個(gè)扇區(qū)通常是512字節(jié)的大?。ㄅf的磁盤扇區(qū)都是512字節(jié)),第一個(gè)扇區(qū)的512字節(jié)主要包含就是主引導(dǎo)程序記錄和分區(qū)表。
主引導(dǎo)記錄(Master Boot Record, MBR):可以安裝啟動引導(dǎo)程序的地方,有446個(gè)字節(jié);
分區(qū)表(partition table):記錄整塊磁盤分區(qū)的狀態(tài),有64個(gè)字節(jié)。
關(guān)于主引導(dǎo)記錄在下一節(jié)啟動流程中的做具體介紹,這里我們首先來關(guān)注分區(qū)表,由于分區(qū)表所在區(qū)域僅有64個(gè)字節(jié)容量,因此最多只能有四組記錄區(qū),每組記錄了對應(yīng)磁盤分區(qū)的開始與結(jié)束的柱面號碼,每組記錄所用的容量就是64/4=16字節(jié)。
假設(shè)現(xiàn)在磁盤的設(shè)備文件名為/dev/sda,該磁盤上有400個(gè)柱面,每個(gè)分區(qū)占100個(gè)柱面,用一個(gè)平面圖來表示這個(gè)磁盤分區(qū)大概就是下面這樣:
?
因?yàn)樵诘谝粋€(gè)扇區(qū)中只有四個(gè)分區(qū)記錄,如何在這四個(gè)分區(qū)記錄的基礎(chǔ)上實(shí)現(xiàn)更多的磁盤分區(qū)呢?在MBR格式中除了固定的主要分區(qū)(Primary)還有一種分區(qū)叫做擴(kuò)展分區(qū)(Extended),這里順帶提一下分區(qū)的最小單元是柱面(Cylinder)。在擴(kuò)展分區(qū)中又會拿出一個(gè)扇區(qū)作為分區(qū)表的容器,擴(kuò)展分區(qū)就可以再跟一個(gè)磁盤一樣進(jìn)行分區(qū),不過擴(kuò)展分區(qū)中的分區(qū)一般表示為邏輯分區(qū)(loogical partition),邏輯分區(qū)的數(shù)量也不是可以無限劃分的,邏輯分區(qū)的數(shù)量與操作系統(tǒng)不同而數(shù)量會有差別,在Linux中的SATA磁盤上邏輯分區(qū)可以突破63個(gè)以上的分區(qū)限制。
下面是在第一扇區(qū)上劃分出一個(gè)主要分區(qū)和一個(gè)擴(kuò)展分區(qū),然后將擴(kuò)展分區(qū)劃分成五個(gè)邏輯分區(qū)的示意圖:
?(由于畫示圖時(shí)忘了直接在圖中標(biāo)注磁盤分區(qū)對應(yīng)的文件名,這里再補(bǔ)充以下):
P1:/dev/sda1 P2:/dev/sda2 L1:/dev/sda5 L2:/dev/sda6 L3:/dev/sda7 L4:/dev/sda8 L5:/dev/sda9
MBR格式的磁盤分區(qū)主要分區(qū)與擴(kuò)展分區(qū)最多可以有四個(gè),擴(kuò)展分區(qū)最多只能有一個(gè)(操作系統(tǒng)的限制),邏輯分區(qū)是由擴(kuò)展分區(qū)劃分出來的。只有主要分區(qū)和邏輯分區(qū)才能被格式化,而擴(kuò)展分區(qū)不能格式化。
關(guān)于MBR的分區(qū)整合,只有在同一個(gè)分區(qū)表中的分區(qū)才可以整合,也就是說邏輯分區(qū)只能和跟邏輯分區(qū)整合,主要分區(qū)可以跟主要分區(qū)整合。但是需要注意的是如果將擴(kuò)展分區(qū)與主要分區(qū)整合,就必須先將擴(kuò)展分區(qū)中所有的邏輯分區(qū)全部刪除才能被整合。
關(guān)于MBR的多磁盤分區(qū):每個(gè)磁盤上第一個(gè)扇區(qū)都是自己的主引導(dǎo)程序和分區(qū)表扇區(qū),每個(gè)磁盤都可以定義一個(gè)擴(kuò)展分區(qū)。每個(gè)分區(qū)的名稱都是磁盤名稱+分區(qū)號,比如兩個(gè)磁盤的第一個(gè)分區(qū)名稱分別是:/dev/sda1、/dev/sdb1。
3.2GPT(GUID partition table)磁盤分區(qū)表:
因?yàn)檫^去的磁盤扇區(qū)大小就是512字節(jié),現(xiàn)在的磁盤有的已經(jīng)做到了4K一個(gè)扇區(qū),為了兼容所有磁盤在扇區(qū)的定義上采用了邏輯區(qū)塊地址(Logical Block Address,簡稱LBA),每個(gè)邏輯區(qū)塊依然是512字節(jié),但實(shí)際磁盤的扇區(qū)可能不是512字節(jié),采用邏輯區(qū)塊一方面兼容了之前的磁盤物理扇區(qū)容量,另一方面是在磁盤分區(qū)時(shí)使用的邏輯區(qū)塊我們可以將它當(dāng)作是一個(gè)扇區(qū),但實(shí)際上它可能不是一個(gè)扇區(qū)。
與MBR采用磁盤的第一個(gè)扇區(qū)作為主引導(dǎo)記錄和分區(qū)表容器不同,GPT采用了34個(gè)邏輯區(qū)塊來記錄分區(qū)信息,除此之外GPT還將磁盤最后的34個(gè)邏輯區(qū)塊作為備份,保障磁盤的安全性,下面是GPT磁盤分區(qū)示意圖:
根據(jù)上面的示圖來了解GPT磁盤分區(qū)表的結(jié)構(gòu)內(nèi)容,這些內(nèi)容都按照非常整齊的邏輯區(qū)塊地址分布在磁盤的起始位置和結(jié)束位置,起始位置34個(gè)邏輯區(qū)塊叫做主分區(qū)表,結(jié)束位置34個(gè)邏輯區(qū)塊叫做副分區(qū)表,副分區(qū)表相對主分區(qū)表少了一個(gè)主引導(dǎo)程序的區(qū)塊,主引導(dǎo)程序的邏輯區(qū)塊與MBR的主引導(dǎo)程序記錄一樣,都是在磁盤的第一個(gè)扇區(qū),在GPT磁盤分區(qū)格式中就是在磁盤的第一個(gè)邏輯分區(qū)中,下面就按照邏輯區(qū)塊編號來逐個(gè)解釋:
LBA0:跟MBR的446個(gè)字節(jié)區(qū)塊一樣,用來存放主引導(dǎo)程序記錄,前面說過在GPT格式中每個(gè)邏輯區(qū)塊是512字節(jié),在LBA0中除了主引導(dǎo)程序記錄占用的區(qū)塊,剩下的空間還會記錄一個(gè)特殊標(biāo)識符,用來表示此磁盤為GPT格式。
LBA1:這是GPT表頭記錄,記錄的內(nèi)容包括分區(qū)表的大小、位置、校正碼(CRC32),及備份用的GPT分區(qū)的位置。
LBA2~LBA33:這是實(shí)際記錄分區(qū)信息記錄,每個(gè)LAB記錄4組記錄,所以默認(rèn)情況下有4*32=128組分區(qū)記錄。由于每個(gè)邏輯分區(qū)是512個(gè)字節(jié),分為四組每個(gè)記錄就是512/4=128字節(jié),GPT分別采用64位來記錄開始/結(jié)束的扇區(qū)號碼。
雖然Linux本身的內(nèi)核設(shè)備記錄中針對單一磁盤最多只能分15個(gè)分區(qū),由于Linux內(nèi)核通過udev等方式處理可以突破這個(gè)限制,GPT已經(jīng)沒有MBR的主、擴(kuò)展、邏輯分區(qū)的概念,與之相對的是通過磁盤起始/結(jié)束地址的方式來切分成相對應(yīng)的磁盤分區(qū),每個(gè)分區(qū)都可以被獨(dú)立的格式使用。GTP分區(qū)表對于單一分區(qū)來說,最大容量理論可以達(dá)到264*512字節(jié)=263*1k字節(jié)=233*TB=8ZB。
在GPT分區(qū)格式中,每個(gè)分區(qū)的起始/結(jié)束設(shè)備物理地址可以不一定是連續(xù)的,如果不是連續(xù)的就會自動將不連續(xù)的中間空間作為一個(gè)分區(qū),所以這種機(jī)制可以突破128個(gè)分區(qū)的限制,但超出分區(qū)表的分區(qū)好像不能格式化使用,這個(gè)我沒有測試過,但理論上確實(shí)可以不使用連續(xù)的物理地址進(jìn)行分區(qū)突破這個(gè)限制,說這個(gè)只是作為理解GPT的機(jī)制,而不是為了去突破他的限制,在現(xiàn)實(shí)應(yīng)用中也沒有必要。接著來了解一下為什么要對磁盤進(jìn)行分區(qū)。
3.3為什么要對磁盤進(jìn)行分區(qū)?
數(shù)據(jù)安全性:
如果磁盤沒有進(jìn)行分區(qū),此時(shí)磁盤部分?jǐn)?shù)據(jù)出現(xiàn)了問題導(dǎo)致文件系統(tǒng)不能正常工作,這時(shí)候整個(gè)磁盤的文件數(shù)據(jù)就會有丟失的風(fēng)險(xiǎn),采用分區(qū)就可以將有問題的那個(gè)磁盤分區(qū)進(jìn)行格式化,而不至于導(dǎo)致前整個(gè)磁盤的數(shù)據(jù)出現(xiàn)問題。還有就是假設(shè)你的Windows系統(tǒng)裝在C盤,可能因?yàn)橄到y(tǒng)故障的原因需要重裝系統(tǒng),這時(shí)候你可以將C盤的文件遷移到D盤,然后C盤重裝系統(tǒng)就不會影響到D盤中的文件數(shù)據(jù)。
系統(tǒng)性能的考慮:
有了磁盤分區(qū)可以提高指針尋址的速度,說的簡單點(diǎn)假設(shè)你的數(shù)據(jù)是一枚掉在籃球場的硬幣,這時(shí)候要尋早這枚硬幣肯定先確定你在球場的活動范圍,然后在你的活動范圍里去找這枚硬幣的速度肯定比在整個(gè)籃球場尋找的速度塊,但需要注意的是也不是分區(qū)越多性能越高,關(guān)于這部分內(nèi)容以后有機(jī)會在系統(tǒng)原理中解析吧,如果有興趣的可以自行查找相關(guān)資料。
3.4MBR格式與GPT格式對比
從前面的介紹中我們知道MBR的磁盤主分區(qū)和擴(kuò)展分區(qū)放在第一個(gè)扇區(qū),如果第一個(gè)扇區(qū)出現(xiàn)問題就會導(dǎo)致整個(gè)磁盤的數(shù)據(jù)丟失,所以GPT在磁盤的邏輯區(qū)塊地址末尾的34個(gè)分區(qū)中又備份了一份副分區(qū)表,就算是主分區(qū)表出現(xiàn)了問題依然可以使用副分區(qū)表的備份進(jìn)行恢復(fù),GPT提高了數(shù)據(jù)的安全性。其二是由于磁盤工藝不斷的提升,磁盤的容量和扇區(qū)越來越多,原來MBR的四個(gè)分區(qū)會阻礙磁盤的性能提升,所以GPT在合理的分區(qū)下性能比MBR要高,這其中的原理還是留在系統(tǒng)原理中解析吧。
?四、啟動流程中的BIOS與UEFI(啟動檢測程序)
在前面的磁盤分區(qū)中提到了第一個(gè)扇區(qū)存放的MBR(主引導(dǎo)程序記錄),它是用來加載系統(tǒng)內(nèi)核文件的程序,輔助啟動操作系統(tǒng)。但MBR(主引導(dǎo)程序記錄)也不能自己啟動,而是要用主板上的一個(gè)存儲器固件中存儲的BIOS來啟動MBR(主引導(dǎo)程序記錄),它們大致的計(jì)算機(jī)系統(tǒng)啟動流程是:
1.主機(jī)電源通過通電信號啟動BIOS主動執(zhí)行固件,BIOS會找到第一個(gè)可啟動設(shè)備,即通過磁盤硬盤等相關(guān)的插槽接口的第一個(gè)設(shè)備的第一個(gè)扇區(qū)中的MBR,找到MBR并加載啟動BIOS的任務(wù)就完成了;
2.接著MBR主引導(dǎo)程序就會找到系統(tǒng)安裝時(shí)記錄的系統(tǒng)內(nèi)核文件地址,加載系統(tǒng)內(nèi)核文件并啟動,將控制權(quán)交給操作系統(tǒng),MBR的任務(wù)就完成了。
3.系統(tǒng)內(nèi)核文件啟動操作系統(tǒng),接著系統(tǒng)就開始可以進(jìn)入工作狀態(tài)了。
如果分區(qū)表是GPT格式的話,BIOS也能夠從LBA0的MBR兼容區(qū)塊讀取到主引導(dǎo)記錄并啟動它,如果主引導(dǎo)程序支持GPT格式的話,BIOS照樣可以讀取到正確的操作系統(tǒng)內(nèi)核文件并啟動操作系統(tǒng)。
由于MBR僅有446字節(jié)而已,如果使用grub的啟動引導(dǎo)程序的話,那就要額外劃分出一個(gè)BIOS boot分區(qū),這個(gè)分區(qū)才能夠放置其他開機(jī)過程所需要的程序,在CentOS當(dāng)中,這個(gè)分區(qū)占用2MB左右。
所以MBR的Boot Loader任務(wù)很簡單,包括:
1.提供選項(xiàng):用戶可以選擇不同的啟動選項(xiàng),這也是多重引導(dǎo)的重要功能(由額外的BIOS boot分區(qū)提供程序文件)。 2.加載內(nèi)核文件:直接指向可使用的程序區(qū)段來啟動操作系統(tǒng)(就是加載系統(tǒng)內(nèi)核文件)。 3.轉(zhuǎn)交其他啟動引導(dǎo)程序:將啟動管理功能交給其他啟動引導(dǎo)程序負(fù)責(zé)。
也就是說MBR的任務(wù)其實(shí)很簡單,提供啟動引導(dǎo)選項(xiàng),如果是只有一個(gè)啟動引導(dǎo)選項(xiàng)也就是它自身的話就會自動去加載系統(tǒng)內(nèi)核文件,如果有多個(gè)啟動引導(dǎo)選項(xiàng)就會通過用戶選擇去加載新的啟動加載程序,并將啟動管理權(quán)限交給這個(gè)新的啟動加載程序,這個(gè)新的啟動加載程序再去加載它對應(yīng)的系統(tǒng)內(nèi)核文件。
啟動引導(dǎo)程序除了安裝在默認(rèn)的MBR中,還可以安裝在每個(gè)分區(qū)的啟動扇區(qū)(boot sector)中,這些被安裝在啟動分區(qū)中的啟動引導(dǎo)程序就是Boot Lader中的多個(gè)啟動引導(dǎo)選項(xiàng),可以通過下圖來了解啟動引導(dǎo)程序的工作流程:
?
?
上面的一個(gè)多重啟動引導(dǎo)流程圖,你會發(fā)現(xiàn)在這個(gè)設(shè)備上同時(shí)安裝了Windows和Linux系統(tǒng),這也正是因?yàn)橛辛硕嘀匾龑?dǎo)才能是現(xiàn)在一臺機(jī)器上實(shí)現(xiàn)安裝多個(gè)可用的操作系統(tǒng),另外需要注意的是這個(gè)流程圖沒有體現(xiàn)出BIOS及調(diào)用的多重引導(dǎo)文件BIOS toot。
需要注意的是如果在一臺設(shè)備上需要同時(shí)安裝Windows和Linux的話,需要先安裝Windows,因?yàn)閃indows會主動覆蓋第一扇區(qū)的MBR,而Linux可以選擇將啟動引導(dǎo)程序安裝在MBR或別人分區(qū)上。
UEFI BIOS搭配GPT啟動的流程:
由于GPT可以提供64位的尋址,然后也就可以使用較大的區(qū)塊來處理啟動引導(dǎo)程序,但是BIOS其實(shí)并不懂GPT,畢竟BIOS僅是16位的程序,所以要通過GPT提供兼容模式才能夠讀寫這個(gè)磁盤,為了解決這個(gè)問題就有了UEFI(Unified extensible Firmware Interface)這個(gè)統(tǒng)一可擴(kuò)展固件接口產(chǎn)生。
UEFI主要是想取代BIOS這個(gè)固件接口,因此也被稱為UEFI BIOS,相比傳統(tǒng)的BIOS使用匯編語言,UEFI使用的是C語言更容易開發(fā)。UEFI在啟動階段就能讓該系統(tǒng)連接TCP/IP直接上網(wǎng),根本不需要進(jìn)入操作系統(tǒng),這讓小型系統(tǒng)開發(fā)充滿了各式各樣的可能性。
UEFI最初開發(fā)的時(shí)候制定規(guī)則里,包括硬件資源使用輪詢的方式管理,與BIOS采用終端的方式管理比較,輪詢的效率稍微低一些。另外UEFI并不能提供完整的緩存功能,因此執(zhí)行效率也沒有辦法提升,不過UEFI驅(qū)動程序會啟動一個(gè)類似操作系統(tǒng)的Shell環(huán)境,用戶可以在此環(huán)境中執(zhí)行任意UEFI程序,效果相比MS-BIOS更好。
UEFI大多用來實(shí)現(xiàn)啟動操作系統(tǒng)之前的硬件檢測、啟動管理、軟件設(shè)置等目的,加載操作系統(tǒng)之后更BIOS一樣會將管理權(quán)限交給操作系統(tǒng),但在特定環(huán)境下UEFI程序是可以部分執(zhí)行的。
由于黑客經(jīng)常借由BIOS啟動階段來破壞系統(tǒng),并取得系統(tǒng)的控制權(quán),因此UEFI加入了安全啟動(secure boot)功能,這個(gè)功能代表即將啟動的操作系統(tǒng)必須被UEFI所驗(yàn)證,否則無法啟動。Windows用了很多這樣的功能管理硬件,不過這個(gè)功能也會導(dǎo)致很多操作系統(tǒng)無法啟動,所以,有時(shí)候可能需要將UEFI的secure boot功能關(guān)閉才能啟動Linux操作系統(tǒng)。
雖然UEFI可以直接獲取GPT分區(qū)表,不過最好還是擁有BIOS boot的分區(qū)支持。同時(shí)為了兼容Windows,并且提供其他第三方廠商所使用的UEFI應(yīng)用程序存儲空間,必須格式化一個(gè)FAT的文件系統(tǒng)分區(qū),大約需要提供512MB到1GB左右的大小,讓其他UEFI執(zhí)行更為方便。
關(guān)于啟動流程的具體系統(tǒng)操作在后面的系統(tǒng)管理員相關(guān)博客中會詳細(xì)的介紹,這里只是將一些概念做一些介紹。
?
?
?
?
本文摘自 :https://www.cnblogs.com/