LVM

核心類比:城市水資源管理系統

LVM 就像現代城市的水資源分配系統,將分散的資源整合後靈活分配。

傳統硬碟分割 vs LVM:古代井水系統(用完就沒了)vs 現代自來水系統(統一調配)。

三層架構

Physical Volume (PV) = 天然水源 實體硬碟或分割區,就像河流、湖泊等各種水源。每個都有固定容量,但可以整合利用。

Volume Group (VG) = 統一水庫 將多個 PV 整合成統一的儲存資源池。關鍵是抽象化——你不再關心資料存在哪個具體硬碟上,只看到一個大的可用空間。可隨時加入新硬碟擴容,就像接入新水源到水庫系統。

Logical Volume (LV) = 用水配額 從 VG 中分配給不同用途的邏輯空間(如系統碟、資料碟)。重點是動態調整——可以即時縮放各分割區大小,就像調整不同區域的用水配額。

運作思維

儲存檔案時的流程:選擇 LV → 檢查空間 → 從 VG 分配儲存塊 → 系統自動決定實際位於哪個 PV。

就像開水龍頭:你不需知道水來自哪條河,只需要有足夠水量即可。

核心價值

LVM 的精神是管理靈活性:從固定死板的分割配置進化為動態智慧的空間分配。三層分工讓每層專注自己職責,同時保持系統簡潔性。

常用指令

Physical Volumes (PV)

Display Information

# List all physical volumes
pvs
pvdisplay
pvdisplay /dev/sdb1

Create and Remove

# Create physical volume
pvcreate /dev/sdb1
pvcreate /dev/sdb1 /dev/sdc1
 
# Remove physical volume (must remove from VG first)
pvremove /dev/sdb1

Move Data

# Move data from one PV (sdb1) to another within same VG (sdc1)
pvmove /dev/sdb1 /dev/sdc1
 
# Move specific logical volume
pvmove -n mylv /dev/sdb1 /dev/sdc1

Volume Groups (VG)

Display Information

# List all volume groups
vgs
vgdisplay
vgdisplay myvg

Create and Remove

# Create volume group
vgcreate myvg /dev/sdb1
vgcreate myvg /dev/sdb1 /dev/sdc1
 
# Remove volume group (must remove all LVs first)
vgremove myvg

Extend and Reduce

# Add physical volume to VG
vgextend myvg /dev/sdd1
 
# Remove physical volume from VG
vgreduce myvg /dev/sdb1

Activate/Deactivate

# Activate volume group
vgchange -ay myvg
 
# Deactivate volume group
vgchange -an myvg

Merge

# Merge vg2 to vg1 (need to first let vg2 inactive)
vgmerge vg1 vg2

Rename

# Rename volume group
vgrename oldname newname
vgrename /dev/oldname /dev/newname

Logical Volumes (LV)

Display Information

# List all logical volumes
lvs
lvdisplay
lvdisplay /dev/myvg/mylv

Create and Remove

# Create logical volume
lvcreate -L 10G -n mylv myvg
lvcreate -l 100%FREE -n mylv myvg
lvcreate -l 50%VG -n mylv myvg
 
# Remove logical volume
lvremove /dev/myvg/mylv

Extend and Reduce

# Extend logical volume
lvextend -L +5G /dev/myvg/mylv
lvextend -l +100%FREE /dev/myvg/mylv
 
# Reduce logical volume (dangerous - backup first!)
lvreduce -L -2G /dev/myvg/mylv
lvreduce -L 8G /dev/myvg/mylv

Activate/Deactivate

# Activate logical volume
lvchange -ay /dev/myvg/mylv
 
# Deactivate logical volume
lvchange -an /dev/myvg/mylv

Snapshots

# Create snapshot (-s)
lvcreate -L 1G -s -n mylv_snap /dev/myvg/mylv
 
# Mount snapshot
mount /dev/myvg/mylv_snap /mnt/snapshot
 
# Remove snapshot
lvremove /dev/myvg/mylv_snap

Rename

# Rename logical volume
lvrename myvg oldlv newlv
lvrename /dev/myvg/oldlv /dev/myvg/newlv