本人一直想对lvm进行一个总结,正好今天看到一篇好文章,加上自己以前笔记就进行一个总结,方便以后查看学习和帮助其他人学习,在这里感谢http://sofar.blog.51cto.com/353572/1304241博主文章,我在他的基础上加以补充完善,总结了这篇文章。最后说一句感谢51CTO,感谢CCTV。
LVM是逻辑盘卷管理的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。它的机制就是将多个块设备连接为一个整块的卷组(volumegroup),形成一个存储池。然后,在这个卷组上创建逻辑卷(logicalvolumes),并进一步在逻辑卷上创建文件系统。
当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
物理卷(physicalvolume):指磁盘分区或与磁盘分区有同样功能的设备(如RAID)。创建物理卷时磁盘类型需要是8e。如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。创建物理卷的时候不可以直接格式化!
卷组(volumegroup):就是将多个物理卷组合起来,逻辑上成为一块硬盘。它的大小有物理卷大小和多少决定,且至少要有一个物理卷。
逻辑卷(logicalvolume):在卷组上创建,可以在创建的逻辑卷上建立文件系统。类似与磁盘分区。不同的是逻辑卷的边界可以随意扩展或缩小。
PE(PhysicalExtents):在创建卷组时底层指定的一个存储单位,借鉴Oracle的表述方式就叫做物理盘区(物理扩展),所以我们在划分一个逻辑卷时就是分配多少个PE来决定的,PE的大小是由卷组决定的,PE的大小也是可配置的(下面会阐述),默认为4MB。
LE(LogicalExtents):当PE被分配到一个逻辑卷之后就被称作是LE,也就是说,把逻辑卷划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
快照(Snapshot):逻辑卷也支持快照,LVM快照通过把文件系统的改变记录到一个快照分区,而不是对这个分区做镜像(也就是保留过去某一刻的状态)。因此当你创建一个快照分区时,你不需要使用和你正创建快照的分区一样大小的分区,而是在做快照过程中需要改变的大小。这取决于有多少数据正在写入分区和你希望保留LVM快照多长时间。你保留的时间越长,在文件系统的的改变越多,更多的快照分区就会被填充改变的信息。在分区上的改变率越高,快照的平均生命期越短。如果一个LVM分区的改变量超过了快照的大小,那么快照就会被释放。简单说就是:快照中什么都没有它只是一个访问原文件的通路。(如图所示)有了快照之后我们对数据的备份就会非常的简单方便。
其创建过程是:先将物理设备做成物理卷,然后将物理卷组合起来形成卷组,最后在卷组上创建逻辑卷。而我们使用的就是逻辑卷。
简单的实现一个LVM逻辑卷实现过程:
1、创建分区
首先创建磁盘分区,这里使用SCSI硬盘,并且系统已经有了三个主分区,那么我们只能创建扩展分区,并在扩展分区上创建逻辑分区了。我使用fdisk工具进行分区。
#fdisk /dev/sda
注意的是分区类型必须是8e,否则无法支持LVM逻辑卷的使用。分区完最好输入p查看下创建好的分区以及类型,最后保存退出。这里我创建了/dev/sda5和/dev/sda6两个逻辑分区,大小分别是7G和3G。
2、创建物理卷
命令是pvcreate,我们可以将上面所创建的两个分区创建为物理卷,也可以先只将一个分区创建为物理卷。
#pvcreate /dev/sda5 /dev/sda6
3、创建卷组
命令是vgcreate,将上面创建的两个物理卷创建为一个卷组
#vgcreate myvg /dev/sda5 /dev/sda6
注意:
myvg是指定创建的卷组的逻辑名,可以随意的设定。后面就是将创建的物理卷添加到卷组中,这里我们也可以只将一个物理卷添加到卷组中,等想再添加另一个物理卷的时候再添加。需要注意PE(默认是4M)这个概念,它表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充或缩减。PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数。如果想指定PE大小只需要添加-s选项,指定PE大小就行了,列:
#vgcreate -s 16M myvg /dev/sda5 /dev/sda6。这里指定PE大小为16M。
4、激活卷组
为了立即使用卷组而不用重启系统,可以使用vgchange命令来激活卷组
#vgchage -ay myvg
5、创建逻辑卷
创建逻辑卷的命令是lvcreate,我们在myvg卷组上创建一个6G大小的逻辑卷,
-L来指定逻辑卷的大小;-n指定逻辑卷的名称
#lvcreate -L 6G -n mylv myvg
6、格式化逻辑卷分区
这里我使用的是ext3格式的文件系统
#mke2fs -j /dev/myvg/mylv
创建挂载点来挂在创建好的逻辑卷分区
#mkdir /mylv
#mount /dev/myvg/mylv /mylv
扩展一下内容
1、为卷组添加新的物理卷
当我们又创建了新的物理卷的时候,想要添加到myvg卷组中时,需要使用vgextend这个命令了。
#vgextend -t myvg /dev/sda7 #先测试是否可以添加物理卷
#vgextend myvg /dev/sda7
这里/dev/sda7表示我们创建的新的物理卷
2、从卷组中删除物理卷
要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷使用,这时我们就要使用pvdisplay命令察看一个物理卷信息:
如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
#vgreduce myvg /dev/sda7 这里为了简单说明,就将新添加的/dev/sda7从卷组中删除
附注:
如果我们创建的卷组包含两个物理卷,一个7G(/dev/sda5),一个3G(/dev/sda6),而我们LV上面已经有6G的数据了,这样我们就不能将/dev/sda5给移除了,因为移除/dev/sda5必然会损坏数据。而且我们不能确定数据是不是都在/dev/sda5上面,也不能贸然移除/dev/sda6。如果需要移除/dev/sda6的话,应该先将/dev/sda6上面的数据移到同卷组的其他物理卷上,然后再移除/dev/sda6。这就需要使用pvmove这个命令了,步骤如下
#pvmove /dev/sda6 #不需要指定将数据移动到那儿个磁盘上,它会自动将数据移动到同组的物理卷上
#vgreduce myvg /dev/sda6 将物理卷6删除
3、删除逻辑卷
删除逻辑卷时,要先将其卸载,然后才能删除,这里我们为了简单说明就将上面新建的逻辑卷作为例子
#umount /dev/myvg/mylv
#lvremove /dev/myvg/mylv
Do you really want to remove active logical volume mydata? [y/n]:y
4、扩展逻辑卷大小
扩展逻辑卷大小的命令是lvextend,上面我们创建逻辑卷的时候还剩4G容量,那么我们就为其再添加2G容量的步骤如下
#lvextend –L 8G /dev/myvg/mylv
或者这样增加这1G容量
#lvextend –L +2G /dev/myvg/mylv
增加逻辑卷的容量以后,我们的物理边界扩展了,此时查看逻辑卷的大小并没有改变,因为逻辑边界没有扩展。所以我们就需要扩展逻辑卷的逻辑边界了,命令如下
#resize2fs /dev/myvg/mylv #这里不用跟调整的大小,会自动扩展到扩展的物理边界
5、减小逻辑卷的大小
需要先将文件系统卸载了。需要注意的是,在缩减的时候我们的数据文件可能会受到影响,所以一般不建议缩减逻辑卷大小。这里我们使用的大小是添加过1G后的逻辑卷的大小,我们将其缩减为5G的大小。步骤如下
#umount /dev/myvg/mylv
#e2fsck –f /dev/myvg/mylv #强行检测逻辑卷
#resize2fs /dev/myvg/mylv 5G #调整逻辑卷的大小
#lvreduce –L 5G /dev/myvg/mylv #缩减逻辑卷的大小
或者
(#lvreduce –L -2G /dev/myvg/mylv)
#mount /dev/myvg/mylv /mylv
#df –lh #查看各个磁盘的大小
说明:在我们缩减的时候需要先用e2fsck命令强行检测下逻辑卷,然后用resize2fs命令调整逻辑卷的大小,最后用lvreduce来减小逻辑卷大小。
常用命令的简单介绍:
1、物理卷相关命令
pvcreate #创建物理卷
pvremove #移除物理卷
pvmove #移动物理卷的数据
pvscan #扫描物理卷
pvdisplay #查看物理卷的信息
例如:
#pvdisply #查看所有的物理卷信息
#pvdisply /dev/sda5 #只查看特定的物理卷的信息
pvs #简单查看物理卷的信息
2、卷组相关命令
vgcreate #创建卷组
-s :指定PE大小,默认PE大小是4M
vgdisplay #查看卷组的信息
vgextend #扩展卷组大小
-t :检测制定物理卷是否可以添加进来
vgreduce #缩减卷组大小
-t :检测指定物理卷是否可以移除出去
vgscan #扫描卷组
vgs #查看卷组的简单信息
3、逻辑卷相关命令
lvcreate #创建逻辑卷
-L :指定创建逻辑卷的大小
-n :指定逻辑卷的名称
lvdisplay #查看逻辑卷的信息
lvremove #移除逻辑卷
lvreduce #缩减逻辑卷大小
lvextend #扩展逻辑卷大小
lvs #简单查看逻辑卷的信息
二、创建学习篇
首先创建PV,然后将PV组合成VG,最后将VG划分为LV。
1、创建分区
使用分区工具(如:fdisk等)创建LVM分区,注意LVM的分区类型为8e。
使用fdisk创建分区,根据设备文件的绝对路径(/dev/sda)进入分区管理
注:一定要指定分区的格式为8e,这是LVM的分区格式
2、创建物理卷(PV)
格式:pvcreate 设备名称
查看结果:
格式:pvdisplay 设备名称
格式:pvs
3、创建卷组(VG)
格式:vgcreate VGNAME PV名称 …
vgcreate –s PE 可以指定PE大小
查看结果:
格式:vgdisplay 设备名称
格式:vgs
4、创建逻辑卷(LV)
格式:lvcreate –L SIZE –n LV_NAME VG_NAME
(说明:-L指定逻辑卷的大小,-n指定逻辑卷名称卷组名称 –l指定PE的个数)
查看结果:
格式:lvdisplay
格式:lvs
5、LV格式化及挂载
下一步需要对LV进行格式化(使用mke2fs进行格式化操作),然后LV才能存储资料
注:逻辑卷的设备文件路径:/dev/VG_NAME/LV_NAME
/dev/mapper/VG_NAME-LV_NAME
三、管理学习篇
1、扩展VG
首先准备好一个PV,然后使用vgextend命令即可完成扩展;
命令格式:vgextend VG_NAME /PATH/TO/PV
2、缩减VG
首先确定要移除的PV,然后将此PV上的数据转移至其他PV,最后从卷组中将此PV移除;
命令格式:
移动数据:pvmore 盘区到盘区
移除VG:vgreduce VG_NAME /PATH/TO/PV
注:在移除物理卷之前一定要把数据转移到其他盘区上。
3、删除PV
命令格式:pvremove
4、扩展逻辑卷
首先确定扩展多大?然后确定当前逻辑卷所在的卷组有足够的空间可用,最后进行扩展:方法:
一:扩展物理边界:lvextend-L [+]SIZE /path/to/lv
(注:“+”可省的,其中有“+”表示扩展了,无“+”表示扩展了)
二:扩展逻辑边界:resize2fs/path/to/device
5、缩减逻辑卷
由于逻辑卷的缩减有风险,所以第一步要确定缩减为多大?也就是说至少能容纳原有的数据,第二步进行缩减;缩减需要三步:
a)、卸载并强行检测文件系统
命令:e2fsck –f
b)、逻辑边界
命令:resize2fs/path/to/device SIZE
c)、物理边界
命令:lvextend -L [+/-]SIZE /path/to/lv
d)、查看结果
6、快照卷(只是做原件的通路,不能修改,不能写入)
lvcreate
-s :指定快照卷;
-p r:限定快照卷为只读访问的;
格式: lvcreate -L SIZE-s -p r -n LV_NAME /path/to/lv
7、利用LV的快照功能还原系统
#lvcreate -L 50M -s -p r -n mylv-snap /dev/myvg/mylv【创建快照mylv-snap】
#mount -o ro /dev/myvg/mylv-snap /media【挂载快照】
#tar -jcv -f /backup/lvm.tar.bz2 /media/* 【备份快照数据】
#umount /media
#lvremove /dev/myvg/mylv-snap
对/dev/myvg/mylv里面的数据进行随意修改.......
还原:
#tar -jxv -f /backup/lvm.tar.bz2 -C /mnt【将快照备份的数据还原到lvm当中】
8、移除逻辑卷和快照卷
首先要确定已经卸载过了逻辑卷
格式:lvremove /path/to/lv
9、移除卷组
格式: vgremove/path/to/lv
总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。