Linux 學習 第十二章 管理磁碟和檔案系統

📢 本文由 gemini-2.5-flash 翻譯

第十二章 管理磁碟和檔案系統

12.1 了解磁碟儲存體

在大多數現代作業系統中,資料儲存體的基本運作原理都是相同的。磁碟用作永久儲存體,而 RAM (Random Access Memory,隨機存取記憶體) 和交換空間則用作臨時儲存體。例如,當執行一條指令時,該指令將從硬碟複製到 RAM,以便電腦處理器 (CPU) 可以更快地存取該指令。

相對於從硬碟存取資料,CPU 可以更快地從 RAM 存取資料。但因為 RAM 造價過高,且斷電即清除資料,硬碟容量遠大於 RAM。

當執行太多程序或執行了一個帶有記憶體洩漏的程序而將 RAM 填滿時,如果系統沒有提供一種擴展系統記憶體的方法,則會導致新程序失敗,於是便有了交換空間。採用一些演算法將一些資料從 RAM 中換到磁碟中,在需要時再換回去。

當需要在不同類型的作業系統之間交換檔案時,通常採用 VFAT 檔案系統。

12.2 對硬碟進行分割

變更分割區可能導致系統無法啟動,建議先拿空硬碟熟練掌握後再實際應用。

12.2.1 理解分割區表

從傳統上來說,PC 架構的電腦使用 MBR (Master Boot Record,主引導紀錄) 分割區表來儲存關於硬碟分割區大小和佈局資訊。然而,近年來,一種被稱為 GUID (Global Unique Identifier) 分割區表的新標準在部分 UEFI 電腦架構的電腦上得到了應用,從而取代了較老的 BIOS 系統啟動方法。

MBR 規範所固有的限制帶來了對 GUID 分割的需求。MBR 分割區的大小被限制在 2TB,而 GUID 分割區可以建立最大 9.4ZB 的分割區。

fdisk 指令不支援 GPT 分割,可以使用 parted 指令。

12.2.2 查看磁碟分割區

fdisk -l /dev/sdaparted -l /dev/sdb

  • 由 sd? 裝置 (如 sda、sdb 等) 所表示的 SCSI 或 USB 儲存裝置最多可以有 16 個次要裝置 (比如主 /dev/sdc 裝置以及 /dev/sdc1 到 /dev/sdc15),所以共有 15 個分割區。

  • 由 nvme 裝置 (如 nvme0、nvme1 等) 所表示的 NVMe SSD 儲存裝置可以劃分一個或多個命名空間 (大多數裝置只使用第一個) 和分割區,例如 /dev/nvme0n1p1 表示第一個 NVMe 裝置上第一個命名空間的第一個分割區。

  • 對於 x86 電腦,磁碟最多可以有 4 個主要分割區。所以如果想要 4 個以上的分割區,至少有一個分割區是延伸分割區。四個主要分割區外的任何分割區都是邏輯分割區,使用了來自延伸分割區的空間。

12.2.3 建立單一分割區硬碟

一般添加一個儲存媒介的過程:

  1. 安裝新的硬碟或插入新的 USB 隨身碟。
  2. 對新硬碟進行分割。
  3. 在新硬碟上建立檔案系統。
  4. 掛載檔案系統。

如果使用 parted 指令進行修改,請謹慎執行每一步,因為 parted 指令的變更會立即生效。 而 fdisk 指令是可撤銷的,只有在確定應用變更時才會實際變更。

資料無價,謹慎操作。

  1. 確認新增加的裝置名稱。

    方法有許多,例如查看系統日誌:

    journalctl -f

    例如分配的名稱為 /dev/sdb。

  2. 如果裝置自動掛載需要先卸載。

    查看是否掛載 /dev/sdb:mount | grep sdb

    卸載分割區:umount /dev/sdb1

  3. 使用 parted 指令建立分割區。

    parted /dev/sdb

    執行後將處於 parted 指令模式,可以使用 parted 單一字母指令設定來使用分割區。

4.刪除分割區。

單一指令 `p` 列出所有分割區。

使用 `rm` 指令,按下 Enter 後輸入相對應 `Number` 即可刪除某個分割區。
  1. 建立 GPT 分割區表。

    使用指令 mklabel gpt

  2. 建立新分割區。

    輸入 mkpart 指令,系統會提示輸入分割區名稱、檔案系統類型,然後是分割區的開始和結束。

    例如命名 yexca-UDisk,檔案類型為 xfs,分割區從 1MB 開始,到 123GB 結束:

