當(dāng)前位置:首頁 > IT技術(shù) > 系統(tǒng)服務(wù) > 正文

Linux操作系統(tǒng)(附一):磁盤分區(qū)
2022-05-29 22:32:09

  • 計算機硬件組成之存儲設(shè)備
  • 磁盤鏈接方式與設(shè)備文件名
  • MBR(MS-DOS)與GPT磁盤分區(qū)表(partition table)
  • 啟動流程中的BIOS與UEFI(啟動檢測程序)
  • Linux安裝模式下磁盤分區(qū)的選擇

?一、計算機硬件組成之存儲設(shè)備

關(guān)于計算機硬件組成中的存儲設(shè)備這里只是為了更好的理解Linux文件系統(tǒng)做一些必要的介紹,主要圍繞Linux文件系統(tǒng)管理來展開,而不會涉及存儲設(shè)備硬件的物理特性原理和指令集這些計算機組成原理內(nèi)容,但不排除會出現(xiàn)一些相關(guān)的描述,但這些內(nèi)容不會怎么影響對Linux文件系統(tǒng)的軟件部分的理解,如果對相關(guān)內(nèi)容有興趣可以自行查閱資料。

在計算機存儲設(shè)備中又分為主存和輔存,而這里要了解的輔存:磁盤在Linux文件系統(tǒng)層面的相關(guān)內(nèi)容。主存包括寄存器、緩存、內(nèi)存,它們需要在通電環(huán)境下才能實現(xiàn)數(shù)據(jù)的存儲。而輔存屬于持久化的存儲設(shè)備,通過設(shè)備的物理特性存儲數(shù)據(jù),它們一般有磁盤、磁帶等,這里我們需要了解的是磁盤,磁盤是由多個圓形碟片、機械手臂、磁頭與主軸馬達組成。

?

碟片上的數(shù)據(jù)通過機器手臂移動磁頭和碟片轉(zhuǎn)動配合實現(xiàn)數(shù)據(jù)讀寫,由于這種轉(zhuǎn)動讀寫數(shù)據(jù)的方式在碟片上畫出很多個同心圓,然后在這些圓上面切出一個個小區(qū)塊讓機械手臂上的磁頭去讀寫。每一個小區(qū)塊就是磁盤的最小物理存儲單元稱為扇區(qū)(sector),同一個同心圓的扇區(qū)組合成的圓就是磁道(track),由于磁盤里可能會有多個碟片,因此所有碟片上面的同一個圓組合成所謂的柱面(cylinder)。由于同心圓的外圈圓比內(nèi)圈圓大,所以為了合理利用這些空間,在外圈圓磁道上扇區(qū)比內(nèi)圈圓扇區(qū)多,所以碟片轉(zhuǎn)一圈讀寫的數(shù)據(jù)量比內(nèi)圈多,因此通常數(shù)據(jù)讀寫會由外圈往內(nèi)圈寫。

?二、磁盤鏈接方式與設(shè)備文件名

正常情況下物理機器大概使用的都是/dev/sd[a-p]的磁盤文件名,至于虛擬機環(huán)境中,為了加速,可能會使用/dev/vd[a-p]這種設(shè)備文件名。假設(shè)當(dāng)前你的虛擬機中,僅有一個virtio接口的磁盤,那么它對應(yīng)在Linux操作系統(tǒng)中文件名應(yīng)該是/dev/vda。

由于SATA、USB、SAS等磁盤接口都是使用SCSI模塊來驅(qū)動的,因此磁盤的文件名都是/dev/sd[a-p]的格式,這時候要根據(jù)Linux內(nèi)核檢測到磁盤的順序來命名,一般會先檢測主板上的SATA插槽(SAS接口一般在以前的大型機上),按照接入插槽順序?qū)?yīng)命名,然后接著將將USB接口的磁盤按照順序往后命名,比如現(xiàn)在主板上有六個SATA插槽,現(xiàn)在有兩個磁盤分別插入主板的SATA1、SATA5插槽上,還有一個USB磁盤,這時候它們的文件名應(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è)計有兩種,分別是512字節(jié)與4K字節(jié)。在碟片上有一個重要的扇區(qū),里面記錄了重要的信息被稱為MBR(Master Boot Record)格式,由于磁盤容量不斷擴大,造成讀寫上的一些困擾,后來又發(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ū)表就放在磁盤的第一個扇區(qū),這個扇區(qū)通常是512字節(jié)的大?。ㄅf的磁盤扇區(qū)都是512字節(jié)),第一個扇區(qū)的512字節(jié)主要包含就是主引導(dǎo)程序記錄和分區(qū)表。

