一文全懂:Linux磁碟分割槽

狂盗一枝梅發表於2024-07-19

一、物理裝置的命名規則

在 Linux 系統中一切都是檔案,硬體裝置也不例外。所有的硬體裝置檔案都在/dev資料夾中。

硬體 在Linux內的檔名
SCSI/SATA/USB /dev/sd[a-p]
VirtI/O介面 /dev/vd[a-p]
軟盤 /dev/fd[0-1]
印表機 /dev/lp[0-2] (25針印表機) /dev/usb/lp[0-15] (USB 介面)
滑鼠 /dev/input/mouse[0-15] (通用) /dev/psaux (PS/2介面) /dev/mouse (當前滑鼠)
CDROM/DVDROM /dev/scd[0-1] (通用) /dev/sr[0-1] (通用,CentOS 較常見) /dev/cdrom (當前 CDROM)
磁帶機 /dev/ht0 (IDE 介面) /dev/st0 (SATA/SCSI介面) /dev/tape (當前磁帶)
IDE裝置 /dev/hd[a-d] (老系統才有)

由於現在的 IDE 裝置已經很少見了,所以一般的硬碟裝置都是以“/dev/sd”開頭。而一臺主機上可以有多塊硬碟,因此係統採用 a~z 來代表 26 塊不同的硬碟(預設從 a 開始分配),而且硬碟的分割槽編號也很有講究:

➢ 主分割槽或擴充套件分割槽的編號從 1 開始,到 4 結束;

➢ 邏輯分割槽從編號 5 開始。

有兩點需要注意:

  1. 裝置名稱由核心識別順序決定:/dev 目錄中 sda 裝置之所以是 a,並不是由插槽決定的,而是由系統核心的識別順序來決定的,而恰巧很多主機板的插槽順序就是系統核心的識別順序,因此才會被命名為/dev/sda。
  2. 分割槽名稱中的數字不代表分割槽數量:比如sda3,它代表編號為3的分割槽,有可能不存在sda2,因為這個數字可以手動指定。

下圖講解了一個sata硬碟的名字所蘊含的資訊

image-20240718094420030

二、MBR和GPT分割槽格式

MBR和GPT是兩種磁碟分割槽方式,當我們使用磁碟分割槽助手格式化硬碟的時候,它會提示你讓你選擇一種分割槽格式

img

1、 MBR分割槽

MBR分割槽方式出現的比較早,在Win7及Win7以前的系統都使用MBR分割槽方式,所以在磁碟管理介面,就能看到有主分割槽、邏輯分割槽等字眼

img

那MBR是什麼呢?

MBR,全稱Master Boot Record, 主開機記錄的意思,開機之後讀取的第一個硬碟內容,幫助系統找到開機程式並正常開機。

硬碟由許多個扇區組成,MBR硬碟每個扇區的大小是512位元組,最重要的第一個扇區格式如下所示

image-20240718110916877

可以看到在第一個扇區中,MBR佔據446個位元組,結束符佔2個位元組,剩餘64個位元組用於存放分割槽表,每個分割槽表條目佔用16位元組,分割槽表中一共四條記錄,代表著四個主分割槽。這也說明了為什麼早期Windows7系統為什麼在分割槽的時候會提示“該磁碟已包含最大分割槽數”不允許新增,因為早期Windows使用的MBR硬碟,它的設計只允許有4個主分割槽。

當然不可能只讓建立四個分割槽,這不合理,所以可以讓第四個分割槽變成擴充套件分割槽,在擴充套件分割槽內建立多個邏輯分割槽。

做個總結,在MBR硬碟中:

  • 主分割槽最多隻能有四個(硬碟的限制)
  • 擴充套件分割槽最多隻能有一個(作業系統的限制)
  • 邏輯分割槽是擴充套件分割槽中持續切割出來的分割槽。
  • 只有主分割槽和邏輯分割槽能被格式化,擴充套件分割槽無法被格式化。
  • 邏輯分割槽的數量在不同的作業系統上上限不一樣,Linux系統中SATA硬碟已經能夠劃分出63個以上的邏輯分割槽。
  • 邏輯分割槽的編號從5開始,就算只有一個主分割槽一個擴充套件分割槽,那邏輯分割槽的編號也從5開始。

另外,磁碟分割槽表只有64位元組大小,每條記錄只有16位元組大小,所以它能錄的資料是很有限的,這導致它無法正確獲取2.2TB以上硬碟的實際容量。

