簡介#
Logical Volume Manager
(LVM
, 邏輯卷管理
)是一種在傳統硬碟分割區上在加上一層邏輯層的硬碟管理方式。
相較於傳統的硬碟管理方式,LVM 能夠實現動態的調整硬碟大小,並且依照不同層級分群,在管理上更加直觀。
因此如伺服器、NAS 等較為需要時常調整硬碟空間的環境,LVM 極為實用。
p.s. 以下所提之指令可能需要 root 權限執行。
層級概念#
其層級概念由底層到高層分別可以劃分成如下:
Physical Volume
(PV
,物理卷
)
指的是實體的儲存空間,如完整的硬碟或其分割區,例如/dev/sda
、/dev/sda1
…等。Volume Group
(VG
,卷組
)
如同名稱是個群組,裡頭可以有一個或多個PV
組成。Logical Volume
(LV
,邏輯卷
)
在傳統的硬碟分區中,若設其為PV
、VG
後,則該分區的概念在 LVM 中應當被看作整顆實體硬碟。
而LV
便是從VG
劃分的「硬碟分區」,概念與傳統硬碟分區很像,可以對其進行格式化、掛載、安裝系統等操作,差別在於LV
可以更加動態的調整大小。Physical Extent
(PE
,物理區塊
)
LVM 把PV
劃分成固定大小的PE
(如 4MB),而這些PE
是分配LV
的最小單位。(LV
的大小實際上就是由PE
數量決定的)
而我們通常只須重點關注於VG
及LV
即可,操作時通常圍繞在這兩個層面。
安裝#
以 Ubuntu 為例,可以使用apt
直接安裝:
1apt install lvm2
安裝完後可以透過指定pvs
、vgs
、lvs
查看現有的PV
、VG
、LV
。(一開始安裝完應該會是空的)
創建 PV#
選定要使用 LVM 的實體硬碟或分區,並透過pvcreate
指定初始化 PV,
舉例欲將/dev/sdb
及/dev/sdc1
使用 LVM:
1pvcreate /dev/sdb /dev/sdc1
查看當前的PV
:
1pvs
p.s. 可以使用指令df -h
查看硬碟及分區
創建 VG#
接著將一個或多個PV
以指令vgcreate
設為一個VG
,舉例以先前創建的/dev/sdb
及/dev/sdc1
為例:
1vgcreate vg0 /dev/sdb /dev/sdc1
其中vg0
為VG
的名稱,可以自行命名,但請避免特殊符號及空格。
接著查看當前的VG
:
1vgs
若是往後有新的PV
空間要擴展進VG
,則只需要使用指令vgextend
即可:
1# 舉例擴展 /dev/sdd 至 vg0
2vgextend vg0 /dev/sdd
創建 LV#
透過指令lvcreate
創建LV
:
1lvcreate -L 20G -n lv0 vg0
這將以vg0
分割出一個 20GB 大小的 LV 並命名為lv0
(可以自行修改)。
如果想將整個VG
的剩餘空間都劃分為LV
,則可以使用如下寫法:
1lvcreate -l 100%FREE -n lv0 vg0
查看當前的LV
:
1lvs
使用 LV#
先前說過 LV 如同硬碟分區,因此我們可以像正常分區一樣的使用它,例如格式化:
1mkfs.ext4 /dev/vg0/lv0
然後掛載:
1mkdir /mnt/lv_data
2mount /dev/vg0/lv0 /mnt/lv_data
擴增 LV#
具體步驟如下,假設欲擴增VG
剩餘空間的 10GB 到lv0
:
1lvextend -L +10G /dev/vg0/lv0
或者也可以將所有的剩餘空間給lv0
:
1lvextend -l +100%FREE /dev/vg0/lv0
接著必須讓檔案系統重新掃描變更後的硬碟,
如果你的 LV 已經格式化成ext4
檔案系統,則使用resize2fs
指令,並支援在線
、離線
調整:
1resize2fs /dev/vg0/lv0
若為xfs
則使用xfs_growfs
指令,但只支援在線
調整:
1xfs_growfs /mnt/lv_data
接著確認 LV 大小是否擴增正確:
1lvs
LV 縮減?#
該操作相較於前面的這些步驟更為危險,若操作不當將可能導致資料毀損。
關於這部份請見下一篇文章解說:「LVM 安全的縮小 LV 的空間」。