1、LVM 基本術語
物理卷(physical volume):物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤。
卷組(Volume Group):卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之后可動態添加物理卷到卷組中。
邏輯卷(logical volume): 邏輯卷建立在卷組之上,卷中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立后可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
PE(physical extent):每一個物理卷被划分為稱為PE的的基本單元,具有唯一編號的PE是可以 被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。
LE(logical exent):邏輯卷也被划分為稱為LE的可被尋址的基本單位。在同一個卷組中,LE和PE 的大小是相同的,並且一一對應 。
如下圖可以看到本機裝系統時使用的LVM:

2、創建和管理LVM
[root@test ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
三塊硬盤/dev/sdb、/dev/sdc 、/dev/sdd都為20G
sdb、sdc創建物理分區10G,分區類型為8e
fdisk /dev/sdb---sdb1
fdisk /dev/sdc--sdc1
partprobe /dev/sdb #使用工具partprobe讓kernel讀取分區信息。或者使用partx /dev/sdb
partprobe /dev/sdc
更改分區類型用t,用L列出可用的分區類型。
2.1 創建PV
[root@test ~]# pvcreate /dev/sdb1
dev_is_mpath: failed to get device for 8:17
Physical volume "/dev/sdb1" successfully created
[root@test ~]# pvcreate /dev/sdc1
dev_is_mpath: failed to get device for 8:33
Physical volume "/dev/sdc1" successfully created
查看物理卷:pvs和pvdisplay

使用pvremove /dev/sdb1 刪除物理卷。
2.2創建VG,VG名稱為vdata
[root@test ~]#
vgcreate vdata /dev/sdb1 /dev/sdc1
Volume group "vdata" successfully created
查看vg:

可以看到默認PE大小為4M。可以更改vdata卷組的PE為16M:
[root@test ~]#
vgchange -s 16M vdata
Volume group "vdata" successfully changed

2.3 創建兩個LV
[root@test ~]#
lvcreate -L 2G -n data1 vdata
Logical volume "data1" created
[root@test ~]#
lvcreate -l 20 -n data2 vdata
Logical volume "data2" created
lvcreate參數解釋:
-l LEs :指定LV的邏輯塊數
-L size:指定LV的大小,其后可以用K,M,G表示KB,MB,GB
-s 創建一個已存在LV的snapshop卷
-n name:為LV指定名稱
查看LV詳細信息:lvs和lvdisplay


2.4LV 格式化及掛載
[root@test ~]# mkfs.ext4 /dev/vdata/data1
[root@test ~]# mkfs.ext4 /dev/vdata/data2
[root@test ~]# mount /dev/vdata/data1 /mnt/data1
[root@test ~]# mount /dev/vdata/data2 /mnt/data2
blkid [查看所屬的文件系統的UUID]
vim /etc/fstab 寫入掛載表中,保證永久生效。請用UUID掛載


2.5 刪除LVM
刪除邏輯卷 lvremove <lvname>
刪除卷組 vgremove <vgname>
刪除物理卷 pvremove <pvname>
3、LVM邏輯卷擴充和縮減
3.1LVM邏輯卷擴充:
添加PV到VG中------擴大LV容量----擴大文件系統並掛載
(1)在新的物理分區上新建物理卷加入卷組
在/dev/sdd上新建分區/dev/sdd1,分區大小為10G。然后新建物理分區,加入卷組。

創建物理卷:
[root@test ~]#
pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created
(2)將新的物理卷加入已知的卷組
[root@test ~]#
vgextend vdata /dev/sdd1
Volume group "vdata" successfully extended
將物理卷從卷組中移除vgreduce
#vgreduce vdata /dev/sdd1
(3) 擴充邏輯卷
有兩種方式:一種直接指定擴充后總的容量;一種指定要增加的容量:
擴充之前LV的大小:

將邏輯卷data1擴充2G:
[root@test ~]#
lvextend -L 4G /dev/vdata/data1 //#指定擴容后的容量
Extending logical volume data1 to 4.00 GiB
Logical volume data1 successfully resized
可以看到data1邏輯卷已經變成4G:

將邏輯卷data2擴充1G:
[root@test ~]#
lvextend -L +1G /dev/vdata/data2 //
#指定要增加的容量
Extending logical volume data2 to 1.31 GiB
Logical volume data2 successfully resized

(4)執行重設大小,對於當前正在使用的lvdata有效。
在將邏輯卷data1擴充了2G之后,在系統里面總的可以使用的空間仍然是2G,沒有變成4G。
所以要重設文件系統。
重設之前:

重設之后:
[root@test ~]#
resize2fs /dev/vdata/data1
[root@test ~]#
resize2fs /dev/vdata/data2

邏輯卷擴充成功。
3.2 LVM邏輯卷縮減:
縮小LV縮小文件系統----縮小LV容量----移除VG中的PV
縮減邏輯卷data2
(1)卸載文件系統
[root@test ~]# umount /dev/vdata/data2
(2)檢查文件系統fsck
[root@test ~]# e2fsck -f /dev/vdata/data2 //強制檢查文件系統
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vdata/data2: 11/344064 files (0.0% non-contiguous), 54400/1376256 blocks
(3) 指定縮小后的文件系統的容量
[root@test ~]#
resize2fs -p /dev/vdata/data2 1G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vdata/data2 to 1048576 (1k) blocks.
Begin pass 3 (max = 168)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vdata/data2 is now 1048576 blocks long.
(4)縮減邏輯卷使用lvreduce命令,不能縮減至比它包含的文件系統還小
[root@test ~]# lvreduce -L 1G /dev/vdata/data2
WARNING: Reducing active logical volume to 1.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data2? [y/n]: y
Reducing logical volume data2 to 1.00 GiB
Logical volume data2 successfully resized
如下圖,縮減成功:

4、創建快照
在已有的邏輯卷上創建快照:
[root@test ~]# lvcreate -l 50 -s -n data_bak /dev/vdata/data1 【在data1邏輯卷上創建快照】
Logical volume "data_bak" created

快照的刪除:
[root@test ~]# lvremove /dev/vdata/data_bak
Do you really want to remove active logical volume data_bak? [y/n]: y
Logical volume "data_bak" successfully removed