Linux LVM

 LVMLogical 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 Extentlvm 在建立 VG 時,會將其中的 PV 切割爲許多大小相等的區塊,這些區塊稱爲 PE,預設大小爲 4 MB
LE
Logical Extentlvm 在建立 LV 時,會將其切割爲許多大小相等的區塊,這些區塊稱爲 LELE 的大小必須是 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 將自動依序使用 lvol0lvol2 等名稱命名:
# 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 所屬的 VGhome_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 變更後的容量務必大於或等於其檔案系統容量,否則將造成檔案系統的錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章