主引導(dǎo)記錄(Master Boot Record, MBR):可以安裝啟動引導(dǎo)程序的地方,有446個字節(jié);
分區(qū)表(partition table):記錄整塊磁盤分區(qū)的狀態(tài),有64個字節(jié)。

關(guān)于主引導(dǎo)記錄在下一節(jié)啟動流程中的做具體介紹,這里我們首先來關(guān)注分區(qū)表,由于分區(qū)表所在區(qū)域僅有64個字節(jié)容量,因此最多只能有四組記錄區(qū),每組記錄了對應(yīng)磁盤分區(qū)的開始與結(jié)束的柱面號碼,每組記錄所用的容量就是64/4=16字節(jié)。

假設(shè)現(xiàn)在磁盤的設(shè)備文件名為/dev/sda,該磁盤上有400個柱面,每個分區(qū)占100個柱面,用一個平面圖來表示這個磁盤分區(qū)大概就是下面這樣:

?

因為在第一個扇區(qū)中只有四個分區(qū)記錄,如何在這四個分區(qū)記錄的基礎(chǔ)上實現(xiàn)更多的磁盤分區(qū)呢?在MBR格式中除了固定的主要分區(qū)(Primary)還有一種分區(qū)叫做擴展分區(qū)(Extended),這里順帶提一下分區(qū)的最小單元是柱面(Cylinder)。在擴展分區(qū)中又會拿出一個扇區(qū)作為分區(qū)表的容器,擴展分區(qū)就可以再跟一個磁盤一樣進行分區(qū),不過擴展分區(qū)中的分區(qū)一般表示為邏輯分區(qū)(loogical partition),邏輯分區(qū)的數(shù)量也不是可以無限劃分的,邏輯分區(qū)的數(shù)量與操作系統(tǒng)不同而數(shù)量會有差別,在Linux中的SATA磁盤上邏輯分區(qū)可以突破63個以上的分區(qū)限制。

下面是在第一扇區(qū)上劃分出一個主要分區(qū)和一個擴展分區(qū),然后將擴展分區(qū)劃分成五個邏輯分區(qū)的示意圖:

?(由于畫示圖時忘了直接在圖中標(biāo)注磁盤分區(qū)對應(yīng)的文件名,這里再補充以下):

P1:/dev/sda1
P2:/dev/sda2
L1:/dev/sda5
L2:/dev/sda6
L3:/dev/sda7
L4:/dev/sda8
L5:/dev/sda9

MBR格式的磁盤分區(qū)主要分區(qū)與擴展分區(qū)最多可以有四個,擴展分區(qū)最多只能有一個(操作系統(tǒng)的限制),邏輯分區(qū)是由擴展分區(qū)劃分出來的。只有主要分區(qū)和邏輯分區(qū)才能被格式化,而擴展分區(qū)不能格式化。

關(guān)于MBR的分區(qū)整合,只有在同一個分區(qū)表中的分區(qū)才可以整合,也就是說邏輯分區(qū)只能和跟邏輯分區(qū)整合,主要分區(qū)可以跟主要分區(qū)整合。但是需要注意的是如果將擴展分區(qū)與主要分區(qū)整合,就必須先將擴展分區(qū)中所有的邏輯分區(qū)全部刪除才能被整合。

關(guān)于MBR的多磁盤分區(qū):每個磁盤上第一個扇區(qū)都是自己的主引導(dǎo)程序和分區(qū)表扇區(qū),每個磁盤都可以定義一個擴展分區(qū)。每個分區(qū)的名稱都是磁盤名稱+分區(qū)號,比如兩個磁盤的第一個分區(qū)名稱分別是:/dev/sda1、/dev/sdb1。

