LVM——邏輯卷管理

1、概述
web

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


2、基本術語app

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

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

    *物理卷(physical volume,PV)

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

    *卷組(Volume Group,VG)

LVM卷組相似於非LVM系統中的物理硬盤,其由物理卷組成。能夠在卷組上建立一個或多個「LVM分區」(邏輯卷),LVM卷組由一個或多個物理卷組成。
ui

    *邏輯卷(logical volume,LV)

LVM的邏輯卷相似於非LVM系統中的硬盤分區,在邏輯卷之上能夠創建文件系統(好比/home或者/usr等)。
spa

    *PE(physical extent,PE)

每個物理卷被劃分爲稱爲PE(PhysicalExtents)的基本單元,具備惟一編號的PE是能夠被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。
操作系統

    *LE(logical extent,LE)

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


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

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


3、安裝

首先肯定系統中是否安裝了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命令激活系統全部卷組。


4、建立管理

要建立一個LVM系統,通常須要通過如下步驟:
一、建立分區

使用分區工具(如:fdisk等)建立LVM分區,方法和建立其餘通常分區的方式是同樣的,區別僅僅是LVM的分區類型爲8e。


二、建立物理卷
建立物理卷的命令爲pvcreate,利用該命令將但願添加到卷組的全部分區或者磁盤建立爲物理卷。將整個磁盤建立爲物理卷的命令爲:
#pvcreate /dev/hdb
將單個分區建立爲物理卷的命令爲:

#pvcreate /dev/hda5


三、建立卷組
建立卷組的命令爲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)。


四、激活卷組
爲了當即使用卷組而不是從新啓動系統,可使用vgchange來激活卷組:

#vgchange -ay web_document


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

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


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

#vgreduce web_document /dev/hda1


七、建立邏輯卷
建立邏輯卷的命令爲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


八、建立文件系統
筆者推薦使用reiserfs文件系統,來替代ext2和ext3:
建立了文件系統之後,就能夠加載並使用它:
#mkdir/data/wwwroot
#mount /dev/web_document/www1/data/wwwroot
若是但願系統啓動時自動加載文件系統,則還須要在/etc/fstab中添加內容:

/dev/web_document/www1/data/wwwrootreiserfsdefaults12


九、刪除一個邏輯卷
刪除邏輯卷之前首先須要將其卸載,而後刪除:
#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


十、擴展邏輯卷大小
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。


十一、減小邏輯卷大小
使用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



5、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區域。


6、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兩塊磁盤分了兩個區sdb一、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/sdc一、/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/sdb一、/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



7、管理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

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


8、工做方式

每個物理卷都被分紅幾個基本單元,即所謂的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 操做。
相關文章
相關標籤/搜索