lvm的全名是:Logical Volume Manager,逻辑盘卷管理的简称。使用lvm的好处是,可以弹性的调整磁盘的大小。轻松的让多块磁盘组合在一起,使之成为一块独立的大分区。不过raid也可以组合磁盘,那么两者之间有什么区别呢?


一、lvm和raid的区别

       二者都可以把小分区合并成大分区来用,不同的是,raid侧重的是数据的读写性能以及磁盘的容错能力,而lvm只是单纯的对组合后的磁盘容量具有增大或缩小以及对磁盘数据创建快照的功能。二者目的不一样,为了追求性能以及数据的可靠性可以使用raid,同样的,为了追求方便的调整磁盘大小则可以选择lvm。


二、lvm中的pv、pe、vg、lv

  pv的全名是:Physical Volume,翻译成中文叫作物理卷。pv是lvm中最底层的东西,创建lvm的第一步就是先创建pv。如果把pv比喻成ext3分区的话,那么pe就相当于pv中的数据块了。pe(Physical Extend)是整个pv中最小单位的存储模块,N块小pe组合起来,就成了一块大pv,pe的大小是可控的,默认为4M。而vg则是数块pv的组合,Volume Group,卷组。只有把pv组合在一个卷组里面,我们才可以方便的管理磁盘。

  假设我们使用数块pv组合在一个vg里的容量是500G,但是我们当前数据可能没有这么多,我可能只要用到500G里面的100G,并且希望在空间不够时在不动数据的情况下动态的调整大小,这个时候,lv的概念就出来了。lv就是那500G里单独切出来的100G空间,空间不够时,可以再向500G的vg组要容量,当500G的vg也用完后,再加硬盘,创建pv,组合在那个500G的vg里,然后就又可以使用了。


三、lvm的相关命令

1、pv: pvcreate(创建), pvremove(删除), pvscan(扫描), pvs(列表), pvdisplay(详情), pvmove(移动数据)

2、vg: vgcreate(创建), vgremove(删除), vgscan(扫描), vgs(列表), vgdisplay(详情), vgreduce(缩减),vgextend(扩容)

3、lv: lvcreate(创建), lvremove(删除), lvscan(扫描), lvs(列表), lvdisplay(详情), lvreduce(缩减),lvextend(扩容)


四、lvm的相关操作

我们先模拟一个操作:

(1)、创建一个11G的lvm,vg组为webvg,lv为mylv。

(2)、挂载分区至/web目录,使它能够正常使用。

(3)、拷贝数据至/web目录。

(4)、然后再给该分区增大12G容量。

(5)、删除部分数据,并减小分区容量至5G。

(6)、给/web分区创建快照卷,备分数据。

(7)、删除快照卷。


1、先给硬盘分区

首先使用fdisk工具给硬盘分区,格式为Linux LVM

Linux中操作lvm_linux

sdb1、sdb2、sdb3分别是5G、6G、12G


2、查看分区表状态,如果没有显示则使用 kpartx -af 或 partx -a 更新分区表

Linux中操作lvm_linux_02


3、创建pv

pvcreate /dev/sdb{1,2}

Linux中操作lvm_逻辑盘_03

如果有提示,直接按y,创建成功了,可以使用pvs或者pvdisplay查看结果

使用pvs查看,一个5G,一个6G

Linux中操作lvm_linux_04

使用pvdisplay可以查看详情,默认如果不加参数则显示所有

pvdisplay /dev/sdb1


Linux中操作lvm_逻辑盘_05

上图中,PE Size为0,当创建了vg后就可以看到这个数值变了。


4、创建vg

pv创建好后,要把它们放在一个组里,才能使用

vgcreate webvg /dev/sdb{1,2}

相关参数:

-s: 设置pe大小,默认为4M


Linux中操作lvm_逻辑盘_06

可以使用vgs和vgdisplay查看详情

Linux中操作lvm_ lvm _07


vgdisplay webvg

Linux中操作lvm_逻辑盘_08

此时可以看到PE为4M了

Linux中操作lvm_逻辑盘_09


5、创建lv

lvcreate命令的参数

-L: lv的大小
-n: lv的名字

创建命令

lvcreate -L size -n lv_name vg_name

创建一个名字叫作mylv的lv

lvcreate -L 11G -n mylv webvg

Linux中操作lvm_linux_10

查看lv

Linux中操作lvm_ lvm _11


lv创建好就是一个可以使用的设备了,它的设备文件放在创建时的vg组里,可以使用lvdisplay接上

设备名查看详情 设备名通常是:/dev/vg_name/lv_name

Linux中操作lvm_ lvm _12


