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/sdb1Create and Remove
# Create physical volume
pvcreate /dev/sdb1
pvcreate /dev/sdb1 /dev/sdc1
# Remove physical volume (must remove from VG first)
pvremove /dev/sdb1Move 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/sdc1Volume Groups (VG)
Display Information
# List all volume groups
vgs
vgdisplay
vgdisplay myvgCreate and Remove
# Create volume group
vgcreate myvg /dev/sdb1
vgcreate myvg /dev/sdb1 /dev/sdc1
# Remove volume group (must remove all LVs first)
vgremove myvgExtend and Reduce
# Add physical volume to VG
vgextend myvg /dev/sdd1
# Remove physical volume from VG
vgreduce myvg /dev/sdb1Activate/Deactivate
# Activate volume group
vgchange -ay myvg
# Deactivate volume group
vgchange -an myvgMerge
# Merge vg2 to vg1 (need to first let vg2 inactive)
vgmerge vg1 vg2Rename
# Rename volume group
vgrename oldname newname
vgrename /dev/oldname /dev/newnameLogical Volumes (LV)
Display Information
# List all logical volumes
lvs
lvdisplay
lvdisplay /dev/myvg/mylvCreate 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/mylvExtend 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/mylvActivate/Deactivate
# Activate logical volume
lvchange -ay /dev/myvg/mylv
# Deactivate logical volume
lvchange -an /dev/myvg/mylvSnapshots
# 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_snapRename
# Rename logical volume
lvrename myvg oldlv newlv
lvrename /dev/myvg/oldlv /dev/myvg/newlv