前言
Linux 系統(tǒng)中所有的硬件設(shè)備都是通過(guò)文件的方式來(lái)表現(xiàn)和使用的,我們將這些文件稱為設(shè)備文件,硬盤對(duì)應(yīng)的設(shè)備文件一般被稱為塊設(shè)備文件。
本文介紹磁盤設(shè)備在 Linux 系統(tǒng)中的表示方法以及如何創(chuàng)建磁盤分區(qū)。
為什么要有多個(gè)分區(qū)?
防止數(shù)據(jù)丟失:如果系統(tǒng)只有一個(gè)分區(qū),那么這個(gè)分區(qū)損壞,用戶將會(huì)丟失所的有數(shù)據(jù)。
增加磁盤空間使用效率:可以用不同的區(qū)塊大小來(lái)格式化分區(qū),如果有很多1K的文件,而硬盤分區(qū)區(qū)塊大小為4K,那么每存儲(chǔ)一個(gè)文件將會(huì)浪費(fèi)3K空間。這時(shí)我們需要取這些文件大小的平均值進(jìn)行區(qū)塊大小的劃分。
數(shù)據(jù)激增到極限不會(huì)引起系統(tǒng)掛起:將用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)分開,可以避免用戶數(shù)據(jù)填滿整個(gè)硬盤,引起的系掛起。
磁盤分類
比較常見的磁盤類型有服務(wù)器中使用的 SCSI 硬盤和消費(fèi)類市場(chǎng)中的 SATA 硬盤,當(dāng)然還有當(dāng)下大熱的各種固態(tài)硬盤。
SCSI 硬盤
SCSI 硬盤即采用 SCSI 接口的硬盤。它由于性能好、穩(wěn)定性高,因此在服務(wù)器上得到廣泛應(yīng)用。同時(shí)其價(jià)格也不菲,正因它的價(jià)格昂貴,所以在普通PC上很少見到它的蹤跡。SCSI 硬盤使用 50 針接口,外觀和普通硬盤接口有些相似(下圖來(lái)自互聯(lián)網(wǎng)):
![](/d/20211016/9be69b50f95b92473c6401756e4a20bc.gif)
SATA 硬盤
SATA(Serial ATA)口的硬盤又叫串口硬盤,Serial ATA 采用串行連接方式,串行 ATA 總線使用嵌入式時(shí)鐘信號(hào),具備了更強(qiáng)的糾錯(cuò)能力,與以往相比其最大的區(qū)別在于能對(duì)傳輸指令(不僅僅是數(shù)據(jù))進(jìn)行檢查,如果發(fā)現(xiàn)錯(cuò)誤會(huì)自動(dòng)矯正,這在很大程度上提高了數(shù)據(jù)傳輸?shù)目煽啃?。串行接口還具有結(jié)構(gòu)簡(jiǎn)單、支持熱插拔的優(yōu)點(diǎn)(下圖來(lái)自互聯(lián)網(wǎng)):
![](/d/20211016/28aa9b93323e1b91b7df482fa775cb68.gif)
固態(tài)硬盤
固態(tài)硬盤(Solid State Disk),一般稱之為 SSD 硬盤,固態(tài)硬盤是用固態(tài)電子存儲(chǔ)芯片陣列而制成的硬盤,由控制單元和存儲(chǔ)單元(FLASH芯片、DRAM芯片)組成。其主要特點(diǎn)是沒有傳統(tǒng)硬盤的機(jī)械結(jié)構(gòu),讀寫速度非???下圖來(lái)自互聯(lián)網(wǎng)):
![](/d/20211016/e4ce7588dda43f42b64aed4da79af389.gif)
磁盤設(shè)備在 Linux 下的表示方法
在 Linux 系統(tǒng)中磁盤設(shè)備文件的命名規(guī)則為:
主設(shè)備號(hào) + 次設(shè)備號(hào) + 磁盤分區(qū)號(hào)
對(duì)于目前常見的磁盤,一般表示為:
sd[a-z]x
主設(shè)備號(hào)代表設(shè)備的類型,相同的主設(shè)備號(hào)表示同類型的設(shè)備。當(dāng)前常見磁盤的主設(shè)備號(hào)為 sd。
次設(shè)備號(hào)代表同類設(shè)備中的序號(hào),用 "a-z" 表示。比如 /dev/sda 表示第一塊磁盤,/dev/sdb 表示第二塊磁盤。
x 表示磁盤分區(qū)編號(hào)。在每塊磁盤上可能會(huì)劃分多個(gè)分區(qū),針對(duì)每個(gè)分區(qū),Linux 用 /dev/sdbx 表示,這里的 x 表示第二塊磁盤的第 x 個(gè)分區(qū)。
如下圖所示:
![](/d/20211016/30cca9a8fb1ef4df97ff6c7705b2c794.gif)
該系統(tǒng)中一共有四塊磁盤 /dev/sda,/dev/sdb,/dev/sdc 和 /dev/sdd。其中的 /dev/sda 上創(chuàng)建了三個(gè)分區(qū),分別是 /dev/sda1,/dev/sda2,/dev/sda5;/dev/sdb 上只有一個(gè)分區(qū) /dev/sdb1。而 /dev/sdc 和 /dev/sdd 則尚未分區(qū)(也肯能是只有一個(gè)分區(qū),分區(qū)的名稱和磁盤的名稱相同)。
磁盤分區(qū)
創(chuàng)建磁盤分區(qū)大概有下面幾個(gè)目的:
- 提升數(shù)據(jù)的安全性(一個(gè)分區(qū)的數(shù)據(jù)損壞不會(huì)影響其他分區(qū)的數(shù)據(jù))
- 支持安裝多個(gè)操作系統(tǒng)
- 多個(gè)小分區(qū)對(duì)比一個(gè)大分區(qū)會(huì)有性能提升
- 更好的組織數(shù)據(jù)
磁盤的分區(qū)由主分區(qū)、擴(kuò)展分區(qū)和邏輯分區(qū)組成。在一塊磁盤上,主分區(qū)的最大個(gè)數(shù)是 4,其中擴(kuò)展分區(qū)也是一個(gè)主分區(qū),并且最多只能有一個(gè)擴(kuò)展分區(qū),但可以在擴(kuò)展分區(qū)上創(chuàng)建多個(gè)邏輯分區(qū)。因此主分區(qū)(包括擴(kuò)展分區(qū))的范圍是 1-4,邏輯分區(qū)從 5 開始。對(duì)于邏輯分區(qū),Linux 規(guī)定它們必須建立在擴(kuò)展分區(qū)上,而不是建立在主分區(qū)上。
主分區(qū)的作用是用來(lái)啟動(dòng)操作系統(tǒng)的,主要存放操作系統(tǒng)的啟動(dòng)或引導(dǎo)程序,因此建議操作系統(tǒng)的引導(dǎo)程序都放在主分區(qū),比如 Linux 的 /boot 分區(qū),最好放在主分區(qū)上:
![](/d/20211016/7b853e8c840c06eed23393107ada8737.gif)
擴(kuò)展分區(qū)只不過(guò)是邏輯分區(qū)的 "容器"。實(shí)際上只有主分區(qū)和邏輯分區(qū)是用來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)的,因而可以將數(shù)據(jù)集中存放在磁盤的邏輯分區(qū)中。
我們可以通過(guò) fdisk 命令來(lái)查看磁盤分區(qū)的信息:
![](/d/20211016/f97893e93380931b4651d62bd1bc7824.gif)
輸出中的前幾行是磁盤的基本信息,比如總大小為 80G,一共有多少個(gè)扇區(qū)(sector),每個(gè)扇區(qū)的大小等等。紅框中的則是我們比較關(guān)注的分區(qū)信息:
- 第一列 Device 顯示了磁盤分區(qū)對(duì)應(yīng)的設(shè)備文件名。
- 第二列 Boot 顯示是否為引導(dǎo)分區(qū),上圖中的 /dev/sda1 就是引導(dǎo)分區(qū)。
- 第三列 Start 表示磁盤分區(qū)的起始位置。
- 第四列 End 表示磁盤分區(qū)的結(jié)束位置。
- 第五列 Sectors 表示分區(qū)占用的扇區(qū)數(shù)目。
- 第六列 Size 顯示分區(qū)的大小。
- 第七列和第八列顯示的內(nèi)容相同,分別是數(shù)值 ID 及其文字描述。 Id 列顯示了磁盤分區(qū)對(duì)應(yīng)的 ID,根據(jù)分區(qū)的不同,分區(qū)對(duì)應(yīng)的 ID 號(hào)也不相同。Linux 下用 83 表示主分區(qū)和邏輯分區(qū),5 表示擴(kuò)展分區(qū),8e 表示 LVM 分區(qū),82 表示交換分區(qū),7 表示 NTFS 分區(qū)。
上圖中的信息表明:/dev/sda1 是一個(gè)主分區(qū)并且被用作引導(dǎo)分區(qū);/dev/sda2 是擴(kuò)展分區(qū),其中只有一個(gè)邏輯分區(qū),即 /dev/sda5,這點(diǎn)可以通過(guò)兩個(gè)分區(qū)相同的大小證明。
利用 fdisk 劃分磁盤分區(qū)
fdisk 是 Linux 系統(tǒng)中一款功能強(qiáng)大的磁盤分區(qū)管理工具,可以觀察硬盤的使用情況,也可以用來(lái)管理磁盤分區(qū)。本文僅介紹如何使用 fdisk 創(chuàng)建新的磁盤分區(qū)。
假設(shè)我們的 Linux 系統(tǒng)中增加了一塊新的磁盤,系統(tǒng)對(duì)應(yīng)的設(shè)備名為 /dev/sdd,下面我們通過(guò) fdisk 命令對(duì)這個(gè)磁盤進(jìn)行分區(qū)。
![](/d/20211016/eee77d45261eef5e2c5eb3cb4b4c846c.gif)
輸入命令 n 來(lái)創(chuàng)建新分區(qū):
![](/d/20211016/7ca63d8257ceb1cc18d4def3a71d0aec.gif)
根據(jù)上面的提示,我們選擇 p 來(lái)創(chuàng)建主分區(qū),然后提示我們輸入分區(qū)的編號(hào):
![](/d/20211016/b9a78fa10d90f38eaa240f06a0e67ddb.gif)
主分區(qū)的編號(hào)為 1- 4,這里我們輸入了 1。接下來(lái)是設(shè)置分區(qū)的大小:
![](/d/20211016/fa4979848f2db30bdd13968d2af29cb6.gif)
分區(qū)的大小是通過(guò)設(shè)置分區(qū)開始處的扇區(qū)和結(jié)束處的扇區(qū)設(shè)置的。這里如果回車兩次會(huì)把整個(gè)磁盤劃分為一個(gè)分區(qū),也就是整個(gè)磁盤的容器都分給了一個(gè)分區(qū)。這樣一個(gè)簡(jiǎn)單的分區(qū)就差不多完成了,注意此時(shí)的分區(qū)信息還沒有寫入到磁盤中,在這里還可以反悔,如果確認(rèn)執(zhí)行上面的分區(qū),執(zhí)行 w 命令就行了:
![](/d/20211016/e3040680c068ff6a6328609451012841.gif)
這時(shí)分區(qū)操作已經(jīng)完成了,我們可以通過(guò)下面的命令查看分區(qū)的結(jié)果:
![](/d/20211016/3cfe761c5e9218325887a15bfe1da919.gif)
如果嫌上面的執(zhí)行過(guò)程麻煩,可以用下面的一行命令起到相同的效果:
$ (echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdd
更改分區(qū)的類型
上面創(chuàng)建的分區(qū)類型默認(rèn)為 83(Linux),如果想要一個(gè) 8e(Linux LVM)類型的分區(qū)該怎么辦?我們可以繼續(xù)使用 fdisk 命令修改分區(qū)的類型,這次輸入 t 命令來(lái)修改分區(qū)的類型:
![](/d/20211016/3b20bb995ed8d7a1635c780b084acb37.gif)
接下來(lái)可以選擇要修改的分區(qū)號(hào),我們只有一個(gè)分區(qū),所以默認(rèn)就是 1。
下面我們可以通過(guò) L 命令來(lái)查看 fdisk 命令支持的分區(qū)類型:
![](/d/20211016/2eed885adfd0cad40b5331ea8a6e04d3.gif)
我們需要?jiǎng)?chuàng)建 LVM,因此我們使用 LVM 的類型代碼 8e:
![](/d/20211016/038c9d963a269a10a156637a0e01eef8.gif)
最后輸入 w 命令確認(rèn)變更。再次查看 /dev/sdd 的分區(qū)信息,此時(shí)分區(qū)類型已經(jīng)變成了 Linux LVM:
![](/d/20211016/485a82cb40f711fce6de3e9169ef77ea.gif)
總結(jié)
分區(qū)是使用磁盤的基礎(chǔ),在分區(qū)完成后還需要對(duì)分區(qū)進(jìn)行格式化,并把格式化后的文件系統(tǒng)掛載到 Linux 系統(tǒng)之后才能存儲(chǔ)文件。