LVM(Logical Volume Manager,逻辑卷管理器):是linux对磁盘分区进行管理的一种机制,至于作用就不再概述了。
首先了解一下DM把,全称为Device Mapper,想没想到我们经常用的/dev/mapper?就是它了。它跟MD一样,有一个核心的模块和众多的子模块组成,子模块提供了各种特性和功能。如下图:
DM提供了设备的映射机制,能够将多个物理的设备映射为一个逻辑设备,感觉DM要比MD的功能强大的多了,做LVM2都是使用DM机制的。
DM提供的功能大体有:将多个磁盘可用的空间虚拟为一块磁盘,镜像,快照,多路径等等。。
首先我们先了解一下LVM的结构:
它主要由三个类型:PV VG和LV
--PV(Physical volume,物理卷):由块设备组成,物理卷可以是一个磁盘的某一分区,也可以是整块磁盘或RAID磁盘(硬RAID,这样效果更叼了),也可以是通过ISCSI共享出来的块设备等等,创建LVM的第一步,就是要将这种类型的设备创建为物理卷。
--VG(Volume Group,卷组):各个物理卷组和在一起,一个类似扩展分区的容器,物理卷可以自由的加入VG,也可以在VG中移除,也就是说,我们的VG可以动态的扩大或缩小。
--LV(Logical Volume,逻辑卷):这就相当于逻辑分区了,经过格式化后,我们可以将LV挂载到目录下使用,LV是可以自由的扩大和缩小的。
OK,我们已经大体了解了一个LVM是怎么构成的了,等等,还有一个叫做PE和LE的东西。
--PE(physical extent,物理块):是LVM最小的寻址单元,可进行配置大小,默认为4MB,我们怎么抽象的理解PE呢?我们在创建卷组的时候,会指定PE的大小,然后会把我们组成VG的PV划分成N多个PE,也就是说,我们的VG是由众多的PE组成的,而LE,是与PE大小的一样的,只是站在LV的角度把它看成了LE了。在LVM1中会限制VG的PE个数为65534个,也就是VG最大容量为256G左右,但是LVM2已经去掉了这种限制,所以我们可以随心所欲的用了~
终于到了我们该怎么创建的时候了,说一下各个阶段使用的命令吧,这些命令都是常用的,现实环境下肯定比这个多,我目前也只知道这么多(吼吼,目前还是水军一份子):
PV阶段:
pvcreate----创建pv,用法:pvcreate /dev/xxx
pvremove--删除PV, 用法:格式同上,不是命令同上
pvscan-重新扫描PV,
pvs或pvdisplay--查看PV
pvmove--(移动PV上的数据,如果你想移除一个PV,但还要保留PV上的数据,就需要用到这个命令了)
Ps:pvmove格式:pvmove /dev/xx(要移除的Pv) /dev/xx(把数据移动到此设备,这个设备必须是和要移除的Pv属于一个卷组)
VG阶段:
vgcreate_--创建vg, 用法 vgcreate -s 16M vgname /dev/xx
vgremove--删除VG
vgextend--扩展VG,加PV 用法:vgextend vgname /dev/xx/xx
vgreduce--缩小VG,移除PV 用法:vgreduce vgname /dev/xx/xx
vgs或vgdisplay--查看VG
vgscan--重新扫描vg
vgrename--重命名vg
PS:创建vg时 -s可以指定PE大小,单位可以是k,m,g,或更多,自行man吧。
LV阶段:
lvcreate--创建lv 用法:lvcreate -n lvname -l|L 100|50M /dev/xxx
lvremove--删除lv
lvextend--扩容lv
lvreduce--缩小lv
lvresize--既可缩小又可扩容
lvs或lvdisplay--查看lv
lvscan--重新扫描lv
PS:创建LV时候,小l指分配PE的个数,大L指分配的空间大小,通常为PE大小的倍数,如果不是倍数,空间会多出一个PE大小范围内的容量。其它的参数下面在介绍。
Ok,那我们来动手实验一下吧:
需求:首先我要把sdb,sdc,sdd三块盘创建为一个PE大小为16M,名字叫做testvg,并创建一个10G大的,名字叫做testlv的Lv,并格式化为ext3格式,并挂载到/test。
1.创建Pv
我们可以查看一下Pv,可以看到,没创建Vg前,Pe的大小是没有的。
2.创建Vg
vg我就不查看了,信息挺多,自行查看把,这里看一下创建vg后的Pe大小。
3.创建Lv并格式化挂载
格式化的图就略过了,我们看到虽然我们是指定lv路径挂载,但是实际是/dev/mapper下的设备挂载到了/test目录。
我们看一下,发现/dev/testvg/下的设备竟然是链接!而真实的设备在mapper下面。哼哼,知道dm的强大了吧。
行了,简单的就了解这些了吧,下面说一下LVM的扩大和缩小,扩大和缩小并不影响数据本身,但前提要按流程走哦。首先我们先了解下结构和什么是物理边界和逻辑边界,如下图:
我们知道,我们的文件系统是建立在分区之上的,而分区就相当于物理边界,文件系统就 相当于逻辑边界,而你数据存储的存储大小,就取决于物理边界和逻辑边界,如果我们把这种抽象的概念转移到我们的LVM之上,我们就会发现,Lv就相当于物理边界,而文件系统的就相当于逻辑边界。如果站在Vg的角度来看,我们的Lv也是逻辑边界,而Vg本身是物理边界,Ok,别弄乱了,只是站的角度不同而已。
那么,我们扩展的时候是先扩展逻辑边界还是物理边界呢?
很显然,是先扩展物理边界啦,逻辑肯定不能大于物理的了,
那么,我们缩小的时候,是先缩小物理,还是先缩小逻辑呢?
也很显然,是先缩小逻辑了,你先缩小物理边界了,那逻辑岂不是大于物理了?
让我们来扩展把,扩展如下:
1.先确认好要扩展的lv,并确保vg有足够的Pe用于分配。
2.扩展Lv(物理):有+号是在原有的大小上+5G空间,没有+号,则代表扩展到5G,一定要注意哦
扩展后我们df看一下大小,你会发现,文件系统并没有扩展,那我们的空间去哪了?
其实空间已经扩展了,我们刚才扩展的是Lv的物理大小
3. Ok,我们继续扩展Lv在文件系统中的大小(逻辑)。
Ps:resize2fs格式:resize2fs lv路径 15G(扩展至多大)或使用-P,扩展到最大(物理范围内)。
下面我们开始缩小Lv,缩小有风险,缩小需谨慎。
1.首先我们要卸载挂载目录(目前文件系统类型必须卸载,否则后果自负)
2.计算缩小容量,确认缩小后的空间能承载原有数据。
3.卸载并进行磁盘的一致性检查
4.缩小文件系统大小 缩小至2G 也就是减少了13G(逻辑)
5.缩小Lv到2G(物理)
6.挂载查看大小,你也可以挂载前在进行一致性检测
Ok,扩大缩小也说完了,在说说快照吧,下面只讲操作,至于原理,在写一篇吧,会在文章最小面附上链接,因为这篇已经写的好长了~
快照---保存系统某一个的状态(也可以理解为保存某一状态的数据)。
首先要声明的是:
*快照卷必须和创建快照的Lv在同一个卷组。
*快照卷的生存周期为整个数据的时长:也就是说数据的增长量不能超出分配快照卷的大小,否则,快照卷损毁。
1.先查看原有目录下的文件:
2.创建快照:
3.把快照卷挂载并查看文件,你发现,它保留了我们创建快照那一刻的数据。
Ps:lvcreate,-s 为指定为快照卷 -p指定权限有r和w,快照卷最好为只读了,防止操作不当删除数据,另外快照也可以用来最数据备份,这些在另一篇在说~
本文出自 “Mr.Yan” 博客,转载请与作者联系!