LVM

lvm的英文全名是logical volume manager,顾名思义lvm就好像有逻辑的管理卷的管家一样,也叫做“逻辑卷管理”。是传统Unix下高级管理非常强大的磁盘管理工具,!而在linux系统下lvm也是对于磁盘分区的一种管理机制。

 设想下面一个场景,当你最初规划主机的时候,给/home这个分出50GB,等到用户不断增加,然后你某天无意一个`df -h`,use%突破80%多了,怎么办?给它重新加一块新硬盘,再去做分区、格式化、挂载,然后再将以前即将满负荷的旧磁盘数据拷贝过来?若是服务器呢?假设是多人在线的服务器,你还要提前通知他们停止使用电脑,待我把数据拷贝过来么?这样一次可以,来回弄几次,我想回头老板就找你喝茶啦。

 其实在linux系统下有个特别好用的磁盘管理机制就是lvm,它的弹性调整文件系统的容量使这个棘手的问题不再是难关,lvm可以根据需要扩充或者缩小磁盘容量,甚至可以在系统运行过程中把一个分区临时加进来当做扩充,真的是非常好用说起lvm,就不得不谈谈组成它的各部分是什么。讲讲它是什么做的吧。

lvm的作法是:

1、可以使用虚拟机虚拟出几个分区。

2、或者是使用真实的物理磁盘或者是分区。

把以上的通过软件把它们组合成一块看起来像是一个独立的大容量的磁盘,再把这个大容量的磁盘通过分区的方法使它们变成一个个的逻辑卷分区,最后把这些逻辑卷通过格式化和挂载,就能为我们所用了!

这里其实有几个概念,希望朋友们牢记。

1、pv是什么?

pv在英文全称就是physical volume,翻译过来就是物理卷设备。pv是组成lv的根基,把它们通过pvcreate命令变成能被操作系统识别的vg,再由vgcreate的方法变成lv啦

2、vg是什么?

vg的英文全称就是volume group,即“卷组”。它就是上述所说的“大硬盘”,它最大的容量是多大呢?然而这要看pe的数量。

3、pe是什么?

physical extend,物理的拓展块。在lvm默认的情形下,pe的默认单位是4MB。它是整个lvm里面最小的存储块,而实际上我们写入文件数据都是由pe写入处理的。

4、lv是什么?

logical volume,逻辑卷。它就像磁盘的分区一样,你可以把它进行格式化挂载,方便我们弹性使用了!这里有个概念,实际上lv的容量是由pe的个数和每个pe的大小加起来决定的。

它的效果如下图

 

这次中规中矩的写一回LVM_LVM

 

 

  首先,我们展示一下如何创建LV       

   step1先对已购买的物理磁盘或者是虚拟机划分的磁盘进行分区。 

我这里使用fdisk命令对/dev/sdc下的设备分了三个分区,分别是

/dev/sdc1,

/dev/sdc2

/dev/sdc3。而且三个分区的文件系统格式都为8e      即linux LVM。

这次中规中矩的写一回LVM_PV_02

 

 

   step2、然后再创建pv即物理卷组。

命令:pvcreate [options] PhysicalVolume

PhysicalVolume就是你分区设备的名字,我这里就是上述的三个分区。 看,显示successfully created以成功建立。

这次中规中矩的写一回LVM_LVM_03

 

 

step3在pv基础上建立vg,即volume group 逻辑卷组

命令:vgcreate [options] VolumeGroupName PhysicalDevicePath... 注意这里volumegroupname是你要为你所创建的vg组起个名字,比如叫bill,而后面的PhysicalDevicePath则是你物理磁盘分区的路径,这里个人推荐用绝对路径,因为这样不容易产生歧义。

这里还有个选项-s,可以定义PE的大小,即为physcial Extend大小,因为PE是逻辑卷的直接存储单元,而LV只是含有多少PE的个数。这里PE的大小默认是4MB

这次中规中矩的写一回LVM_LVM_04

 

 

 

如果创建成功,则会在屏幕显示volume group XXX successfully created创建成功。

而假设想看自己创建的vg设备,可以使用命令 vgs or vgdisplay,两个命令都可以把vg的信息输出到屏幕上,相比之下vgdisplay较为详细。

step4、very important的一步,创建逻辑卷 LV(这里LV不是那些奢侈的包包儿啊~~~)

让我们看下创建LV的命令格式

# lvcreate -n 这里键入你要为lv起什么名字 -L 这里键入逻辑卷的大小,如果不加+符号,后面跟数字,表示直接分配多少数量的容量给LV 后面支持的单位有bBsSkKmMgGtTpPeE。

这里我给LV起个名字叫billy,区别于vg的bill,看!效果下图:

这里我们可以使用命令lvs或者lvdisplay来查看lv的信息。

这次中规中矩的写一回LVM_LVM_05

 

 其次,创建完成了还没有办法立即使用,好比敲锣打鼓把花轿抬到洞房那,结果发现不知道在哪个单元的几楼而且也房子也没有装修,还是毛坯房,结果岂不是很糟。

于是乎我们执行下面两步:

step1、把创建好的逻辑卷给建立文件系统(又称格式化),但是先要找到它的位置不是?

一般来说刚创建好的LV的位置在/dev/mapper/vg的名字-lv的名字。

那好,我们来找找billy,并顺便把它给格式化喽

这次中规中矩的写一回LVM_PV_06

 

下面就是第二步了

step2、把建立好的lv进行最后一步,挂载到linux下的某个目录下,就可以做数据存储了。我们这里提前在tmp下建立好一个叫mountbilly的目录,用于挂载生产的LV

这次中规中矩的写一回LVM_PE_07

tara!

 

注意!

 

本文还没有结束,这里还是几个LV的命令,包括如何扩建和缩减LV的容量,以及给LV创建快照!

 关于对LV的容量扩展

 我们可以使用lvextend命令对LV进行扩展,这里需要注意,你要扩展的容量不能超过VG的容量,而且还要注意当你用lvextend扩展完以后还要使用resize2fs 命令对文件系统进行扩展!

  #lvextend -L 扩展的大小 后面跟上数字n 如果想在原有的基础上再加上多少容量要用“+”号,如对LV billy在原来10G的容量上扩充到13G,看!

这次中规中矩的写一回LVM_PV_08

 

 

 

  关于对LV的容量缩减

我们也可以使用lvreduce命令对LV进行缩减,注意!首先保证最好你进行的是离线操作

这里要缩减前,先要对LV进行umount卸载,把设备卸载掉,然后要使用命令e2fsck -f执行强制检查。

检查ok

然后先要对文件系统进行缩减,再对LV大小进行缩减,看!

缩减到11G了

这次中规中矩的写一回LVM_PV_09

 

 

 

关于给LV创建snapshot(快照)

在lvcreate中有这么一个选项 [-s|--snapshot [VolumeGroup{Name|Path}/] -s表示创建快照,这里可以配合使用其他选项譬如--size=-L 指定快照大小来进行对LV进行快照,而快照最好设定一下快照的权限,把它设成只读的吧~

这次中规中矩的写一回LVM_LVM_10ok,快照创建完成。

不过这里要注意的是,万一你创建快照的时候,别人有数据正在写入怎么办?所以一般来说为了不出错,可以采取下列三步,第一临时把LV挂载成只读挂载,然后再创建LV的快照,最后在把挂载改成读写挂载就ok啦

 

LVM是一个弹性很强的工具,而且方便伸缩容量,真是杀人越货,啊不,仓储数据的必备良品。