LVM(Logical Volume Manager,邏輯磁區管理員)
原先用於 IBM AIX 系統,後來移植到 Linux 系統,使 Linux 系統也具備了彈性分割磁碟的功能。
lvm 能夠合併多個分割區或是實體磁碟(lvm 稱其爲 PV),成爲一個大的磁區羣組(lvm 稱其爲 VG)。此時這個磁區羣組可視爲一個虛擬磁碟,可以如同分割實體硬碟一樣,將磁區羣組分割爲多個邏輯磁區(LVM 稱其爲 LV)。
PV:Physical Volume 實體磁區。不論是實體硬碟或是已經設定好的分割區,LVM 都會將其視爲一個 PV。
VG:Volume Group 磁區羣組。一個以上的 PV 能夠組成一個 VG,可將 VG 視爲一個龐大的虛擬硬碟。
LV:Logical Volume 邏輯磁區。一個 VG 能分割爲數個 LV,可以將 LV 視爲虛擬的分割區。
PE:Physical Extent,lvm 在建立 VG 時,會將其中的 PV 切割爲許多大小相等的區塊,這些區塊稱爲 PE,預設大小爲 4 MB。
LE:Logical Extent,lvm 在建立 LV 時,會將其切割爲許多大小相等的區塊,這些區塊稱爲 LE。LE 的大小必須是 PE 的倍數,不過一般都設定爲兩者大小相等。
檢查安裝 lvm
# rpm -qa|grep lvm
lvm2-2.02.56-8.el5
system-config-lvm-1.1.5-4.el5
啓動與關閉 LVM
完成事先的準備工作後,便可以啓動 lvm,第一次使用 lvm 時,請使用下面指令掃描並建立初始化環境:
# vgscan
如果之前會經使用 lvm 建立虛擬磁碟,執行下面指令便可以啓動目前系統上的所有 VG:
# vgchange –ay
若要關閉目前系統上所有 VG,請執行下面指令:
# vgchange –an
大多數發行版於開機時便會自動執行 vgscan 與 vgchange -ay,所以通常不需要特別執行啓動的指令。不過稍後建立虛擬磁區時,若是出現 lvm 未啓動之類的訊息,請自行執行啓動 LVM。
~~~~~~~~~~~~~
新增與移除 PV
~~~~~~~~~~~~~
當啓動 LVM 之後,便可以開始建立虛擬磁區。首先必須建立 PV,前面已經提到 PV 可以由分割區或是實體磁碟組成,如果想要將實體硬碟建立爲 PV,請直接如下使用 pvcreate 指令即可:
# pvcreate /dev/hdd
若想要將分割區建立爲 PV,必須多一個設定分割區的動作。例如想要將 /dev/hda7 建立爲 PV,則如下操作:
# fdisk /dev/had
Command (m for help): p ----->列出硬碟的分割區狀態
Command (m for help): t ----->重新設定系統代號
Partition number (1-4): 7 ----->選擇第 7 號分割區
Hex code (type L to list codes): 8e ----->輸入 8e 此爲 LVM 的系統代號
# pvcreate /dev/hda7
PV 建立後,使用 pvdisplay 指令可觀察系統上的 PV:
# pvdisplay
"/dev/sdb" is a new physical volume of "20.00 GB"
--- NEW Physical volume ---
PV Name /dev/sdb ---------->PV 的名稱
VG Name ---------->隸屬於哪一個 VG
PV Size 20.00 GB ---------->PV 的容量大小
Allocatable NO ---------->此 PV 是否已經被系統使用
PE Size (KByte) 0 ---------->每個 PE 的大小
Total PE 0 ---------->總有多少 PE
Free PE 0 ---------->可用的 PE 數量
Allocated PE 0 ---------->已用的 PE 數量
PV UUID E783x2-1Xg0-p0tC-xAug-DgX8-wmq5-Hi1TQ2
若要移除 PV,則請如下使用 pvremove 指令:
# pvremove /dev/hda7
~~~~~~~~~~~~~~
新增與移除 VG
~~~~~~~~~~~~~~
例如,已經建立了 /dev/hda7 與 /dev/hdd5 兩個 PV,想要將這兩個 PV 合併爲一個 VG,此時可以如下使用 vgcreate 指令建立 VG:
# vgcreate home_vg /dev/hda7 /dev/hdd5
建立 VG 後,可以如下使用 vgdisplay 觀察系統中的 VG:
# vgdisplay -v home_vg
--- Volume group ---
VG Name home_vg ----->VG 的名稱
System ID
Format lvm2 ----->VG 的格式
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 20.76 GB ----->VG 的容量大小
PE Size 4.00 MB ----->VG 內每個 PE 的大小
Total PE 5315 ----->VG 內 PE 總數量
Alloc PE / Size 0 / 0 ----->VG 內已用 PE 數量與已用的容量大小
Free PE / Size 5315 / 20.76 GB --->VG 內可用 PE 數量與可用的容量大小
注意:若不加 VG 名稱,只執行 vgdisplay 或 vgdisplay -v 的話,將顯示系統上所有 VG 的資訊。
若要移除 VG,請如下操作:
# vgchange -a n home_vg ----->關閉名稱爲 home_vg 的 VG
# vgremove home_vg
~~~~~~~~~~~~~~
新增與移除 LV
~~~~~~~~~~~~~~
使用 lvcreate 指令,在名稱爲 home_vg 的 VG 上,建立兩個 LV:
# lvcreate -L5000 -n home1_lv home_vg
-L 參數指定 LV 的大小爲 5000MB,也可以使用“2.5G”表示 2.5GB,或是“15000K”代表“15000KB”
-n 參數設定此 LV 的名稱
如果沒有使用“-n”參數指定 LV 名稱,LVM 將自動依序使用 lvol0、lvol2 等名稱命名:
# lvcreate -L500 home_vg
可以使用 lvrename 指令,更改現有 LV 的名稱:
# umount /dev/home_vg/lvol0
# lvrename /dev/home_vg/lvol0 var_lv
建立了 LV 後,可以如下使用 lvdisplay 觀察系統中的 LV:
# lvdisplay
--- Logical volume ---
LV Name /dev/home_vg/home1_lv ----->LV 的名稱
VG Name home_vg ----->所屬的 VG 名稱
LV Size 1.00 GB ----->LV 的容量大小
Current LE 256 ----->LV 的 LE 個數
Segments 2 ----->此 LV 共跨越兩個 PV
LV 建立之後,便可以當成一般分割區使用:
# mkfs.ext3 /dev/home_vg/home1_lv 或者 # mke2fs -j /dev/home_vg/home2_lv
# mount /dev/home_vg/home1_lv /home
# df –h
/dev/mapper/home_vg-home1_lv
1008M 34M 924M 4% /home
若想移除 LV,請如下使用 lvremove 指令:
# umount /dev/home_vg/home1_lv
# lvremove /dev/home_vg/home1_lv
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
正在運作的 VG 中新增或移除 PV
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
當 VG 容量不夠時,可以添加一顆硬碟,或是從現有的硬碟中尋找可用的分割區,然後將其建立 PV,接着將此新 PV 加入 VG 中,便可以立刻增加 VG 的容量。
例如:想要將 /dev/hda8 加入名稱爲 home_vg 的 VG,則先使用 fdisk 更改 /dev/hda8 分割區的系統代碼,然後執行如下:
# pvcreate /dev/hda8
# vgextend home_vg /dev/hda8
# vgdisplay -v home_vg
~~~~~~~~~~~~~~~~~~~~~~~~~~
正在運作的 VG 中移除 PV
~~~~~~~~~~~~~~~~~~~~~~~~~~
當硬碟使用已久需要更換,或是想要將某一個分割區移作他用,此時便必須將 PV 從正運作的 VG 中移除。
# pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name home_vg
PV Size 20.00 GB / not usable 4.00 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 5119
Free PE 4482 ----->可用的 PE 數量
Allocated PE 637 ----->已用的 PE 數量爲 637
--- Physical volume ---
PV Name /dev/sdc1
VG Name home_vg
PV Size 784.39 MB / not usable 402.50 KB
Allocatable yes
PE Size (KByte) 4096
Total PE 196
Free PE 196
Allocated PE 0 ----->已用 PE 爲 0
如果想要移除 /dev/sdc1,因爲其已用 PE 爲 0,也就是其空間沒有尚未被任何檔案所使用,則可以如下直接使用 vgreduce 指令將其移除:
# vgreduce home_vg /dev/sdc1
若需要移除的是 /dev/hdd5,由於其空間已經被檔案所使用,所以會得到下面的錯誤訊息:
# vgreduce home_vg /dev/hdd5
Physical volume "/dev/hdd5" still in use -->正在使用中,無法直接移除
此時必須先將 /dev/hdd5 內的檔案搬移到其他 PV 後,才能將其移除。
如果 /dev/hdd5 所屬的 VG(home_vg)仍有足夠的可用空間,便可以使用 pvmove 指令搬移 /dev/hdd5 內的檔案至其他 PV。
# vgdisplay -v home_vg
......
Free PE / Size 9600 / 37.50 GB
......
# pvmove -v /dev/hdd5 --->搬移 /dev/hdd5 內的檔案
pvmove 指令會自動尋找 VG 中可用的 PV,然後將檔案搬移過去。也可以如下指定將 /dev/hdd5 搬移到 /dev/hda8:
# pvmove -v /dev/hdd5 /dev/hda8
~~~~~~~~~~~~~~~~~~~~~~~~
擴大與縮小 LV 的容量
~~~~~~~~~~~~~~~~~~~~~~~~
在 VG 中加入新的 PV,擴充 VG 總容量後,可能會想要將新增的容量加入現有的 LV,此時可以如下使用 lvextend 指令擴大 LV 容量:
# lvextend -L+1G /dev/home_vg/home1_lv
Extending logical volume home1_lv to 2.00 GB
Logical volume home1_lv successfully resized
# lvextend -L2G /dev/home_vg/home2_lv
Extending logical volume home2_lv to 20.00 GB
Logical volume home2_lv successfully resized
-L2G 將 /dev/home_vg/home2_lv 的容量調整爲 2GB,也可以使用“M”表示 MB,“K”代表“KB”,或是“-L+1G”表示增加 1 GB
注意:
雖然 LV 的空間已經擴大了,但是 LV 內的檔案系統仍然需要調整,依照檔案系統不同,使用修改程序將檔案系統擴大。(查看擴大與縮小 Linux 分割區)
如果需要縮小 LV 的容量,先將 LV 內的檔案系統縮小,然後才能調整 LV。下面以簡要說明步驟,例如想要縮小 /dev/home_vg/home1_lv,而目前其所使用的檔案系統爲 ext3,所以先如下操作縮小檔案系統:
# umount /dev/home_vg/home1_lv
# e2fsck -f /dev/home_vg/home1_lv
# resize2fs /dev/home_vg/home1_lv 3G
縮小檔案系統後,便可以如下使用 lvreduce 指令調整 LV 的容量:
# lvreduce -L3G /dev/home_vg/home1_lv
將 /dev/home_vg/home1_lv 的容量調整爲 3GB,也可以使用“M”表示 MB,“K”代表“KB”,或是“-s-500M”代表減少 500MB
縮小 LV 時,LV 變更後的容量務必大於或等於其檔案系統容量,否則將造成檔案系統的錯誤。