解鎖 parted 的真正實力:讓你的 Linux 硬碟管理技能 Level Up!

解鎖 parted 的真正實力:讓你的 Linux 硬碟管理技能 Level Up!

在 Linux 系統管理的世界中,磁碟管理是一項無可迴避的核心技能。無論是設定新伺服器、擴充儲存空間,還是優化系統效能,我們都離不開對硬碟磁碟分割區的操作。過去,fdisk 是系統管理員的得力助手,但隨著硬碟容量飛越 2TB 的門檻,fdisk 的 MBR(Master Boot Record)架構已顯得力不從心。

這時,parted (Partition Editor) 應運而生,成為現代 Linux 系統中不可或缺的磁碟分割工具。它不僅完美支援超過 2TB 的大容量硬碟,更引入了先進的 GPT (GUID Partition Table) 分割表格式,提供了更高的穩定性與擴充性。

本篇文章將深入淺出,從基礎概念到進階應用,完整介紹 parted 的使用方式。我們將涵蓋如何分割並掛載一顆全新的硬碟、如何操作與擴充 LVM (Logical Volume Manager),以及如何修復因雲端主機磁碟擴容而產生的空間無法識別問題。

重要提示: parted 是一個強大的工具,其操作動作會立即生效並寫入磁碟。錯誤的操作可能導致資料永久遺失。在進行任何磁碟操作前,請務必備份您的重要資料,並建議在虛擬機或非生產環境的硬碟上先行練習。

parted 基礎知識與安裝

parted vs. fdisk:為何選擇 parted?

為了更清晰地理解 parted 的優勢,以下是它與傳統 fdisk 的比較:

特性 parted fdisk
支援分割表 GPT, MBR 等多種格式 MBR (傳統版本)
最大磁碟大小 幾乎無限制 (ZB 等級) 2TB
最大主分割區數 128 個 (GPT 標準) 4 個
操作模式 變更立即生效 所有變更在寫入前可撤銷
適用情境 現代大容量硬碟、雲端主機、複雜分割需求 舊系統、小於 2TB 的硬碟、簡單分割

總而言之,除非您需要維護僅支援 MBR 的老舊系統,否則 GPT 搭配 parted 應為您的首選

安裝 parted

parted 通常已內建於大多數 Linux 發行版中。如果您的系統尚未安裝,可透過以下指令進行安裝:

  • Debian / Ubuntu / Linux Mint:
    sudo apt-get update sudo apt-get install parted
  • RHEL / CentOS / Fedora (舊版):
    sudo yum install parted
  • Fedora (22 以上版本):
    sudo dnf install parted

parted 操作模式與使用方式

parted 提供兩種主要的操作模式:

  • 互動模式:這是最常見的使用方式。直接執行 sudo parted /dev/sdb 就會進入該disk的互動環境,您會看到類似以下的歡迎訊息:

    GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands. (parted)

    這個畫面告訴我們正在使用 GNU Parted,並已載入 /dev/sdb。提示訊息「Welcome to GNU Parted! Type ‘help’ to view a list of commands.」非常重要,它指導我們輸入 help 以取得幫助。輸入 help 或 ? 後,系統會顯示a list of commands,讓您了解所有可用的動作。

  • 命令列模式:您也可以在執行 parted 時直接帶上指令,讓它執行完畢後自動退出。舉個例:

    sudo parted /dev/sdb print

    這個指令會直接印出 /dev/sdb 的分割表,而不會進入互動模式。

核心操作:掛載一顆全新的硬碟

假設您為系統新增了一顆 4TB 的硬碟,以下是從零開始到成功掛載的完整步驟。

步驟 1:偵測新硬碟

首先,我們需要找出新硬碟在系統中的裝置名稱。

sudo lsblk

您可能會看到類似 /dev/sda (通常是系統碟) 和一顆新的、沒有任何磁碟分割區的 /dev/sdb 或 /dev/sdc。在本範例中,我們假設新硬碟為 /dev/sdb。

步驟 2:啟動 parted 並建立分割表

使用 parted 指令並指定要操作的硬碟。

sudo parted /dev/sdb

進入 (parted) 互動模式後,第一件事就是建立分割表。我們使用 mklabel 指令,並選擇 gpt。

(parted) mklabel gpt

步驟 3:建立分割區

使用 print 指令可以隨時查看目前的分割狀態。

(parted) print

此時您會看到詳細的disk資訊,舉個

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 4295MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags

這裡的 Sector size (logical/physical): 512B/512B 顯示了磁區的logical physical大小,而 Partition Table: gpt 則確認了我們已成功建立 GPT 分割表。

接下來,使用 mkpart 建立分割區。這個動作將建立一個佔用全部空間的主分割區。

# 語法: mkpart [part-type] [fs-type] [start] [end]
(parted) mkpart primary ext4 0% 100%
  • primary: 分割區類型 (在 GPT 下,此參數意義不大,但為習慣用法)。
  • ext4: 這並不會真的格式化,而是設定分割區的類型 ID,方便其他工具識別。
  • 0% 100%: 表示此分割區從磁碟的起始位置延伸到結束位置,佔用全部空間。

再次 print 確認,您會看到一個新的分割區,編號為 1。

步驟 4:格式化分割區

建立分割區後,退出 parted。

(parted) quit

現在,系統中應該出現了 /dev/sdb1 這個裝置。我們需要將其格式化為我們想要的檔案系統,例如 ext4。

sudo mkfs.ext4 /dev/sdb1

步驟 5:掛載分割區

首先,建立一個掛載點目錄。

sudo mkdir /data

接著,將格式化好的分割區掛載到此目錄。

sudo mount /dev/sdb1 /data

步驟 6:設定開機自動掛載

為了讓系統重啟後能自動掛載此硬碟,我們需要編輯 /etc/fstab 檔案。建議使用 UUID 來識別磁碟,因為裝置名稱 (/dev/sdb1) 可能會因硬體變動而改變。

首先,取得新分割區的 UUID。

sudo blkid /dev/sdb1

輸出會像這樣:/dev/sdb1: UUID=”a1b2c3d4-e5f6-7890-1234-56789abcdef0″ TYPE=”ext4″ …

接著,編輯 /etc/fstab:

sudo vi /etc/fstab

在檔案末尾新增一行:

UUID=a1b2c3d4-e5f6-7890-1234-56789abcdef0 /data ext4 defaults 0 0

儲存後,執行 df -h 檢查,您應該能看到 /data 掛載成功,並顯示正確的容量大小。

進階應用:Linux LVM 操作與擴充

LVM (Logical Volume Manager) 提供了比傳統分割更靈活的磁碟管理方式。它允許您將多個實體硬碟或磁碟分割區合併成一個大的儲存池,並從中動態建立、縮小或擴充邏輯捲軸。

LVM 核心概念:

  • PV (Physical Volume, 實體捲軸): LVM 的基礎建材,通常是一個硬碟磁碟分割區 (如 /dev/sda2)。
  • VG (Volume Group, 捲軸群組): 由一個或多個 PV 組成的巨大儲存池。
  • LV (Logical Volume, 邏輯捲軸): 從 VG 中切分出來的、可供格式化與掛載的「虛擬分割區」。

以下場景模擬為一台 VM 增加了硬碟空間,我們需要將此空間擴充到現有的 LVM 根目錄 (/)。

步驟 1:建立新分割區供 LVM 使用

假設您的系統碟 /dev/sda 從 60GB 擴充到了 100GB。使用 parted /dev/sda 進入後,用 print 查看,您會發現磁碟末端多出了 40GB 的未分配空間。

我們將在這段空間建立一個新分割區 (假設為 /dev/sda4)。

(parted) mkpart primary 60GB 100%

接著,設定此分割區的類型為 lvm。

# 語法: set [partition-number] [flag] on
(parted) set 4 lvm on
(parted) quit

步驟 2:建立 PV 並擴充 VG

將剛剛建立的 /dev/sda4 初始化為 PV。

sudo pvcreate /dev/sda4

接著,找到您要擴充的 VG 名稱。

sudo vgdisplay

假設 VG 名稱為 centos,將新的 PV 加入其中。

sudo vgextend centos /dev/sda4

此時,vgdisplay 會顯示 VG 的總容量和可用空間都增加了。

步驟 3:擴充 LV 並調整檔案系統

找到您要擴充的 LV 路徑。

sudo lvdisplay

假設 LV 路徑為 /dev/centos/root。使用 lvextend 指令將所有 VG 中的可用空間都分配給它。

# -l +100%FREE 表示使用所有剩餘的可用空間
sudo lvextend -l +100%FREE /dev/centos/root

最後,也是最關鍵的一步,讓檔案系統感知到 LV 的容量變化。

  • 如果檔案系統是 XFS (CentOS/RHEL 預設):
    bash sudo xfs_growfs /
  • 如果檔案系統是 ext4 (Ubuntu/Debian 預設):
    bash sudo resize2fs /dev/centos/root

步驟 4:驗證結果

執行 df -h,您將會看到根目錄 (/) 的容量大小已成功擴充。

特殊情境:使用 resizepart 修復分割區

在 AWS EC2 或 Azure VM 這類雲端環境中,有時您只是在控制台將現有磁碟(例如系統根目錄所在的磁碟)調大,這時並非新增分割區,而是需要讓現有磁碟分割區”填滿”磁碟擴大的空間。

  1. 執行 lsblk,您會發現磁碟 (xvda) 變大了,但磁碟分割區 (/dev/xvda1) 還是舊的大小。
  2. 執行 sudo parted /dev/xvda。
  3. 使用 print 查看分割區編號(例如 1)和磁碟大小。
  4. 執行 resizepart 指令,舉個例子:
    (parted) resizepart Partition number? 1 # 輸入要調整的磁碟分割區編號 End? [8.6GB]? 100% # 輸入新的結束位置,100% 表示填滿整個磁碟
  5. quit 退出後,同樣需要執行 xfs_growfs 或 resize2fs 來擴充檔案系統,以確保作業系統能使用到完整的/dev/xvda1空間。

常見問題 (FAQ)

Q1: fdisk -l 看得到我的新硬碟,但 parted 沒顯示,怎麼辦?

A: 當您只執行 sudo parted 而不帶任何參數時,它會預設開啟系統的第一顆硬碟 (通常是 /dev/sda)。您必須明確指定要操作的裝置,例如 sudo parted /dev/sdb。進入互動模式後,也可以使用 select /dev/sdb 指令來切換硬碟。

Q2: 我應該使用 GPT 還是 MBR?

A: 強烈建議永遠選擇 GPT,除非您有非常特殊的理由需要與不支持 GPT 的古老系統(例如舊版 BIOS)保持相容。GPT 更穩定、更強大,支援超過 2TB 的硬碟和多達 128 個主分割區,是現代系統的標準。

Q3: parted 和 gparted 有什麼不同?

A: parted 是一個純文字介面的命令列工具,適合在沒有圖形介面的伺服器環境中使用。gparted (GNOME Partition Editor) 則是一個圖形化介面 (GUI) 工具,它底層也是使用 parted 的函式庫。對於桌面使用者或初學者來說,gparted 更直觀易用。

Q4: 擴充 LVM 後,為什麼 df -h 顯示的容量沒變?

A: 這是非常常見的疏忽。LVM 的操作分為兩個層次:區塊裝置層和檔案系統層。lvextend 僅僅是擴大了 LV 這個「容器」的容量。您還必須執行最後一步,也就是使用 xfs_growfs (用於 XFS 系統) 或 resize2fs (用於 ext2/3/4 系統) 來命令「容器」內的檔案系統擴展,以填滿所有可用的新空間。

總結

parted 是現代 Linux 系統管理員的必備工具。掌握它,意味著您能夠自信地處理各種複雜的磁碟管理任務。本文涵蓋了從最基礎的新硬碟掛載,到靈活的 LVM 擴充,再到雲端環境下的分割區修復。

核心要點回顧:

  • 優先選擇 parted 與 GPT 來管理大於 2TB 的硬碟。
  • 分割、格式化、掛載、設定 fstab 是處理新硬碟的標準流程。
  • LVM 的擴充流程為:mkpart → pvcreate → vgextend → lvextend → xfs_growfs/resize2fs。
  • resizepart 是在原磁碟擴容後調整現有磁碟分割區大小的利器。

請謹記,每一次使用 GNU Parted 執行的磁碟動作都伴隨著風險。充分的準備和謹慎的態度,是確保資料安全的最高準則。

資料來源

返回頂端