1
2
3
4
5
(parted) mkpart
Partition name? []? yexca-UDisk
File system type? [ext2]? xfs
Start? 1
End? 123GB
  1. 檢查分割區是否正確建立。

    單一指令 p 列出所有分割區。

  2. 分割區建立完成後需要在分割區上建立檔案系統。

    例如建立 XFS 檔案系統:mkfs -t xfs /dev/sdb1

    若沒有 -t 選項,預設建立 EXT2 檔案系統。

  3. 掛載檔案系統。

1
2
3
4
# 建立掛載資料夾
mkdir /mnt/tmp
# 掛載 /dev/sdb1 到 /mnt/tmp
mount /dev/sdb1 /mnt/tmp
  1. 卸載檔案系統。

    使用指令 umount /dev/sdb1

一般來說,插入 USB 裝置會自動掛載。

如果需要手動掛載,可在 /etc/fstab 添加一行:

1
/dev/sdb1    /mnt/tmp    xfs    defaults    0  1

共六段:

  1. 分割區
  2. 掛載的資料夾
  3. 檔案系統
  4. 分割區啟動時掛載
  5. 是否使用 dump 指令備份分割區檔案 (0 為不備份)
  6. 在一定的掛載數量之後對分割區進行錯誤檢查

12.2.4 建立多重分割區磁碟

使用 fdisk 指令介紹。

  1. 進入 fdisk 指令模式。

    fdisk /dev/sdb

  2. 建立分割區。

    單一指令 n,然後選擇主要分割區 p 或延伸分割區 e,選擇分割區位置 (預設即可)。

    然後是分配的空間,起始空間可以預設,按下 Enter 後輸入結束空間:例如分配 5 GB 空間則輸入 +5G,若直接輸數字則會被認為是磁區。

    第四個分割區,即延伸分割區,分配空間可以兩次都是預設。

  3. 檢查分割區。

    單一指令 p

  4. 預設的分割區類型是 Linux,如果想要轉換分割區類型。

    使用指令 t,選擇分割區數,然後輸入 L 查看分割區類型列表,找到十六進位碼,然後輸入以變更。

  5. 檢查變更並儲存變更。

    單一指令 p 以檢查,單一指令 w 以儲存變更。

  6. 變更完畢後,檢查核心是否知道對分割區表的變更。

1
2
3
4
5
grep sdb /proc/partitions
# 如果沒有輸出預期的結果,執行以下指令
partprobe /dev/sdb
# 再次檢查
grep sdb /proc/partitions
  1. 建立檔案系統。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 建立 EXT4 檔案系統
mkfs -t ext4 /dev/sdb1
# 建立交換空間
mkswap /dev/sdb2
# 建立 EXT2 檔案系統 (預設值)
mkfs /dev/sdb3
# 建立 VFAT 檔案系統
mkfs -t vfat /dev/sdb4
# 使該分割區成為 LVM 實體卷宗
pvcreate /dev/sdb5

12.3 使用邏輯卷宗管理分割區

如果磁碟空間不足,恐怕只能將資料複製到另一個更大的磁碟中,但該過程需要停機且效率低下。

LVM (Logical Volume Management,邏輯卷宗管理) 可採用靈活且高效的方式處理變更儲存體的需求。透過使用 LVM,可將實體磁碟分割區添加到被稱為 卷宗群組 的空間池。邏輯卷宗根據需要從卷宗群組分配空間。

12.3.1 檢查現有的 LVM

使用指令 fdisk -l /dev/sda 查看是否存在 Linux LVM 分割區,假設 /dev/sda2 為 LVM 分割區。

查看該 LVM 分割區是否在 LVM 群組中使用。

pvdisplay /dev/sda2

假設卷宗群組 (VG Name) 是 vg_abc,查看卷宗群組的資訊。

vgdisplay vg_abc

可以從實體卷宗使用的最小儲存單位是 PE (Physical Extent) 大小。

查看卷宗群組的 PE 分配位置。

lvdisplay vg_abc

輸出將展示多個邏輯卷宗名稱,這些邏輯卷宗可以和實體卷宗一樣直接使用名稱進行掛載。

image

12.3.2 建立 LVM 邏輯卷宗

LVM 邏輯卷宗的使用是由上而下進行的,而建立 LVM 邏輯卷宗的過程則是由下而上進行。首先建立一個或多個實體卷宗 (PV),然後使用實體卷宗建立卷宗群組 (VG),最後從卷宗群組建立邏輯卷宗 (LV)。

  1. 準備一個有 LVM 分割區的儲存裝置。

    建立過程 12.2.4 有提及。

  2. 將該實體卷宗加入卷宗群組。

    vgcreate myvg0 /dev/sdb5

  3. 查看卷宗群組。

    vgdisplay myvg0

  4. 若分割區為 400M,可以使用 396M 空間 (以 4M 為單位)。

