一. 什么是LVM
逻辑卷管理lvm是硬盘的一个系统工具,lvm可以创建和管理逻辑卷,而不是直接使用物理硬盘,可以弹性管理逻辑卷的扩大缩小,操作简单,不损坏已存储的数据,可以随意将新的硬盘添加到lvm,直接扩展已经存在的逻辑卷.
物理卷(pv):把常规的磁盘设备通过pvcreate命令对其进行初始化,形成物理卷.就是把整块硬盘或者分区做成物理卷.
卷组(vg):把多个物理卷组成一个逻辑的整体,这样卷组的大小就是多个硬盘之和.或者理解就是由一个或多个pv组成的整体.
逻辑卷(lv):从卷组中划分需要的空间大小出来,用户仅需对其格式化即可挂载使用.从vg中切割出来的空间用于创建文件系统.
基本单元(pe):分配的逻辑大小的最小单元,默认为4MB的基本块.(假设分配100MB逻辑空间,则需要创建25个pe)
lvm优点:
1.可以在系统运行的状态下动态的扩展文件系统的大小.
2.文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制.
3.可以增加新的磁盘到lvm的存储池中.
4.可以以镜像的方式冗余重要的数据到多个物理磁盘.
5.可以方便的导出整个卷组到另一台机器.
缺点:
1.因为加入了额外的操作,存取性能受到影响.
2.当卷组中的一个磁盘损坏时,整个卷组都会受到影响.
解决方案:底层使用raid,在raid基础上做lvm
二.lvm的基本使用
下载安装:yum install -y lvm2
1.制作物理卷:pvcreate
#整块硬盘做出物理卷
[root@egon ~]# pvcreate /dev/sdc
硬盘分区后,每个分区做成物理卷
[root@egon ~]# pvcreate /dev/sdb1
[root@egon ~]# pvcreate /dev/sdb2
[root@egon ~]# pvcreate /dev/sdb3
#查看物理卷命令:pvs,pvscan
[root@egon ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@egon ~]# pvscan
PV /dev/sdb1 lvm2 [1.00 GiB]
PV /dev/sdc lvm2 [20.00 GiB] PV /dev/sdb2 lvm2 [1.00 GiB]
PV /dev/sdb3 lvm2 [1.00 GiB]
Total: 4 [23.00 GiB] / in use: 0 [0 ] / in no VG: 4 [23.00 GiB]
可以看到,在我们的系统中,/dev/sdb1-3这三个分区是物理卷。最后一行的意思是:
共4个物理卷[大小]/使用了 1个卷[大小]/空闲 3 个卷[大小]
#删除物理卷命令:pvremove
[root@localhost ~]# pvremove /dev/sdb1
2. 制作卷组(vg):
#建立卷组的命令:vgcreate
vgcreate 卷组名 物理卷名
[root@egon ~]# vgcreate vg1 /dev/sdb1 /dev/sdc 制作一个vg1卷组,包含/dev/sdb1和/dev/sdc两个pv
Volume group "vg1" successfully created
[root@egon ~]# vgcreate vg2 /dev/sdb2 /dev/sdb3 制作一个vg2卷组,包含/dev/sdb2和/dev/sdb3两个pv
Volume group "vg2" successfully created
#查看卷组命令:vgs
[root@egon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 20.99g 20.99g
vg2 2 0 0 wz--n- 1.99g 1.99g
#增加卷组:vgextend
[root@localhost ~]# vgextend vg1 /dev/sdb7
Volume group "vg1" successfully extended
把/dev/sdb7物理卷加入vg1卷组
#删除卷组:vgremove
[root@localhost ~]# vgremove vg1
Volume group "vg1" successfully removed
3.制作逻辑卷(lvm)
命令:lvcreate
选项:
-L 容量:指定逻辑卷大小,单位为 MB、GB、TB 等;
-n 逻辑卷名:指定逻辑卷名;
[root@egon ~]# lvcreate -L 100M -n lv1_from_vg1 vg1
[root@egon ~]# lvcreate -L 200M -n lv2_from_vg1 vg1
#查看逻辑卷:lvs
[root@egon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log
Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 100.00m
lv2_from_vg1 vg1 -wi-a----- 200.00m
lv1_from_vg2 vg2 -wi-a----- 300.00m
lv2_from_vg2 vg2 -wi-a----- 400.00m
#删除逻辑卷:lvremove
[root@localhost ~]#lvremove 逻辑卷的设备文件名
我们删除逻辑卷,记得在删除前要先卸载。 命令如下:
[root@localhost ~]# umount /dev/vg1/lv1_from_vg1
[root@localhost ~]# Ivremove /dev/vg1/lv1_from_vg1
Do you really want to remove active logical volume lv1_from_vg1? [y/n]:y
#如果这里选择y,就会执行删除操作,逻辑卷内的所有数据都会被清空
4. 制作文件系统与挂载
制作文件系统:
mkfs.xfs /dev/vg1/lv1_from_vg1
挂载:
mount /dev/vg1/lv1_from_vg1 /test1/
5. 动态扩容:
#新增一个分区
fdisk /dev/sdb ......
partprobe
ls /dev/sdb4
#新增一个pv
[root@egon ~]# pvcreate /dev/sdb4
#把新增的pv扩到vg2卷组中
[root@egon ~]# vgextend vg2 /dev/sdb4
# 对逻辑卷lv1_from_vg2扩容
[root@egon ~]# lvextend -L +1000M /dev/vg2/lv1_from_vg2
#扩展逻辑卷后需要更新文件系统
[root@egon ~]# xfs_growfs /dev/vg2/lv1_from_vg2
6.动态缩容与删除
#不建议缩容,并且xfs不支持缩容.
#删除
删除逻辑卷之前需要先卸载挂载点
[root@egon ~]# umount /test3
[root@egon ~]# lvremove /dev/vg2/lv1_from_vg2
删除卷组(vg)
[root@egon ~]# vgremove vg2
删除物理卷pv:
注意只能删除那些不属于任何卷组(vg)的物理卷(pv)
[root@egon ~]# pvremove /dev/sdb2
[root@egon ~]# pvremove /dev/sdb3
三. 快照
注意:
1.vg中需要预留存放快照本身的空间,不能全部被占满
2.快照所在的卷组(vg)必须与被备份的lv所在卷组相同,否则创建快照会失败.
总结:快照的本质就是一个特殊的lv,创建快照后,如果源数据卷中的文件被更新了,会将老数据赋给快照的空间,这就要求快照的空间也是够用的.
#利用快照恢复单个文件
首先查看逻辑卷所在的卷组容量是否充足
vgs
[root@allenzhu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 1 0 wz--n- 14.99g 4.99g
在vg1卷组中创建一个lv1_vg1逻辑卷的快照
lvcreate -L 1G -s -n lv1_vg1.bak /dev/vg1/lv1_vg1
先卸载源数据和快照,在进行恢复,快照会自动删除,是一次性的
lvconvert --mergesnapshot /dev/vg1/lv1_vg1.bak