早期的 Linux 系統為了相容於Windows 的磁碟,因此使用的是支援 Windows 的 MBR的方式來處理開機載入程式和分割槽表。

現在Linux系統安裝的時候根據磁碟大小,如果安裝磁碟小於2TB,則預設使用MBR初始化硬碟;大於2TB,則會使用GPT初始化硬碟。

當然,也可以在安裝系統的時候強制使用GPT進行磁碟分割槽。

檢視磁碟型別的命令:fdisk -l

image-20240718132917700

disk label type 如果是dos,就是mbr硬碟;如果是gpt,則為gpt硬碟。

2、 GPT分割槽

GPT分割槽(GUID partition table)模式使用GUID分割槽表,是源自EFI標準的一種較新的磁碟分割槽表結構的標準。與普遍使用的主開機記錄(MBR)分割槽方案相比,GPT提供了更加靈活的磁碟分割槽機制。

GPT磁碟分割槽格式如下所示

圖2.2.7、GPT 分割表的結構示意圖

在MBR分割槽中,一個扇區是512位元組,在GPT分割槽中,用LBA(Logical Block Address)來表示“一個扇區”,預設大小也是512位元組。整個GPT硬碟就是由N多個LBA組成。

GPT分割槽比較複雜,更多資訊不在此討論,只需要知道

  1. 分割槽表有32條記錄,每條記錄可以記錄四個分割槽,所以它最多能有4*32=128個分割槽,所以它必要像MBR一樣區分主分割槽、邏輯分割槽,在GPT中所有分割槽都是主分割槽。
  2. 最高支援18EiB的單硬碟容量,1EiB = 1048576 TiB。

GPT分割槽很明顯比MBR分割槽要功能更強大;但是GPT分割槽在linux中不能使用fdisk命令進行管理,只能使用parted工具管理。

3、MBR和GPT分割槽的區別

磁碟分割槽形式 支援最大磁碟容量 支援分割槽數量 Linux分割槽工具
主啟動記錄分割槽(MBR) 2 TiB ● 4個主分割槽
● 3個主分割槽和1個擴充套件分割槽
MBR分割槽包含主分割槽和擴充套件分割槽,其中擴充套件分割槽裡面可以包含若干個邏輯分割槽。擴充套件分割槽不可以直接使用,需要劃分成若干個邏輯分割槽才可以使用。以建立6個分割槽為例,以下兩種分割槽情況供參考:
● 3個主分割槽,1個擴充套件分割槽,其中擴充套件分割槽中包含3個邏輯分割槽。
● 1個主分割槽,1個擴充套件分割槽,其中擴充套件分割槽中包含5個邏輯分割槽。
以下兩種工具均可以使用:fdisk工具parted工具
全域性分割槽表(GPT, Guid Partition Table) 18 EiB1 EiB = 1048576 TiB 不限制分割槽數量
GPT格式下沒有主分割槽、擴充套件分割槽以及邏輯分割槽之分。
parted工具

三、普通分割槽掛載

當我們有了一塊新硬碟,從插入電腦開始,一共需要做分割槽、格式化、掛載三個步驟,下面就依次詳細說說這個流程中的細節。

以下流程是基於Vmware Workstation環境做的實驗。

1、新增硬碟

原來我已經有兩塊硬碟了,現在新增加一塊12G的硬碟,只需要修改下設定,新增一塊硬碟即可

image-20240718165452809

然後開機啟動,檢視下dev資料夾,可以發現多出一個sdc檔案,它就是第三塊磁碟。

image-20240718170058807

2、分割槽命令:fdisk

fdisk命令(format disk)用於新建、修改及刪除磁碟的分割槽表資訊,語法格式為fdsk 磁碟名稱,它和大多數普通linux命令不同的是,它是一個互動式的命令,鍵入命令fdisk /dev/sdc,進入互動介面

image-20240718171058774

進入互動介面之前,有兩段英文提示

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2394a4f6.

翻譯成中文,包含以下幾點

  1. 所有的改變都只是暫存在記憶體中,直到最後收到寫入命令才依次執行記憶體中的操作。
  2. 當前裝置不包含任何可識別的分割槽表,這意味著這是一塊新裝置,還沒有分割槽過。
  3. 你要知道你正在做什麼事情:進入此互動介面意味著你正在對當前磁碟進行分割槽操作,分割槽型別為dos,也就是MBR。