3.2GPT(GUID partition table)磁盤分區(qū)表:

因為過去的磁盤扇區(qū)大小就是512字節(jié),現(xiàn)在的磁盤有的已經(jīng)做到了4K一個扇區(qū),為了兼容所有磁盤在扇區(qū)的定義上采用了邏輯區(qū)塊地址(Logical Block Address,簡稱LBA),每個邏輯區(qū)塊依然是512字節(jié),但實際磁盤的扇區(qū)可能不是512字節(jié),采用邏輯區(qū)塊一方面兼容了之前的磁盤物理扇區(qū)容量,另一方面是在磁盤分區(qū)時使用的邏輯區(qū)塊我們可以將它當(dāng)作是一個扇區(qū),但實際上它可能不是一個扇區(qū)。

與MBR采用磁盤的第一個扇區(qū)作為主引導(dǎo)記錄和分區(qū)表容器不同,GPT采用了34個邏輯區(qū)塊來記錄分區(qū)信息,除此之外GPT還將磁盤最后的34個邏輯區(qū)塊作為備份,保障磁盤的安全性,下面是GPT磁盤分區(qū)示意圖:

根據(jù)上面的示圖來了解GPT磁盤分區(qū)表的結(jié)構(gòu)內(nèi)容,這些內(nèi)容都按照非常整齊的邏輯區(qū)塊地址分布在磁盤的起始位置和結(jié)束位置,起始位置34個邏輯區(qū)塊叫做主分區(qū)表,結(jié)束位置34個邏輯區(qū)塊叫做副分區(qū)表,副分區(qū)表相對主分區(qū)表少了一個主引導(dǎo)程序的區(qū)塊,主引導(dǎo)程序的邏輯區(qū)塊與MBR的主引導(dǎo)程序記錄一樣,都是在磁盤的第一個扇區(qū),在GPT磁盤分區(qū)格式中就是在磁盤的第一個邏輯分區(qū)中,下面就按照邏輯區(qū)塊編號來逐個解釋:

LBA0:跟MBR的446個字節(jié)區(qū)塊一樣,用來存放主引導(dǎo)程序記錄,前面說過在GPT格式中每個邏輯區(qū)塊是512字節(jié),在LBA0中除了主引導(dǎo)程序記錄占用的區(qū)塊,剩下的空間還會記錄一個特殊標(biāo)識符,用來表示此磁盤為GPT格式。

LBA1:這是GPT表頭記錄,記錄的內(nèi)容包括分區(qū)表的大小、位置、校正碼(CRC32),及備份用的GPT分區(qū)的位置。

LBA2~LBA33:這是實際記錄分區(qū)信息記錄,每個LAB記錄4組記錄,所以默認(rèn)情況下有4*32=128組分區(qū)記錄。由于每個邏輯分區(qū)是512個字節(jié),分為四組每個記錄就是512/4=128字節(jié),GPT分別采用64位來記錄開始/結(jié)束的扇區(qū)號碼。

雖然Linux本身的內(nèi)核設(shè)備記錄中針對單一磁盤最多只能分15個分區(qū),由于Linux內(nèi)核通過udev等方式處理可以突破這個限制,GPT已經(jīng)沒有MBR的主、擴展、邏輯分區(qū)的概念,與之相對的是通過磁盤起始/結(jié)束地址的方式來切分成相對應(yīng)的磁盤分區(qū),每個分區(qū)都可以被獨立的格式使用。GTP分區(qū)表對于單一分區(qū)來說,最大容量理論可以達到264*512字節(jié)=263*1k字節(jié)=233*TB=8ZB。

在GPT分區(qū)格式中,每個分區(qū)的起始/結(jié)束設(shè)備物理地址可以不一定是連續(xù)的,如果不是連續(xù)的就會自動將不連續(xù)的中間空間作為一個分區(qū),所以這種機制可以突破128個分區(qū)的限制,但超出分區(qū)表的分區(qū)好像不能格式化使用,這個我沒有測試過,但理論上確實可以不使用連續(xù)的物理地址進行分區(qū)突破這個限制,說這個只是作為理解GPT的機制,而不是為了去突破他的限制,在現(xiàn)實應(yīng)用中也沒有必要。接著來了解一下為什么要對磁盤進行分區(qū)。

