LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。
直接使用fdisk分区挂载的话,随着时间的推移,数据量越来越大,硬盘空间越来越小,要想扩充容量的话,就必须挂载新硬盘然后做数据迁移,这就必然导致前台业务的停止,不符合企业需求,因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。
LVM逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷,大大提高了磁盘管理的灵活性。
首先我们讨论以下几个LVM术语:
一块硬盘(物理存储介质)被格式化为物理卷(physical volume),其内部被分成若干个默认大小为4M的PE(physical extent),然后在PV的基础上创建卷组(Volume Group),可以把一个或者多个PV加到VG中,VG就好像一个空间池,假如多少个PV,VG就有多大的容量,最后基于VG创建逻辑卷(logical volume) ,一个逻辑卷就是若干个PE,然后将LV格式化再挂载(将LV当成是分区)
pvcreate 硬盘名称
pvcreate /dev/sdb /dev/sdc
可以通过pvdisplay
或者pvs
命令来查看创建的物理卷
vgcreate 自定义VG名称 要加入的PV
vgcreate VGName /dev/sdb /dev/sdc
可以通过vgdisplay
或vgs
来查看创建的卷组
至此,物理卷和卷组已经创建成功,但是硬盘空间还不能使用,我们还需要创建逻辑卷。
lvcreate -n 自定义逻辑卷名称 -L 要创建的逻辑卷的大小 VG名称
lvcreate -n LVName -L 3G VGName
可以使用命令lvs
或lvdisplay
查看lv的详细信息
mkfs.ext4 /dev/VGName/LVName
mount /dev/VGName/LVName /mnt
至此,逻辑卷就创建挂载好了,可以使用啦~!
lvremove 逻辑卷名称
lvremove /dev/vgTest/lvTest
vgremove vg名称
vgremove vgTest
pvremove pv名称
pvremove /dev/sdb /dev/sdc
注意:删除逻辑卷的过程一定是
卸载挂载---删除lv---删除vg---删除pv
LVM和其他的分区方式最大的优势就是可以动态的拉伸或缩小逻辑卷空间,并且是在线执行的,拉伸并不会影响原有数据无需下线,缩小逻辑卷需要下线,如果直接缩小,数据则有可能被破坏
vgdisplay
lvextend -L +1G /dev/vgTest/lvTest
lvdisplay
resize2fs /dev/vgTest/lvTest
df -h
当逻辑卷空间不够的时候,我们可以扩充逻辑卷,其实质就是从VG中拿若干PE到LV中,但是当VG中空间也不够时,我们就需要拓展VG,也就是将新硬盘格式化为PV添加到VG中
pvcreate /dev/sdd
vgextend linuxcast /dev/sdd
vgs
逻辑卷的缩小必须离线,需要卸载逻辑卷,如果在线缩小,则有可能丢失数据,先缩小文件系统,再缩小LV
resize2fs 需要缩小的文件系统 缩小到的大小
resize2fs /dev/linuxcast/mylv 10G
lvreduce -L 缩小大小 缩小的LV
vgreduce 卷组名称 硬盘名称
vgreduce linuxcast /dev/sdd
vgdisplay