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