一、LVM2简介

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。

如图所示LVM模型:

wKioL1Uibuqh82J8AAC1aO9L8Yk981.jpg


由四个物理卷分区可以组成一个很大的空间,叫做卷组VG,然后在这些空间上划分一些逻辑分区【LV】,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给空间不够用的分区使用。


二、LVM基本术语

物理卷(Physical Volume,PV)

指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

metadisk:dm

devicemapper,将一个或多个底层块设备组织一个逻辑设备的模块

lv的三个访问路径:

设备文件/dev/dm-#: 每个文件都有两个符号链接

/dev/mapper/VG_NAME-LV_NAME

/dev/VG_NAME/LV_NAME

快照:snapshot

 

三、创建和管理LVM

1、创建逻辑卷步骤:pv--> vg --> lv  【     PE大小是由vg决定的】

               例如:创建一个10G的卷组:

pv1:3G,pv2:7G   或者pv1: 10G

 

2、管理PV;

(1).创建磁盘分区

#fdisk/dev/sd[ab..]---->将分区格式调整为8e--->让内核重读分区表

注意:将分区的格式调整为8e

 

(2).创建物理卷【 pvcreate /dev/DEVICE】

#pvcreate /dev/sdb7

 

(4). 查看是否创建成功

#PvdisplayPV_NAME详细信息 

#pvs显示所有物理卷的简要信息

 

(5).移除物理卷 【pvremove /dev/DEVICE】

#pvremove/dev/sdb7

 

3、管理VG;

(1).创建VG:【vgcreateVG_NAME PV...】 选项:-s #{kKmMgGtTpPeE}:指定PE大小,默认为4MB;

#vgcreatemyvg[卷组名称]  /dev/sdb6【物理卷名称】

 

(2).显示创建的卷组

#vgs

 

(3).扩展VG并验证 【vgextendVG_NAME PV...】

#vgextendmyvg /dev/sdb7

#vgs

 

(4).缩小VG[或删除PV] 【vgreduceVG_NAME PV...】

     a.移动PV数据

     #pvmove /dev/sdb6

    

b.缩减VG

     #vgreduce myvg /dev/sdb6

 

c.验证是否成功

     #vgs

 

d.移除PV

     #pvremove /dev/sdb7

 

注意:先执行pvmove操作,以确保位于此PV上的数据能安全移动至其它PV;

 

(5).显示VG信息

#vgdisplayVG_NAME

 

4、管理LV:

(1).显示创建的LV

#lvs

 

(2).创建LV 【 lvcreate[OPTIONS] VG_NAME ; -n LV_NAME  ; -L#{kKmMgGtTpPeE} 】

#lvcreate-L 2G -n mylv [指定的LV的名字] myvg[VG的名称]

 

(3).创建文件系统

#mkfs-t ext4  /dev/mapper/myvg-mylv

或者另外的路径:#mkfs -t ext4  /dev/myvg/mylv

 

 

(4).挂载使用

#mkdir/users

#mount/dev/mapper/myvg-mylv /users/

#ls/users/  查看内容是否挂载

 

(5).查看创建的LV大小:

#df-lh

 

(6).查看LV信息

#lvdisplay  myvg[注意是VG的名称]

或者#lvdisplay  /dev/myvg/mylv

#lvg显示所有的LV

 

 

(7).扩展LV

lvextend/dev/VG_NAME/LV_NAME

   -L : +[扩展多少];不用+号则为,扩展到多少

 

例如:将LV扩展到3G

a.扩展lv大小到3G

#lvextend -L3G /dev/myvg/mylv

 

b.修改文件系统使用所有包含扩展的空间

#resize2fs/dev/myvg/mylv

 

c.查看验证是否生效:

#df -lh

步骤思路总结:

(1) 扩展物理边界

      lvextend

(2) 扩展逻辑边界

      resize2fs

(8)收缩LV:lvreduce,lvresize

lvreduce-L [-]#{kKmMgGtTpPeE} /dev/VG_NAME/LV_NAME

 

步骤思路:

a.先离线【卸载】

umount/users

 

b.强制检测文件系统【ext系列为例】

e2fsck-f /dev/myvg/mylv

 

c.收缩逻辑边界

resize2fs/dev/myvg/mylv 1G

 

d.收缩物理边界

lvreduce-L 1G /dev/myvg/mylv

 

e.上线挂载

mount/dev/myvg/mylv /users/

 

注意:收缩lv,要卸载lv;收缩后空间要能够容纳当前的所有数据量;

 

(9).删除LV

lvremove[-f] /dev/VG_NAME/LV_NAME

 

a.先卸载LV,并验证

#umount/users

#mount或cat /proc/mounts 查看验证是否卸载生效

 

b.移除

#lvremove/dev/myvg/mylv

 

四、快照卷:【原理请参考:http://blog.csdn.net/woxiaozhi/article/details/11773101】

lvcreate -L #{kKmMgGtTpPeE} -s -p r -nSNAP_LV_NAME /dev/VG_NAME/LV_NAME

 

提示:快照卷与原卷在同一个卷组中,因此,创建快照卷之前要确保原卷所在的卷组中有足够空间可用;

  快照卷无须与原卷一样大;其大小取决于快照卷的存活时长内原卷的数据变化量;

 

1.创建逻辑卷LVM快照卷并挂载

#lvcreate -L 3G -n mylv myvg

#mke2fs /dev/myvg/mylv -t ext4

#mount /dev/myvg/mylv /users

 

2.复制文件做验证

#cp -a /etc/* /users

#ls /users

 

3.备份/users目录

#lvcreate -L 100M -s -p r -n mylv-snap/dev/myvg/mylv

#lvs

 

4.挂载快照卷至/mnt

#mount -t ext4 /dev/myvg/mylv-snap /mnt

#ls /mnt 看到数据与/users目录一样的

 

5.在原卷中修改数据并验证挂载的快照卷是否修改

#vim /users/fstab

#cat /mnt/fstab 快照还是没有修改

 

6.等数据全部复制完成,删除快照卷即可

a.卸载

#umount /mnt


b.删除

#lvremove -f /dev/myvg/mylv-snap