Linux 磁碟與磁碟分割槽

sparkdev發表於2018-12-11

Linux 系統中所有的硬體裝置都是通過檔案的方式來表現和使用的,我們將這些檔案稱為裝置檔案,硬碟對應的裝置檔案一般被稱為塊裝置檔案。本文介紹磁碟裝置在 Linux 系統中的表示方法以及如何建立磁碟分割槽。說明:本文的演示環境為 ubuntu 16.04。

磁碟分類

比較常見的磁碟型別有伺服器中使用的 SCSI 硬碟和消費類市場中的 SATA 硬碟,當然還有當下大熱的各種固態硬碟。

SCSI 硬碟
SCSI 硬碟即採用 SCSI 介面的硬碟。它由於效能好、穩定性高,因此在伺服器上得到廣泛應用。同時其價格也不菲,正因它的價格昂貴,所以在普通PC上很少見到它的蹤跡。SCSI 硬碟使用 50 針介面,外觀和普通硬碟介面有些相似(下圖來自網際網路):

SATA 硬碟
SATA(Serial ATA)口的硬碟又叫串列埠硬碟,Serial ATA 採用序列連線方式,序列 ATA 匯流排使用嵌入式時鐘訊號,具備了更強的糾錯能力,與以往相比其最大的區別在於能對傳輸指令(不僅僅是資料)進行檢查,如果發現錯誤會自動矯正,這在很大程度上提高了資料傳輸的可靠性。序列介面還具有結構簡單、支援熱插拔的優點(下圖來自網際網路):

固態硬碟
固態硬碟(Solid State Disk),一般稱之為 SSD 硬碟,固態硬碟是用固態電子儲存晶片陣列而製成的硬碟,由控制單元和儲存單元(FLASH晶片、DRAM晶片)組成。其主要特點是沒有傳統硬碟的機械結構,讀寫速度非常快(下圖來自網際網路):

磁碟裝置在 Linux 下的表示方法

在 Linux 系統中磁碟裝置檔案的命名規則為:
主裝置號 + 次裝置號 + 磁碟分割槽號
對於目前常見的磁碟,一般表示為:
sd[a-z]x
主裝置號代表裝置的型別,相同的主裝置號表示同型別的裝置。當前常見磁碟的主裝置號為 sd。
次裝置號代表同類裝置中的序號,用 "a-z" 表示。比如 /dev/sda 表示第一塊磁碟,/dev/sdb 表示第二塊磁碟。
x 表示磁碟分割槽編號。在每塊磁碟上可能會劃分多個分割槽,針對每個分割槽,Linux 用 /dev/sdbx 表示,這裡的 x 表示第二塊磁碟的第 x 個分割槽。

如下圖所示:

該系統中一共有四塊磁碟 /dev/sda,/dev/sdb,/dev/sdc 和 /dev/sdd。其中的 /dev/sda 上建立了三個分割槽,分別是 /dev/sda1,/dev/sda2,/dev/sda5;/dev/sdb 上只有一個分割槽 /dev/sdb1。而 /dev/sdc 和 /dev/sdd 則尚未分割槽(也肯能是隻有一個分割槽,分割槽的名稱和磁碟的名稱相同)。

磁碟分割槽

建立磁碟分割槽大概有下面幾個目的:

  • 提升資料的安全性(一個分割槽的資料損壞不會影響其他分割槽的資料)
  • 支援安裝多個作業系統
  • 多個小分割槽對比一個大分割槽會有效能提升
  • 更好的組織資料

本文以常見的 MBR 分割槽為例介紹磁碟分割槽中的一些常見概念。MBR 磁碟的分割槽由主分割槽、擴充套件分割槽和邏輯分割槽組成。在一塊磁碟上,主分割槽的最大個數是 4,其中擴充套件分割槽也是一個主分割槽,並且最多隻能有一個擴充套件分割槽,但可以在擴充套件分割槽上建立多個邏輯分割槽。因此主分割槽(包括擴充套件分割槽)的範圍是 1-4,邏輯分割槽從 5 開始。對於邏輯分割槽,Linux 規定它們必須建立在擴充套件分割槽上,而不是建立在主分割槽上。
主分割槽的作用是用來啟動作業系統的,主要存放作業系統的啟動或載入程式,因此建議作業系統的載入程式都放在主分割槽,比如 Linux 的 /boot 分割槽,最好放在主分割槽上:

