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