LVM——邏輯卷管理

一、概述

LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的盤卷,在盤捲上建立文件系統,提高磁盤分區管理的靈活性。LVM具有很好的可伸縮性,使用起來非常方便。可以方便地對卷組、邏輯卷的大小進行調整,更進一步調整文件系統的大小。管理員通過LVM可以方便的調整存儲卷組的大小,並且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:“development”和“sales”,而不是使用物理磁盤名“sda”和“sdb”。而且當系統添加了新的磁盤,通過LVM管理員就不必將磁盤的 文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。


二、基本術語

    *物理存儲介質(The physical media)

這裏指系統的存儲設備:硬盤,是存儲系統最低層的存儲單元。

    *物理卷(physical volume,PV)

物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。

    *卷組(Volume Group,VG)

LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。

    *邏輯卷(logical volume,LV)

LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。

    *PE(physical extent,PE)

每一個物理卷被劃分爲稱爲PE(PhysicalExtents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。

    *LE(logical extent,LE)

邏輯卷也被劃分爲被稱爲LE(LogicalExtents)的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。


    和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理捲起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容:PV描述符、VG描述符、LV描述符、和一些PE描述符。

系統啓動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。


三、安裝

首先確定系統中是否安裝了lvm工具:
[root@wwwroot]#rpm –qa | grep lvm
lvm-1.0.3-4
如果命令結果輸入類似於上例,那麼說明系統已經安裝了LVM管理工具;如果命令沒有輸出則說明沒有安裝LVM管理工具,則需要從網絡下載或者從光盤裝LVMrpm工具包。
安裝了LVM的RPM軟件包以後,要使用LVM還需要配置內核支持LVM。RedHat默認內核是支持LVM的,如果需要重新編譯內核,則需要在配置內核時,進入Multi-deviceSupport(RAIDandLVM)子菜單,選中以下兩個選項:
[*]Multipledevicesdriversupport(RAIDandLVM)
<*>Logicalvolumemanager(LVM)Support
然後重新編譯內核,即可將LVM的支持添加到新內核中。
爲了使用LVM,要確保在系統啓動時激活LVM,幸運的是在RedHat7.0以後的版本,系統啓動腳本已經具有對激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下內容:
#LVMinitialization
if[-e/proc/lvm-a-x/sbin/vgchange-a-f/etc/lvmtab];then
action$"SettingupLogicalVolumeManagement:"/sbin/vgscan&&/sbin
/vgchange-ayfi

其中關鍵是兩個命令,vgscan命令實現掃描所有磁盤得到卷組信息,並創建文件卷組數據文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange-ay命令激活系統所有卷組。


四、創建管理

要創建一個LVM系統,一般需要經過以下步驟:
1、創建分區

使用分區工具(如:fdisk等)創建LVM分區,方法和創建其他一般分區的方式是一樣的,區別僅僅是LVM的分區類型爲8e。


2、創建物理卷
創建物理卷的命令爲pvcreate,利用該命令將希望添加到卷組的所有分區或者磁盤創建爲物理卷。將整個磁盤創建爲物理卷的命令爲:
#pvcreate /dev/hdb
將單個分區創建爲物理卷的命令爲:

#pvcreate /dev/hda5


3、創建卷組
創建卷組的命令爲vgcreate,將使用pvcreate建立的物理卷創建爲一個完整的卷組:
#vgcreate web_document /dev/hda5 /dev/hdb

vgcreate命令第一個參數是指定該卷組的邏輯名:web_document。後面參數是指定希望添加到該卷組的所有分區和磁盤。vgcreate 在創建卷組web_document以外,還設置使用大小爲4MB的PE(默認爲4MB),這表示卷組上創建的所有邏輯卷都以4MB爲增量單位來進行擴充 或縮減。由於內核原因,PE大小決定了邏輯卷的最大大小,4MB的PE決定了單個邏輯卷最大容量爲256GB,若希望使用大於256G的邏輯卷則創建卷組 時指定更大的PE。PE大小範圍爲8KB到512MB,並且必須總是2的倍數(使用-s指定,具體請參考manvgcreate)。


4、激活卷組
爲了立即使用卷組而不是重新啓動系統,可以使用vgchange來激活卷組:

#vgchange -ay web_document


5、添加新的物理捲到卷組中
當系統安裝了新的磁盤並創建了新的物理卷,而要將其添加到已有卷組時,就需要使用vgextend命令:
#vgextend web_document /dev/hdc1

這裏/dev/hdc1是新的物理卷。


6、從卷組中刪除一個物理卷
要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷信息:
如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據備份到其他地方,然後再刪除。刪除物理卷的命令爲vgreduce:

#vgreduce web_document /dev/hda1


7、創建邏輯卷
創建邏輯卷的命令爲lvcreate:
#lvcreate -L1500 -n www1 web_document
該命令就在卷組web_document上創建名字爲www1,大小爲1500M的邏輯卷,並且設備入口爲 /dev/web_document/www1(web_document爲卷組名,www1爲邏輯卷名)。如果希望創建一個使用全部卷組的邏輯卷,則需 要首先察看該卷組的PE數,然後在創建邏輯卷時指定:
#vgdisplay web_document | grep"TotalPE"
TotalPE45230

#lvcreate -l45230 web_document -n www1


8、創建文件系統
筆者推薦使用reiserfs文件系統,來替代ext2和ext3:
創建了文件系統以後,就可以加載並使用它:
#mkdir/data/wwwroot
#mount /dev/web_document/www1/data/wwwroot
如果希望系統啓動時自動加載文件系統,則還需要在/etc/fstab中添加內容:

/dev/web_document/www1/data/wwwrootreiserfsdefaults12


9、刪除一個邏輯卷
刪除邏輯卷以前首先需要將其卸載,然後刪除:
#umount /dev/web_document/www1
#lvremove /dev/web_document/www1
lvremove--doyoureallywanttoremove"/dev/web_document/www1"?[y/n]:y
lvremove--doingautomaticbackupofvolumegroup"web_document"

lvremove--logicalvolume"/dev/web_document/www1"successfullyremoved


10、擴展邏輯卷大小
LVM提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是lvextend:
#lvextend -L12G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to12GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就實現將邏輯卷www1的大小擴招爲12G。
#lvextend -L +1G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to13GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就實現將邏輯卷www1的大小增加1G。
增加了邏輯卷的容量以後,就需要修改文件系統大小以實現利用擴充的空間。筆者推薦使用reiserfs文件系統來替代ext2或者ext3。因此這裏僅 僅討論reiserfs的情況。Reiserfs文件工具提供了文件系統大小調整工具:resize_reiserfs。對於希望調整被加載的文件系統大 小:
#resize_reiserfs -f /dev/web_document/www1
一般建議最好將文件系統卸載,調整大小,然後再加載:
#umount /dev/web_document/www1
#resize_reiserfs /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot
對於使用ext2或ext3文件系統的用戶可以考慮使用工具

ext2resize。


11、減少邏輯卷大小
使用lvreduce即可實現對邏輯卷的容量,同樣需要首先將文件系統卸載:
#umount /data/wwwroot
#resize_reiserfs -s -2G /dev/web_document/www1
#lvreduce -L -2G /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot



五、LVM結構

LVM的結構信息存在於每塊LVM硬盤開頭的保留區域中(PVRA,VGRA),這塊區域被叫做LVM表頭(LVM header)。下面的圖顯示了LVM盤的結構: 1. 非啓動盤

|------------------|
| PVRA |
|------------------|
| VGRA |
|------------------|
| |
| |
| |
| User Data |
| |
| |
| |
|------------------|
|Bad block pool|
|------------------|
2.啓動盤
|------------------|-----
| LIF header | \
|------------------| \
| PVRA | \
|------------------| \
| BDRA | |-->2912K
|------------------| /
| LIF volume | /
|------------------| /
| VGRA | /
|------------------|-----
| |
| |
| |
| User Data |
| |
| |
| |
|------------------|
|Bad block pool|

|------------------|


注意:

a. 啓動盤的LVM表頭(LVM header)總是2912KB,而對於非啓動盤來說,LVM header的大小是不固定的。它取

   決於VG的配置參數PVs/VG(-p max_pv),PEs/PV(-e max_pe)和LVs/VG(-l max_lv),但是一般來說,

  非啓動的LVM header的大小總是比啓動盤的要小一些。而且,VG的VGRA一定不能大於一個單獨的塊的大小。

b. 安騰(Itanium systems)系統(UX11.20,11.22,11.23)在硬盤的開頭區域有一個100MB的EFI區域。


六、Linux下實現LVM

Linux中實現LVM的方法有兩種:一種是在安裝Linux時利用Disk Druid程序在圖形化界面下實現;另一種是利用LVM命令在字符界面下實現,下面的過程是基於後一種方法實現的。

實現環境如下:操作系統爲Red Hat Enterprise LinuxAS 4 ,默認安裝的LVM管理工具包爲LVM2 2.00.31 ,硬盤爲36GBSCSI接口共計2塊,其中sda存放系統文件及數據,sdb、sdc用於實現LVM。


1.準備物理分區(Physical Partions)
首先,我們需要選擇用於 LVM 的物理存儲器。這些通常是標準分區,但也可以是已創建的 Linux Software RAID 卷。這裏我利用fdisk命令,將sdb、sdc兩塊磁盤分了兩個區sdb1、sdc1, 通過fdisk的t指令指定分區爲8e類型(Linux LVM)。如圖1所示。

圖1 準備物理分區的指令執行界面


2.創建物理卷PV(Physical Volumes) 物理卷(Physical Volumes)簡稱PV,是在磁盤的物理分區或與磁盤分區具有同樣功能的設備(如RAID)上創建而來。它只是在物理分區中劃出了一個特殊的區域,用於記載與LVM相關的管理參數。
創建物理卷的命令是 pvcreate :
[root@li2 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@li2 ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
以上命令分別將/dev/sdc1、/dev/sdb1初始化成物理卷,使用物理卷顯示命令pvdisplay查看物理卷情況如下:
[root@li2 ~]# pvdisplay
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 36.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID QDmnUd-tuvH-U4Hn-n5Ry-zGRT-O1yK-67Dxbb
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 36.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0

PV UUID NDBf68-6qrD-9hE6-Rotv-RdxL-Azvv-7NlC0S


3.創建卷組VG(Volume Groups)
卷組(Volume Group)簡稱VG,它是一個或者多個物理卷的組合。卷組將多個物理卷組合在一起,形成一個可管理的單元,它類似於非LVM系統中的物理硬盤。
創建卷組的命令爲vgcreate,下面利用它創建了一個名爲“lvmdisk”的卷組,該卷組包含/dev/sdb1、/dev/sdc1兩個物理卷。
[root@li2 ~]# vgcreate lvmdisk /dev/sdb1 /dev/sdc1
Volume group "lvmdisk" successfully created
使用卷組查看命令vgdisplay顯示卷組情況:
[root@li2 ~]# vgdisplay
--- Volume group ---
VG Name lvmdisk
System ID
Format lvm2
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 71.98 GB
PE Size 4.00 MB
Total PE 18428
Alloc PE / Size 0 / 0
Free PE / Size 18428 / 71.98 GB
VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf
當多個物理卷組合成一個卷組後時,LVM會在所有的物理捲上做類似格式化的工作,將每個物理卷切成一塊一塊的空間,這一塊一塊的空間就稱爲PE(Physical Extent ),它的默認大小是4MB。
由於受內核限制的原因,一個邏輯卷(Logic Volume)最多隻能包含65536個PE(Physical Extent),所以一個PE的大小就決定了邏輯卷的最大容量,4 MB 的PE決定了單個邏輯卷最大容量爲 256 GB,若希望使用大於256G的邏輯卷,則創建卷組時需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小範圍爲8 KB 到 16GB,並且必須總是 2 的倍數。
例如,如果希望使用 64 MB 的PE創建卷組,這樣邏輯卷最大容量就可以爲4 TB,命令如下:

# vgcreate - 64MB lvmdisk /dev/sdb1 /dev/sdc1


4.創建邏輯卷LV(Logical Volumes)
邏輯卷(Logical Volumes)簡稱LV,是在卷組中劃分的一個邏輯區域,類似於非LVM系統中的硬盤分區。
創建邏輯卷的命令爲lvcreate,通過下面的命令,我們在卷組lvmdisk上創建了一個名字爲pldy1的邏輯卷,大小爲15GB,其設備入口爲/dev/lvmdisk/pldy1。
[root@li2 dev]# lvcreate -L 15G -n pldy1 lvmdisk
Logical volume "pldy1" created
也可以使用-l參數,通過指定PE數來設定邏輯分區大小。
例如,希望創建一個使用全部空間的邏輯卷,需要先查清卷組中的PE總數,通過上面的vgdisplay命令查得當前卷組PE總數爲18428,命令如下:
# lvcreate -l 18428 -n pldy1 lvmdisk
當邏輯卷創建成功後,可以使用lvdisplay命令查看邏輯卷情況:
[root@li2 ~]# lvdisplay
--- Logical volume ---
LV Name /dev/lvmdisk/pldy1
VG Name lvmdisk
LV UUID FQcnm3-BMyq-NkJz-hykw-9xg1-Qy8d-8UeGCN
LV Write Access read/write
LV Status available
# open 0
LV Size 15.00 GB
Current LE 3840
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0

同卷組一樣,邏輯卷在創建的過程中也被分成了一塊一塊的空間,這些空間稱爲LE(Logical Extents),在同一個卷組中,LE的大小和PE是相同的,並且一一對應。


5.創建文件系統
在邏輯捲上創建ext3文件系統:
[root@li2 ~]# mkfs -t ext3 /dev/lvmdisk/pldy1
創建了文件系統以後,就可以加載並使用了:
[root@li2 ~]# mkdir /opt/Oracle
[root@li2 ~]# mount /dev/lvmdisk/pldy1 /opt/Oracle
爲了在系統啓動時自動加載文件系統,則還需要在/etc/fstab中添加內容:
/dev/lvmdisk/pldy1 /opt/Oracle ext3 defaults 1 2



七、管理LVM

LVM的最大好處就是可以動態地調整分區大小,而無須重新啓動機器,下面讓我們來體驗一下吧!繼續上面的實例,現假設邏輯卷/dev/lvmdisk/pldy1空間不足,需要增加其大小,我們分兩種情況討論:


1.卷組中有剩餘的空間
通過vgdisplay命令可以檢查當前卷組空間使用情況:
[root@li2 ~]# vgdisplay
--- Volume group ---
VG Name lvmdisk
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 71.98 GB
PE Size 4.00 MB
Total PE 18428
Alloc PE / Size 3840 / 15.00 GB
Free PE / Size 14588 / 56.98 GB
VG UUID SARfuj-wAUI-od81-VWAc-A1nt-aaFN-JWaPVf
確定當前卷組剩餘空間56.98GB,剩餘PE數量
爲14588個。在這裏將所有的剩餘空間全部增加給邏輯卷 /dev/lvmdisk/pldy1。
[root@li2 Oracle]# lvextend -l+14588 /dev/lvmdisk/pldy1
Extending logical volume pldy1 to 56.98 GB
Logical volume pldy1 successfully resized
上面的命令使用了-l+14588參數,它的意思是給指定的邏輯卷增加14588個PE。如果不是將全部空間都使用,還可使用其他形式的lvextend命令。
例如將邏輯卷/dev/lvmdisk/pldy1增加5GB的空間,使其空間達到20GB,可寫成: “# lvextend -L+5G /dev/lvmdisk/pldy1”或“# lvextend -L20G /dev/lvmdisk/pldy1”。增加了邏輯卷容量後,就要通過ext2online命令修改文件系統的大小了。
[root@li2 ~]# ext2online /opt/Oracle/
轉換好後,讓我們查看一下文件系統的當前狀態:
[root@li2 ~]# df -lh
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/sda1 7.4G 1.8G 5.3G 25% /
none 135M 0 135M 0% /dev/shm

/dev/mapper/lvmdisk-pldy1 71G 81M 68G 1% /opt/Oracle


2.卷組中空間不足
當卷組中沒有足夠的空間用於擴展邏輯卷的大小時,就需要增加捲組的容量,而增加捲組容量的唯一辦法就是向卷組中添加新的物理卷。
首先是增加一塊新硬盤(36GB SCSI 硬盤),並對其完成分區、創建物理卷等工作。接下來是利用vgextend命令將新的物理卷(/dev/sdd1)加入到卷組中。
擴展卷組的命令如下:
[root@li2 ~]# vgextend lvmdisk /dev/sdd1
Volume group "lvmdisk" successfully extended
利用vgdisplay命令查看卷組lvmdisk的情況:
[root@li2 ~]# vgdisplay
--- Volume group ---
VG Name lvmdisk
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 107.97 GB
PE Size 4.00 MB
Total PE 27640
Alloc PE / Size 3840 / 15.00 GB
Free PE / Size 23800 / 92.97 GB
VG UUID l8YPvz-uD7h-oj1A-0qS5-TFcT-mbC7-QbjzCu

完成卷組的擴容後,就可以按照第一種情況的方法完成邏輯卷的擴容,最終實現分區的動態調整。


八、工作方式

每一個物理卷都被分成幾個基本單元,即所謂的PE(Physical Extents)。PE的大小是可變的,但是必須和其所屬卷組的物理卷相同。在每一個物理卷裏,每一個PE都有一個唯一的編號。PE是一個物理存儲裏可以被LVM尋址的最小單元。
每一個邏輯卷也被分成一些可被尋址的基本單位,即所謂的LE(Logical Extents)。在同一個卷組中,LE的大小和PE是相同的,很顯然,LE的大小對於一個卷組中的所有邏輯捲來說都是相同的。
在一個物理卷中,每一個PE都有一個唯一的編號,但是對於邏輯卷這並不一定是必需的。這是因爲當這些PEID號不能使用時,邏輯卷可以由一些物理卷組成。因此,LE ID號是用於識別LE以及與之相關的特定PE的。每一次存儲區域被尋址訪問或者LE的ID被使用,都會把數據寫在物理存儲設備之上。
你可能會覺得奇怪,有關邏輯卷和邏輯卷組的所有元數據都存到哪兒去了。類似的在非LVM系統中,有關分區的數據是存儲在分區表中,而分區表被存儲在了每一個物理卷的起始位置。VGDA(卷組描述符區域)功能就好象是LVM的分區表,它存儲在每一個物理卷的起始處。
VGDA由以下信息組成:
◆ 一個PV描述符
◆ 一個VG描述符
◆ LV描述符
◆ 一些PE描述符
當系統啓動LV時,VG被激活,並且VGDA被加載至內存。VGDA幫助識別LV的實際存儲位置。當系統想要訪問存儲設備時,由VGDA建立起來的映射機制就用於訪問實際的物理位置來執行I/O操作。





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