6、格式化lv,并挂载到/web目录

mke2fs -t ext4 -b 2048 /dev/webvg/mylv


Linux中操作lvm_ lvm _13

挂载目录

mount /dev/webvg/mylv /web

挂载成功了,可以正常使用了

Linux中操作lvm_ lvm _14


7、接下我们可以复制一部分数据至/web目录

查看目录大小

Linux中操作lvm_linux_15


8、现在接着我们再给分区加12G的空间

现在分区大小为11G

Linux中操作lvm_逻辑盘_16

给lvm扩容的步骤是这样的:

(1)、首先,我们要确定要增加到多少G,并且确定vg卷组的剩余空间是否足够

(2)、如果空间足够,我们可以使用lvreduce命令给lv增加空间

(3)、lv增加后,我们再使用resize2fs命令给ext文件系统调整空间大小


8.1、增加pv

使用vgs命令查看vg大小

Linux中操作lvm_逻辑盘_17

我们当前使用的vg为webvg,剩余空间为12M,明显不足,此时我们要增加vg大小

先增加一个pv卷

Linux中操作lvm_ lvm _18

Linux中操作lvm_逻辑盘_19

添加成功。


8.2、使用vgextend把新建的pv添加到vg

Linux中操作lvm_逻辑盘_20

查看vg大小

Linux中操作lvm_逻辑盘_21


8.3、好了,webvg有12G可以使用了,接下来可以使用命令lvextend给lv扩容了

lvextend命令格式

lvextend -L [+]size /path/vg_name/lv_name
-L: 容量大小,加上+时,表示的是相对当前大小再加上若干大小


此时,我们之前有11G再加12G,于是就是23G,我们使用命令为

lvextend -L 23G /dev/webvg/mylv


Linux中操作lvm_linux_22

添加成功。此时可以查看mylv的大小

Linux中操作lvm_linux_23

mylv的大小为23G,回过头来再看看分区目录的大小

Linux中操作lvm_逻辑盘_24

分区大小还是以前的11G,说明文件系统没有识别我们刚加的大小,接着下一步。


8.4、使用resize2fs命令给文件系统增加容量

resize2fs /dev/webvg/mylv 23G

Linux中操作lvm_linux_25

增加成功!


9、把/web分区减至5G

减小lvm的步骤必须要和增加反着来

(1)、先卸载设备 umount

(2)、分区自检,去除出错的数据 e2fsck

(3)、减小ext分区大小 resize2fs

(4)、减小lv大小 lvreduce


个人认为可以这样理解:把lv卷比作你家大院(lv卷),分区比作你的房子(ext分区),房子里面住的是你

和你的家人(数据),当你想把你的房子(ext分区)扩大时,这时你得先扩大你家院子(lv卷),你才可以扩大

你的房子(ext分区);同理,要缩小房子时,就要反着来,先缩小房子,再缩小院子,这样才合理。


9.1、卸载设备

umount /web

9.2、分区强行检测

e2fsck -f /dev/webvg/mylv

9.3、减小ext分区大小

resize2fs /dev/webvg/mylv 5G

9.4、减小lv卷大小

lvreduce -L 5G /dev/webvg/mylv

Linux中操作lvm_逻辑盘_26


9.5、挂载设备,查看一下大小

Linux中操作lvm_linux_27

操作成功。


10、这时我们再建一个快照卷,把数据备份一下。

所谓快照卷,就是把分区的数据的某个时间点全部定格并保存,注意,保存的是时间点,并不是所有那个

时间点的数据,原来保存数据的分区,里面的数据无论你如何改变,都不会影响快照卷,但是快照卷只是

一个访问原分区的通道,所以快照卷里面的数据只能读,不能写,但是如果移动的话,移动的是数据本身。

于是我们可以作个快照卷,用来备份数据:

lvcreate -s  #使用-s命令创建快照

命令:

lvcreate -s -L 50M -n mylv_kz -p r /dev/webvg/mylv
# -s : 创建快照卷
# -L : 快照卷大小,一般不用太大,保存的不是数据
# -n : 快照卷名称
# -p : 模式,r 为只读
# /dev/webvg/mylv 此为原卷名称,以此设备创建快照

Linux中操作lvm_逻辑盘_28


11、可以通过快照卷访问那个时刻的数据了

挂载快照卷

mount /dev/webvg/mylv_kz /backup

打包备份 

tar -zcf /tmp/web/web_backup.tar.gz /backup/


12、好了,快照卷的使命完成了,可以把它删除了

lvremove /dev/webvg/mylv_kz




总结:lvm是个好东西呀,造福全人类!