LVM 简介
LVM是逻辑盘卷组管理 (Logical Volume Manager) 的简称. LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性,在一定程度上解决普通磁盘分区带来空间不够使用的问题.
逻辑卷组管理概念
PV (Physical Volume) - 物理卷
物理卷在逻辑卷管理中的最低层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘或者raid设备
VG (Volume Group) - 卷组
卷组建立在物理卷之上,一个卷组至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中.一个逻辑卷管理系统工程中可以只有一个卷组,也可以有多个卷组.
LV (Logical Volume) - 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立以后可以动态地扩展和缩小空间.
LVM关系图如下:
准备配置LVM
实验系统的版本为 CentOS6.7
首先检测系统中是否安装了 LVM管理工具
在虚拟机中添加一块磁盘,作为练习LVM的专用硬盘
继续在 /dev/sdb 硬盘上创建三个分区,类型为 Linux LVM. 可以
{通过 t 命令 , 将指定分区分区调整为 8e (lvm)}
开始创建 PV
# pvcreate /dev/sdb{5,6}
创建完成后可以通过 # pvs #pvscan 查看简略信息 #pvdisplay 查看详细信息
# pvs
# pvscan
# pvdisplay
创建 VG 卷组
创建名称为 myvg , 将 /dev/sdb5,/dev/sdb6 组合为一个
创建 vg 卷组后也可以通过 # vgs # vgscan 查看简略信息 # vgdisplay 查看详细信息
# vgs
# vgscan
# vgdisplay
创建 LV 卷组
# lvcreate –L 50M –n testlv myvg
在 myvg 卷组中,创建一个名称为 testlv 的逻辑卷组,大小为 50M
# mkfs.ext4 /dev/myvg/testlv
将 /dev/myvg/testlv 格式化为 ext4 格式
# mount /dev/myvg/testlv
格式化完成后,将 /dev/myvg/testlv 挂载,并查看
# df –Th
# vim /etc/fstab
将 testlv 设置为开机自动挂载
LV 的扩容
# df –lh 查看当前逻辑卷的大小为 47M , 需要扩展空间到 1G
首先扩展物理边界
在扩展 lv 之前,需要先确定 vg 有足够的空间
# vgs 查看当前 vg 的大小,可用
# lvextend –L 1G /dev/myvg/testlv
-L 1G 表示为将 /dev/myvg/testlv 扩展到 1G
-L +1G 表示为将 /dev/myvg/testlv 添加 1G 的空间
# lvs 查看 testlv 大小,物理边界扩展成功,此时若通过 # df –lh 命令查看 /dev/myvg/testlv , 会发现大小没有改变 , 所以还需要对文件系统进行扩容 (扩展逻辑边界)
继续扩展逻辑边界
# resize2fs –p /dev/myvg/testlv
# df –lh 查看 /dev/myvg/testlv 的大小 , 扩展完成
LV 的缩减
# df –lh
首先需要查看将要缩减的 lv , 已经使用了多少空间 . 要确定缩减后的空间大于已经使用的空间
# umount /mnt
缩减 lv 需要离线操作 , 则卸载
# e2fsck –f /dev/myvg/testlv
强制检测文件系统的完整性
# resize2fs /dev/myvg/testlv 30M
将 /dev/myvg/testlv 缩减至 30M
# lvreduce –L 30M /dev/myvg/testlv
两个步骤的缩减大小必须保持一致. -L 30M 表示将 testlv 缩减至30M. –L –30M 表示将 testlv 缩减 30M 的空间
# mount /dev/myvg/testlv 挂载完成后,查看 testlv 的大小
VG 的缩减
# pvs
# umount /mnt 缩减 vg 的大小需要先卸载
# pvmove 缩减 vg 就是移除 pv 的过程 , 需要提前将要移除的 pv 上的数据移动
如下图,将要移除 /dev/sdb5,那么先执行 pvmove /dev/sdb5 命令,将sdb5硬盘上的数据移动
# vgreduce myvg /dev/sdb5
从 myvg 中挪走 /dev/sdb5 , 并且查看 /dev/sdb5 已经不属于 myvg 卷组
# pvremove /dev/sdb5
将 /dev/sdb5 彻底移除
VG 的扩容
# pvs
在当前系统中在添加一个 pv
# pvcreate /dev/sdb7
将 /dev/sdb7 设置为 pv
# vgextend myvg /dev/sdb7
# pvs
通过 pvs 查看 , 添加成功
创建快照卷 (可以在线创建,无需卸载)
lvcreate
-s : 指明为创建快照卷
-p : 指明权限 r | w
注意 :
1. 生命周期为整个数据时长 : 在这段时长内,数据的增长不能超出快照卷大小.
2. 快照卷应该是只读的.
3. 跟原卷在同一卷组内.
当前挂载挂载后目录的内容如下
# lvcreate –L 50M –n testsnap –s –p r /dev/myvg/testlv
-L 50 M 指定快照大小最多为 50M
-s 指明为创建快照
-p r 指定为快照权限为 只读
-n 指定创建的快照名称为 testsnap
# lvs 查看刚才创建的快照
在 /mnt 目录下创建 a b c 三个文件
# mount /dev/myvg/testsnap /tmp
将刚才创建的快照挂载到 /tmp 目录下查看,并没有后来创建的 a b c 三个文件,因为a b c文件是创建快照卷以后touch的
# tar –zcf /root/testsnap.tar.gz *
将创建的快照挂载后,在挂载目录中所有文件打包备份
# umount /tmp # lvremove /dev/myvg/testsnap
卸载已经挂载的快照,并将其删除
# rm –rf *
将 /mnt 下的所有文件删除,准备恢复数据
# tar /root/testsnap.tar.gz –C /mnt
将备份好的数据指定路径,解压到 /mnt 下
当原数据大于创建快照时指定的快照大小时,快照将会彻底失效.