1
2
3
4
5
6
# 從卷宗群組部分空間建立一個邏輯卷宗,例如建立 1G 邏輯卷宗
lvcreate -n name -L 1G myvg0
# 查看該邏輯卷宗是否存在
ls /dev/mapper/myvg0*
# 若輸出以下內容則建立成功
/dev/mapper/myvg0-name
  1. 放入檔案系統並掛載。
1
2
3
4
5
6
7
8
# 建立 EXT4 檔案系統
mkfs -t ext4 /dev/mapper/myvg0-name
# 建立掛載資料夾
mkdir /mnt/tmp
# 掛載
mount /dev/mapper/myvg0-name /mnt/tmp
# 檢查是否掛載成功
df -h /mnt/tmp
  1. 或者也可以寫入 /etc/fstab 以自動掛載。

12.3.3 擴展 LVM 邏輯卷宗

如果用完邏輯卷宗的空間,可添加空間而不必卸載該邏輯卷宗。為此,卷宗群組中必須有可用的空間,然後擴展邏輯卷宗。

  1. 檢查剩餘空間。
1
2
3
4
# 檢查卷宗群組可用空間
vgdisplay myvg0
# 檢查邏輯卷宗可用空間
df -h /mnt/tmp
  1. 擴展邏輯卷宗。

    lvextend -L +1G /dev/mapper/myvg0-name

  2. 調整檔案系統大小。

    resize2fs -p /dev/mapper/myvg0-name

  3. 檢查是否調整成功。

    df -h /mnt/tmp

12.4 掛載檔案系統

事實上在上兩節中已經涉及了掛載檔案系統指令 mount 以及自動掛載設定 (檔案 /etc/fstab)。

12.4.1 支援的檔案系統

輸入指令 cat /proc/filesystems 以查看支援的檔案系統類型,以下僅部分。

檔案系統描述
ext4流行 EXT3 檔案系統的繼承者。支援最大 1EB 的卷宗以及最大 16 TB 的檔案
iso9660從 High Sierra 檔案系統 (CD-ROM 的原始標準) 演變而來。資料 CD-ROM 通常使用該檔案系統
Minix最初用於 UNIX 的 Minix 版本。支援最多只有 30 個字元的檔案名稱
msdosMS-DOS 檔案系統類型,可用於掛載來自 Windows 作業系統的軟碟
vfatMicrosoft 擴展的 FAT 檔案類型
exfat為 SD 卡、USB 隨身碟和其他快閃記憶體優化的擴展 FAT 檔案系統
proc並非真正的檔案系統。是 Linux 核心的檔案系統介面。/proc 的掛載點應該是一個 proc 檔案系統。許多公用程式依賴 /proc 才能存取 Linux 核心資訊
ReiserFS日誌檔案系統。曾經多個 Linux 發行版本的預設檔案系統類型,但如今是 EXT 和 XFS
swap用於交換空間
squashfs壓縮且唯讀的檔案系統類型
NFSNetwork Filesystem,用於在其他 Linux 或 UNIX 電腦上掛載檔案系統
ntfsWindows NT 檔案系統
xfs最早由 Silicon Graphics 開發的高效能檔案系統,可很好地使用大型檔案
gfs2一種共享磁碟檔案系統,允許多台電腦使用相互溝通的共享磁碟,而不必透過網路檔案系統層,如 CIFS、NFS 等

輸入 man fs 了解更多 Linux 檔案系統相關資訊。

12.4.2 啟動交換空間

1
2
3
4
5
6
# 查看交換空間數量
free -m
# 建立交換空間
mkswap /var/opt/myswap
# 啟用交換空間
swapon /var/opt/myswap

如果在 /etc/fstab 添加了交換空間相關條目,如:

/var/opt/myswap swap swap defaults 0 0

可以使用 swapon -a 啟用。

12.4.3 停用交換空間

swapoff /var/opt/myswap

12.4.4 使用 fstab 檔案定義可掛載的檔案系統

12.2.3 已介紹,不過欄位二可以使用 UUID 而非裝置名稱,因為裝置名稱是可變的。

查看 UUID:blkid

12.4.5 使用 mount 指令掛載檔案系統

同樣在 12.2.3 已介紹。

12.4.6 以迴送方式掛載磁碟映像檔

也就是將 ISO 映像檔掛載。

1
2
3
4
# 建立掛載資料夾
mkdir /mnt/tmp
# 掛載
mount -o loop name.iso /mnt/tmp

12.4.7 使用 umount 指令

可以輸入裝置分割區名稱或目錄名稱。

裝置分割區名稱:umount /dev/sdb1

目錄名稱:umount /mnt/tmp

通常,最好使用目錄名稱。

如果一個目錄正忙碌而無法被卸載,可以:

  • 延遲卸載:umount -l

  • 強制卸載:umount -f

12.5 使用 Cockpit 管理儲存體

圖形使用者介面,啟用請參考第八章。