擴充套件分割槽只不過是邏輯分割槽的 "容器"。實際上只有主分割槽和邏輯分割槽是用來進行資料儲存的,因而可以將資料集中存放在磁碟的邏輯分割槽中。
我們可以通過 fdisk 命令來檢視磁碟分割槽的資訊:

$ sudo fdisk -l /dev/sda

輸出中的前幾行是磁碟的基本資訊,比如總大小為 80G,一共有多少個扇區(sector),每個扇區的大小等等。紅框中的則是我們比較關注的分割槽資訊:
第一列 Device 顯示了磁碟分割槽對應的裝置檔名。
第二列 Boot 顯示是否為引導分割槽,上圖中的 /dev/sda1 就是引導分割槽。
第三列 Start 表示磁碟分割槽的起始位置。
第四列 End 表示磁碟分割槽的結束位置。
第五列 Sectors 表示分割槽佔用的扇區數目。
第六列 Size 顯示分割槽的大小。
第七列和第八列顯示的內容相同,分別是數值 ID 及其文字描述。 Id 列顯示了磁碟分割槽對應的 ID,根據分割槽的不同,分割槽對應的 ID 號也不相同。Linux 下用 83 表示主分割槽和邏輯分割槽,5 表示擴充套件分割槽,8e 表示 LVM 分割槽,82 表示交換分割槽,7 表示 NTFS 分割槽。
上圖中的資訊表明:/dev/sda1 是一個主分割槽並且被用作引導分割槽;/dev/sda2 是擴充套件分割槽,其中只有一個邏輯分割槽,即 /dev/sda5,這點可以通過兩個分割槽相同的大小證明。

利用 fdisk 劃分磁碟分割槽

fdisk 是 Linux 系統中一款功能強大的磁碟分割槽管理工具,可以觀察硬碟的使用情況,也可以用來管理磁碟分割槽。本文僅介紹如何使用 fdisk 建立新的磁碟分割槽。
假設我們的 Linux 系統中增加了一塊新的磁碟,系統對應的裝置名為 /dev/sdd,下面我們通過 fdisk 命令對這個磁碟進行分割槽。

$ sudo fdisk /dev/sdd

輸入命令 n 來建立新分割槽:

根據上面的提示,我們選擇 p 來建立主分割槽,然後提示我們輸入分割槽的編號:

主分割槽的編號為 1- 4,這裡我們輸入了 1。接下來是設定分割槽的大小:

分割槽的大小是通過設定分割槽開始處的扇區和結束處的扇區設定的。這裡如果回車兩次會把整個磁碟劃分為一個分割槽,也就是整個磁碟的容器都分給了一個分割槽。這樣一個簡單的分割槽就差不多完成了,注意此時的分割槽資訊還沒有寫入到磁碟中,在這裡還可以反悔,如果確認執行上面的分割槽,執行 w 命令就行了:

這時分割槽操作已經完成了,我們可以通過下面的命令檢視分割槽的結果:

$ sudo fdisk -l /dev/sdd

如果嫌上面的執行過程麻煩,可以用下面的一行命令起到相同的效果:

$ (echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdd

更改分割槽的型別

上面建立的分割槽型別預設為 83(Linux),如果想要一個 8e(Linux LVM)型別的分割槽該怎麼辦?我們可以繼續使用 fdisk 命令修改分割槽的型別,這次輸入 t 命令來修改分割槽的型別:

接下來可以選擇要修改的分割槽號,我們只有一個分割槽,所以預設就是 1。
下面我們可以通過 L 命令來檢視 fdisk 命令支援的分割槽型別:

我們需要建立 LVM,因此我們使用 LVM 的型別程式碼 8e:

最後輸入 w 命令確認變更。再次檢視 /dev/sdd 的分割槽資訊,此時分割槽型別已經變成了 Linux LVM:

總結

分割槽是使用磁碟的基礎,在分割槽完成後還需要對分割槽進行格式化,並把格式化後的檔案系統掛載到 Linux 系統之後才能儲存檔案。

相關文章