這段提示資訊量還是有的,如果已經分割槽過的磁碟,則會提示如下資訊

image-20240718171812021

可以看到少了一些提示資訊。

接下來看看該命令的怎麼使用,它有提示,就是m命令。

m

m命令是首次提示的命令,它用於展示所有可用的命令以及每個命令的作用,鍵入m命令

image-20240718172423556

翻譯過來如下所示

  • a:切換引導標誌(toggle a bootable flag)。允許您在分割槽上切換引導標誌,以指示該分割槽是否可引導。
  • b:編輯BSD磁碟標籤(edit bsd disklabel)。用於編輯BSD磁碟標籤的命令。
  • c:切換DOS相容性標誌(toggle the dos compatibility flag)。允許您在分割槽上切換DOS相容性標誌,以指示該分割槽是否與DOS相容。
  • d:刪除一個分割槽(delete a partition)。用於刪除選擇的分割槽。
  • g:建立一個新的空GPT分割槽表(create a new empty GPT partition table)。用於建立一個新的空GUID分割槽表(GPT)。
  • G:建立一個IRIX(SGI)分割槽表(create an IRIX (SGI) partition table)。用於建立一個IRIX(SGI)分割槽表。
  • l:列出已知的分割槽型別(list known partition types)。顯示已知的分割槽型別列表。
  • m:列印此選單(print this menu)。列印fdisk命令的選單,顯示可用的操作選項。
  • n:新增一個新分割槽(add a new partition)。用於新增新的分割槽。
  • o:建立一個新的空DOS分割槽表(create a new empty DOS partition table)。用於建立一個新的空DOS分割槽表。
  • p:列印分割槽表(print the partition table)。顯示磁碟上的分割槽表。
  • q:退出而不儲存更改(quit without saving changes)。退出fdisk命令,不儲存對分割槽表的更改。
  • s:建立一個新的空Sun磁碟標籤(create a new empty Sun disklabel)。用於建立一個新的空Sun磁碟標籤。
  • t:更改分割槽的系統ID(change a partition's system ID)。允許您更改選擇的分割槽的系統ID。
  • u:更改顯示/輸入單位(change display/entry units)。用於更改fdisk命令中顯示和輸入的單位。
  • v:驗證分割槽表(verify the partition table)。驗證磁碟上的分割槽表以確保其有效性。
  • w:將表寫入磁碟並退出(write table to disk and exit)。將對分割槽表的更改寫入磁碟並退出fdisk命令。
  • x:額外功能(僅供專家使用)(extra functionality (experts only))。提供額外的高階功能,僅供有經驗的使用者使用。

p

p命令用於檢視硬碟裝置內已有的分割槽資訊,其中包括了硬碟的容量大小、扇區個數等資訊。

image-20240718173330716

可以看到是空的,當前磁碟還沒有分割槽過。

n

n命令用於建立分割槽,鍵入n命令

image-20240718173545428

它會提示建立的是主分割槽還是擴充套件分割槽(因為是MBR分割槽格式,所以才會有主分割槽或者擴充套件分割槽),預設是主分割槽,那就鍵入回車就行

image-20240718173805110

接下來提示分割槽編號,還是預設就行

image-20240718173927657

回車後提示輸入開始的扇區位置,預設值2048,這個地方敲回車即可,因為系統會自動計算出最靠前的空閒扇區的位置。

image-20240718174055021

系統提示輸入結束的扇區位置,這裡輸入+2G,表示要2G的分割槽大小,系統會自動計算出結束的扇區位置。

然後分割槽就建立成功了。輸入p命令,可以看到多了一個分割槽,分割槽名為sdc1

image-20240718174248012

w

w命令用於將分割槽表寫入磁碟,這樣就完成了對磁碟的分割槽。

image-20240718174435337

有時候該命令執行完成之後,並不會將分割槽資訊同步給核心,導致操作失敗。可以使用partprobe命令手動同步分割槽資訊到核心,多執行幾次,如果還不行,就重啟linux,重啟之後肯定就好了。

3、格式化命令:mkfs

mkfs是linux的格式化操作的命令,mkfs雙按tab鍵,可以看到它有多個衍生命令

image-20240718175015563

現在linux都是xfs檔案系統格式了,所以這裡按照mkfs.xfs命令執行格式化操作,執行格式為:mkfs.xfs /dev/sdc1

image-20240718175158349

這樣就完成了格式化操作,接下來進行系統掛載。

4、掛載命令:mount

mount命令是掛載命令,將分割槽掛載到某個目錄,這樣對目錄中檔案的CRUD操作就作用到了對應的分割槽上。

mount命令的格式是:mount 分割槽名 資料夾 或者 mount UUID=分割槽UUID 資料夾

首先先建立個資料夾:mkdir /dir3,然後將/dev/sdc1掛載到/dir3,掛載命令為:mount /dev/sdc1 /dir3

這樣就完成了掛載。

UUID掛載方式需要知道分割槽的UUID,獲取方式是使用blkid命令

5、獲取分割槽UUID:blkid

blkid的英文全稱是:block id,該命令用於獲取每個分割槽的UUID資訊;有時候該命令會受到快取的影響設裝置列表可能不會更新,使用blkid -g命令可以清除快取。

image-20240719102357044

然後使用命令mount UUID="74cbf319-cb9f-417e-9027-5328689477c1" /dir3 完成掛載。

需要注意的是mount命令只能一次掛載,重啟系統之後掛載就會失效,需要將掛載寫入/etc/fstab檔案,這樣才能完成分割槽的永久性掛載。

5、永久掛載:/etc/fstab檔案

/etc/fstab檔案存放著需要永久掛載的資料,系統啟動之後會自動讀取該檔案,並完成檔案中的所有掛載。寫入格式如下

裝置檔案 掛載目錄 格式型別 許可權選項 是否備份 是否自檢

image-20240719103001648

為了將/dev/sdc1永遠掛載到/dir3目錄,需要將以下資訊追加到/etc/fstab檔案

/dev/sdc1               /dir3                   xfs     defaults        0 0

寫入該檔案並不會自動生效,需要使用命令mount -a或者重啟系統生效。

已經實現了/dev/sdc1掛載到/dir3目錄,接下來使用df命令檢視掛載狀態和硬碟使用量資訊。

6、磁碟使用情況統計:df

df命令(disk free)用於顯示目前在Linux系統上的檔案系統磁碟使用情況,其使用格式為 df [選項]... [FILE]...

  • -a, --all:顯示所有檔案系統,包括虛擬檔案系統。
  • -B, --block-size=SIZE:指定塊大小,以特定單位顯示磁碟空間資訊(如 MB、GB)。
  • -h, --human-readable:以人類可讀的格式顯示輸出結果。
  • -H, --si:以 1000 作為基數,以 SI 單位顯示輸出結果(例如,MB、GB)。
  • -i, --inodes:顯示 inode 使用情況而不是塊使用情況。
  • -k, --kilobytes:以 KB 作為單位顯示磁碟空間資訊。
  • -l, --local:僅顯示本地檔案系統。
  • -m, --portability:使用 POSIX 輸出格式。
  • -n, --no-sync:不執行檔案系統同步操作。
  • -P, --portability:使用 POSIX 輸出格式。
  • -t, --type=TYPE:僅顯示指定型別的檔案系統。
  • -T, --print-type:顯示檔案系統的型別。
  • -x, --exclude-type=TYPE:排除指定型別的檔案系統。
  • --sync:在顯示檔案系統資訊之前執行檔案系統同步操作。
  • --total:在輸出的最後一行顯示總計。
  • -v, --verbose:詳細顯示檔案系統資訊。
  • -l, --local:僅顯示本地檔案系統。
  • --help:顯示幫助資訊並退出。
  • --version:顯示版本資訊並退出。

最常用的命令就是df -h了,接下來使用該命令檢視磁碟使用量情況

image-20240718180121196

可以看到sdc1已經掛載到了/dir3目錄還剩餘2G儲存可用。這樣看起來似乎不是非常直觀,總覺得有點亂,使用lsblk命令則能夠更直觀的看到每個磁碟以及它們的分割槽情況和分割槽大小。

7、樹狀展示硬碟分割槽:lsblk

lsblk命令的英文全稱是:list block,實際上它就是以樹狀結構展示磁碟分割槽情況,這樣會更直觀

image-20240719104500694

8、檢視檔案佔用大小:du

du(disk usage)命令用於檢視分割槽或者目錄所佔用的磁碟大小,常用的命令:du -sh 目錄名,比如 du -sh /*,這樣就能查詢到根目錄的所有檔案和資料夾佔用磁碟的大小

s: 僅顯示指定目錄或檔案的總大小,而不顯示其子目錄的大小。

h:--human-readable 以K,M,G為單位,提高資訊的可讀性。

image-20240719105304570

s引數比較重要,沒有它的話,預設du命令會遞迴查詢所有資料夾及子資料夾、子檔案,瘋狂列印到螢幕上,顯得非常亂,所以如果沒有特殊需要,一般是要加-s引數的。

四、交換分割槽掛載

1、新建分割槽

交換(SWAP)分割槽是一種透過在硬碟中預先劃分一定的空間,然後把記憶體中暫時不常用的資料臨時存放到硬碟中,以便騰出實體記憶體空間讓更活躍的程式服務來使用的技術,其設計目的是為了解決真實實體記憶體不足的問題。通俗來講就是讓硬碟幫記憶體分擔壓力。但由於交換分割槽畢竟是透過硬碟裝置讀寫資料的,速度肯定要比實體記憶體慢,所以只有當真實的實體記憶體耗盡後才會呼叫交換分割槽的資源。

在生產環境中,交換分割槽的大小一般為真實實體記憶體的 1.5~2 倍。

接下來切出一個大小為5G的分割槽用於擴容交換分割槽。

image-20240719110602548

這樣就得到了一個5G的新分割槽sdc2。接下來修改該分割槽型別,將其改為 swap 型別

image-20240719111112629

最後,敲擊w完成分割槽表編輯。

接下來鍵入lsblk命令,可以看到sdc2分割槽已經存在了

image-20240719111636065

2、格式化交換分割槽:mkswap

交換分割槽使用前也要格式化,只是它的格式化命令不是mkfs,而是mkswap,英文全稱是"make swap",語法格式是"mkswap 裝置名稱"

image-20240719112104178

這樣就完成了交換分割槽格式化。

3、啟用交換分割槽:swapon

swapon命令用於啟用新的交換分割槽設別,英文全稱為“swap on”,語法格式為:swapon 裝置名稱

接下來執行命令:swapon /dev/sdc2

為了驗證是否擴容成功,可以使用命令free -m檢視記憶體和交換分割槽的大小

4、檢視記憶體和交換空間大小:free

free 命令顯示系統使用和空閒的記憶體情況,包括實體記憶體、互動區記憶體(swap)和核心緩衝區記憶體。共享記憶體將被忽略。

命令引數:

-b 以Byte為單位顯示記憶體使用情況。

-k 以KB為單位顯示記憶體使用情況。

-m 以MB為單位顯示記憶體使用情況。

-g 以GB為單位顯示記憶體使用情況。

-o 不顯示緩衝區調節列。

-s<間隔秒數> 持續觀察記憶體使用狀況。

-t 顯示記憶體總和列。

-V 顯示版本資訊。

image-20240719113003479

可以看到擴容之後交換空間擴大了5G。

5、修改fstab永久掛載

之前的一次分割槽普通掛載的配置是這樣的

/dev/sdc1               /dir3                   xfs     defaults        0 0

swap分割槽的掛載則是這樣的

/dev/sdc2               swap                    swap    defaults        0 0

也就是掛載目標變成了swap,而非一個目錄;檔案系統型別也是swap,而非普通分割槽的xfs格式。

之後執行命令mount -a或者重啟系統即可生效。

五、解除安裝分割槽

1、解除安裝普通分割槽

其實就是逆向操作,首先,刪除fstab中的記錄

image-20240719132353693

然後umount 命令卸除掛載

umount /dev/sdc1

然後刪除分割槽

image-20240719133412618

之後,再用lsblk命令檢視下分割槽,發現sdc1已經沒了,sdc硬碟下只剩下了sdc2分割槽。

image-20240719134050851

2、解除安裝交換分割槽

還是老規矩,先從fstab檔案中刪除交換分割槽的掛載資訊

image-20240719134338727

然後執行命令swapoff關閉指定的交換分割槽

swapoff /dev/sdc2

最後,刪除分割槽,刪除分割槽的方法和解除安裝普通分割槽一樣。

刪除完畢之後,再看sdc磁碟分割槽,就發現該磁碟已經沒有分割槽了

image-20240719134933435

這時候就可以安全移除磁碟了。

如果沒有爭取的解除安裝磁碟,有可能會導致開機失敗的情況,這點需要注意。

最後,歡迎關注我的部落格:https://blog.kdyzm.cn

相關文章