傳統分區大小固定,調整需重分區風險極高。LVM (Logical Volume Manager) 在塊設備與文件系統間引入邏輯層,實現**不停機、不丟數據、跨物理盤**的彈性空間管理。本文完整演示 LVM 構建、擴容、縮容、新增盤擴展全流程。
| 層級 | 術語 | 對比傳統 | 說明 |
|---|---|---|---|
| 物理層 | PV (Physical Volume) | 磁盤分區 /dev/sdb1 | 底層存儲塊,打上 LVM 標籤 |
| 聚合層 | VG (Volume Group) | 物理硬盤 | 由 1 個或多個 PV 組成的存儲池 |
| 邏輯層 | LV (Logical Volume) | 磁盤分區 | 從 VG 切割的邏輯分區,可格式化掛載 |
| 分配單元 | PE (Physical Extent) | 簇/塊 | PV 中最小分配單元,默認 4MB |
| 映射單元 | LE (Logical Extent) | 簇/塊 | LV 中最小單元,與 PE 1:1 映射 |
關鍵優勢:
• VG 可跨多塊物理硬盤 (異構無感)。
• LV 大小動態調整,不受物理分區邊界限制。
• 支持快照、鏡像、條帶化 (RAID 0/1/10)。
# 檢查安裝
rpm -qa | grep lvm
# lvm2-2.02.x system-config-lvm
# 未安裝時
yum install lvm2 -y
fdisk /dev/sdb
# n → p → 1 → 回車 → +5G → t → 8e → w
fdisk /dev/sdc
# 同上創建 /dev/sdc1
pvcreate /dev/sdb1 /dev/sdc1
# Physical volume "/dev/sdb1" successfully created
vgcreate vg_data /dev/sdb1 /dev/sdc1
# Volume group "vg_data" successfully created
vgchange -ay vg_data
vgdisplay vg_data
pvdisplay /dev/sdb1
# 指定大小創建
lvcreate -L 8G -n lv_web vg_data
# 使用剩餘所有空間 (按 PE 數)
vgdisplay vg_data | grep "Free PE"
# Free PE / Size 255 / 1.00 GB
lvcreate -l 255 -n lv_log vg_data
mkfs.ext4 /dev/vg_data/lv_web
mkfs.xfs /dev/vg_data/lv_log
mkdir /web /log
mount /dev/vg_data/lv_web /web
mount /dev/vg_data/lv_log /log
df -h /web /log
blkid /dev/vg_data/lv_web
# UUID=xxxx /web ext4 defaults 0 0
# UUID=yyyy /log xfs defaults 0 0
前提:VG 有剩餘空間 (或新增 PV)。文件系統支持線上擴容 (ext4/xfs 支持,ext2/3 需卸載)。
# 1. 擴容 LV (+5G)
lvextend -L +5G /dev/vg_data/lv_web
# 2. 擴容文件系統
resize2fs /dev/vg_data/lv_web # ext4
xfs_growfs /web # xfs (掛載點)
# 3. 驗證
df -h /web
# 1. 新盤分區 /dev/sdd1 類型 8e
fdisk /dev/sdd
# 2. 創建 PV
pvcreate /dev/sdd1
# 3. 擴展 VG
vgextend vg_data /dev/sdd1
# 4. 驗證 VG 空間增大
vgdisplay vg_data
# 5. 按需擴容 LV
lvextend -L +10G /dev/vg_data/lv_web
resize2fs /dev/vg_data/lv_web
⚠️ 僅支持 ext4/ext3,xfs 不支持縮容!
步驟:
umount /webe2fsck -f /dev/vg_data/lv_webresize2fs /dev/vg_data/lv_web 5Glvreduce -L 5G /dev/vg_data/lv_webmount /dev/vg_data/lv_web /web黃金法則:文件系統縮容尺寸 ≤ LV 目標尺寸,否則數據截斷!
| 任務 | 命令 |
|---|---|
| 掃描所有 LVM | lvm pvscan / vgscan / lvscan |
| 顯示詳情 | pvdisplay / vgdisplay / lvdisplay |
| 移除 PV | vgreduce vg_data /dev/sdb1 → pvremove /dev/sdb1 |
| 刪除 LV | lvremove /dev/vg_data/lv_old |
| 刪除 VG | vgremove vg_data |
| 創建快照 | lvcreate -L 2G -s -n lv_web_snap /dev/vg_data/lv_web |
| 合併快照 | lvconvert --merge /dev/vg_data/lv_web_snap |
vg_<業務>_<環境>、lv_<用途> (如 vg_data_prod, lv_mysql)。vgdisplay 解析 Free PE,接入 Prometheus/Grafana。Linux CentOS 關機與重啟命令大全:shutdown、reboot、halt、init 詳解
Linux 核心編譯 ld: cannot find /ubuntu/omnibook/sections.lds 錯誤修正:Makefile 路徑修正
Magento 檔案與目錄權限設定完整指南:SSH、後台與 PHP 三種方式
自製 Linux USB 啟動盤:從內核編譯到雙系統共存完整教學
Linux Setuid/Setgid/Sticky Bit 實戰演練:團隊共享目錄權限控制
UDP Socket 編程詳解:connect、bind、sendto/send 在無連接協議中的角色