在 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 這類雲端環境中,有時您只是在控制台將現有磁碟(例如系統根目錄所在的磁碟)調大,這時並非新增分割區,而是需要讓現有磁碟分割區”填滿”磁碟擴大的空間。
- 執行 lsblk,您會發現磁碟 (xvda) 變大了,但磁碟分割區 (/dev/xvda1) 還是舊的大小。
- 執行 sudo parted /dev/xvda。
- 使用 print 查看分割區編號(例如 1)和磁碟大小。
- 執行 resizepart 指令,舉個例子:
(parted) resizepart Partition number? 1 # 輸入要調整的磁碟分割區編號 End? [8.6GB]? 100% # 輸入新的結束位置,100% 表示填滿整個磁碟 - 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 執行的磁碟動作都伴隨著風險。充分的準備和謹慎的態度,是確保資料安全的最高準則。
資料來源
- parted 怎麼用? 如何操作Linux LVM (建立、擴充) 以及掛載全新 …
- Linux 的Parted 指令教學:建立、變更與修復磁碟分割區
- 利用Linux 的Parted 指令修復磁碟分割區