3.3為什么要對磁盤進行分區(qū)?

數(shù)據(jù)安全性:

如果磁盤沒有進行分區(qū),此時磁盤部分?jǐn)?shù)據(jù)出現(xiàn)了問題導(dǎo)致文件系統(tǒng)不能正常工作,這時候整個磁盤的文件數(shù)據(jù)就會有丟失的風(fēng)險,采用分區(qū)就可以將有問題的那個磁盤分區(qū)進行格式化,而不至于導(dǎo)致前整個磁盤的數(shù)據(jù)出現(xiàn)問題。還有就是假設(shè)你的Windows系統(tǒng)裝在C盤,可能因為系統(tǒng)故障的原因需要重裝系統(tǒng),這時候你可以將C盤的文件遷移到D盤,然后C盤重裝系統(tǒng)就不會影響到D盤中的文件數(shù)據(jù)。

系統(tǒng)性能的考慮:

有了磁盤分區(qū)可以提高指針尋址的速度,說的簡單點假設(shè)你的數(shù)據(jù)是一枚掉在籃球場的硬幣,這時候要尋早這枚硬幣肯定先確定你在球場的活動范圍,然后在你的活動范圍里去找這枚硬幣的速度肯定比在整個籃球場尋找的速度塊,但需要注意的是也不是分區(qū)越多性能越高,關(guān)于這部分內(nèi)容以后有機會在系統(tǒng)原理中解析吧,如果有興趣的可以自行查找相關(guān)資料。

3.4MBR格式與GPT格式對比

從前面的介紹中我們知道MBR的磁盤主分區(qū)和擴展分區(qū)放在第一個扇區(qū),如果第一個扇區(qū)出現(xiàn)問題就會導(dǎo)致整個磁盤的數(shù)據(jù)丟失,所以GPT在磁盤的邏輯區(qū)塊地址末尾的34個分區(qū)中又備份了一份副分區(qū)表,就算是主分區(qū)表出現(xiàn)了問題依然可以使用副分區(qū)表的備份進行恢復(fù),GPT提高了數(shù)據(jù)的安全性。其二是由于磁盤工藝不斷的提升,磁盤的容量和扇區(qū)越來越多,原來MBR的四個分區(qū)會阻礙磁盤的性能提升,所以GPT在合理的分區(qū)下性能比MBR要高,這其中的原理還是留在系統(tǒng)原理中解析吧。

?四、啟動流程中的BIOS與UEFI(啟動檢測程序)

在前面的磁盤分區(qū)中提到了第一個扇區(qū)存放的MBR(主引導(dǎo)程序記錄),它是用來加載系統(tǒng)內(nèi)核文件的程序,輔助啟動操作系統(tǒng)。但MBR(主引導(dǎo)程序記錄)也不能自己啟動,而是要用主板上的一個存儲器固件中存儲的BIOS來啟動MBR(主引導(dǎo)程序記錄),它們大致的計算機系統(tǒng)啟動流程是:

1.主機電源通過通電信號啟動BIOS主動執(zhí)行固件,BIOS會找到第一個可啟動設(shè)備,即通過磁盤硬盤等相關(guān)的插槽接口的第一個設(shè)備的第一個扇區(qū)中的MBR,找到MBR并加載啟動BIOS的任務(wù)就完成了;
2.接著MBR主引導(dǎo)程序就會找到系統(tǒng)安裝時記錄的系統(tǒng)內(nèi)核文件地址,加載系統(tǒng)內(nèi)核文件并啟動,將控制權(quán)交給操作系統(tǒng),MBR的任務(wù)就完成了。
3.系統(tǒng)內(nèi)核文件啟動操作系統(tǒng),接著系統(tǒng)就開始可以進入工作狀態(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)程序的話,那就要額外劃分出一個BIOS boot分區(qū),這個分區(qū)才能夠放置其他開機過程所需要的程序,在CentOS當(dāng)中,這個分區(qū)占用2MB左右。

所以MBR的Boot Loader任務(wù)很簡單,包括:

1.提供選項:用戶可以選擇不同的啟動選項,這也是多重引導(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ù)其實很簡單,提供啟動引導(dǎo)選項,如果是只有一個啟動引導(dǎo)選項也就是它自身的話就會自動去加載系統(tǒng)內(nèi)核文件,如果有多個啟動引導(dǎo)選項就會通過用戶選擇去加載新的啟動加載程序,并將啟動管理權(quán)限交給這個新的啟動加載程序,這個新的啟動加載程序再去加載它對應(yīng)的系統(tǒng)內(nèi)核文件。

啟動引導(dǎo)程序除了安裝在默認(rèn)的MBR中,還可以安裝在每個分區(qū)的啟動扇區(qū)(boot sector)中,這些被安裝在啟動分區(qū)中的啟動引導(dǎo)程序就是Boot Lader中的多個啟動引導(dǎo)選項,可以通過下圖來了解啟動引導(dǎo)程序的工作流程:

?

?

上面的一個多重啟動引導(dǎo)流程圖,你會發(fā)現(xiàn)在這個設(shè)備上同時安裝了Windows和Linux系統(tǒng),這也正是因為有了多重引導(dǎo)才能是現(xiàn)在一臺機器上實現(xiàn)安裝多個可用的操作系統(tǒng),另外需要注意的是這個流程圖沒有體現(xiàn)出BIOS及調(diào)用的多重引導(dǎo)文件BIOS toot。

需要注意的是如果在一臺設(shè)備上需要同時安裝Windows和Linux的話,需要先安裝Windows,因為Windows會主動覆蓋第一扇區(qū)的MBR,而Linux可以選擇將啟動引導(dǎo)程序安裝在MBR或別人分區(qū)上。

UEFI BIOS搭配GPT啟動的流程:

由于GPT可以提供64位的尋址,然后也就可以使用較大的區(qū)塊來處理啟動引導(dǎo)程序,但是BIOS其實并不懂GPT,畢竟BIOS僅是16位的程序,所以要通過GPT提供兼容模式才能夠讀寫這個磁盤,為了解決這個問題就有了UEFI(Unified extensible Firmware Interface)這個統(tǒng)一可擴展固件接口產(chǎn)生。

UEFI主要是想取代BIOS這個固件接口,因此也被稱為UEFI BIOS,相比傳統(tǒng)的BIOS使用匯編語言,UEFI使用的是C語言更容易開發(fā)。UEFI在啟動階段就能讓該系統(tǒng)連接TCP/IP直接上網(wǎng),根本不需要進入操作系統(tǒng),這讓小型系統(tǒng)開發(fā)充滿了各式各樣的可能性。

UEFI最初開發(fā)的時候制定規(guī)則里,包括硬件資源使用輪詢的方式管理,與BIOS采用終端的方式管理比較,輪詢的效率稍微低一些。另外UEFI并不能提供完整的緩存功能,因此執(zhí)行效率也沒有辦法提升,不過UEFI驅(qū)動程序會啟動一個類似操作系統(tǒng)的Shell環(huán)境,用戶可以在此環(huán)境中執(zhí)行任意UEFI程序,效果相比MS-BIOS更好。

UEFI大多用來實現(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)功能,這個功能代表即將啟動的操作系統(tǒng)必須被UEFI所驗證,否則無法啟動。Windows用了很多這樣的功能管理硬件,不過這個功能也會導(dǎo)致很多操作系統(tǒng)無法啟動,所以,有時候可能需要將UEFI的secure boot功能關(guān)閉才能啟動Linux操作系統(tǒng)。

雖然UEFI可以直接獲取GPT分區(qū)表,不過最好還是擁有BIOS boot的分區(qū)支持。同時為了兼容Windows,并且提供其他第三方廠商所使用的UEFI應(yīng)用程序存儲空間,必須格式化一個FAT的文件系統(tǒng)分區(qū),大約需要提供512MB到1GB左右的大小,讓其他UEFI執(zhí)行更為方便。

關(guān)于啟動流程的具體系統(tǒng)操作在后面的系統(tǒng)管理員相關(guān)博客中會詳細(xì)的介紹,這里只是將一些概念做一些介紹。

?

?

?


?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >