前言
通常情况下,在操作系统上新建了一个分区并在此分区创建文件系统后,该文件系统的大小就固定了。假如要增加此文件系统的大小,我们不得不添加一块硬盘并重新分区,创建文件系统,然后把原文件系统的数据完整复制过来。如果第二次分区时分配的空间太大,用不完又浪费该怎么办呢?重复此前的流程又将花费大量的时间,有没有更便捷的办法呢?下面介绍的逻辑卷管理器就是解决这个问题的。
一、简介
LVM(Logical Volume Manager),译为逻辑卷管理器。所谓卷(Volume),意味着可伸缩,我们可以弹性调整文件系统的容量大小,并且不会损坏数据。LVM是对磁盘管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层;LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来将一个或多个底层块设备组成一个逻辑的工具。
1、Physical Volume(PV),物理卷:创建分区时,标记分区类型为8e后,就可以将该分区做成物理卷供LVM使用了。可以用任意块设备做成物理卷,单个分区、整块硬盘、RAID设备都可以。
2、Volume Group(VG),卷组:顾名思义,就是将一个或多个PV组合为一个卷组,以PE为存储单位。一个VG至少包含一个PV,VG可以创建多个。
3、Physical Extent(PE),物理区域:PE是整个LVM中可分配的最小存储单元,大小在创建卷组时指定且确定后不能更改;同一卷组的PE大小需一致。新的PV加入卷组后,PE的大小会自动更改为原卷组PE的大小。
4、Logical Volume(LV),逻辑卷:建立在卷组的基础上,卷组中空闲的PE可分配给LV使用,创建LV后可通过增加或减少PE来动态扩展和缩小空间大小。LV可以直接创建文件系统并挂载使用。两种写入模式:线性模式(linear)、交错模式(triped)。
二、物理卷(PV)的常用管理命令
pvcreate #创建一个物理卷 pvchange #修改物理卷的属性 pvresize #调整一个PV的大小 pvremove #删除一个PV pvdisplay #显示PV的属性信息 pvmove #移动PE到指定物理卷 pvscan #搜索所有磁盘上的物理卷 pvs #显示PV的简要信息
示例1:创建3个PV
[root@qin ~]# parted /dev/sdb mklabel msdos [root@qin ~]# parted /dev/sdb mkpart primary ext2 0G 10G [root@qin ~]# parted /dev/sdb mkpart primary ext2 10G 20G [root@qin ~]# parted /dev/sdb mkpart primary ext2 20G 30G [root@qin ~]# pvcreate /dev/sdb{1..3}
示例2:将PV1上的数据迁移到PV2,然后删除该PV。
[root@qin ~]# pvmove /dev/sdb1 /dev/sdb2 #注意:两个PV必须在同一卷组内 [root@qin ~]# pvremove /dev/sdb1 #删除PV前要确保该PV没有在任何卷组中
三、卷组(VG)的常用管理命令。
vgcreate #创建卷组 -l:设置可容纳的LV最大数,默认为255 -p:设置包含PV的最大数,默认为255 -s:设置PE大小,默认为4M vgextend #扩展VG大小 vgdisplay #显示VG属性信息 vgchange #修改VG属性信息 vgreduce #缩减VG大小 vgremove #删除VG vgscan #搜索所有磁盘上的卷组 vgs #显示VG简要信息 vgck #检查VG元数据
示例1:创建一个卷组,要求PE大小为8M,名称为Myvg,最大支持LV不能超过10个,包含的PV不能超过2个
[root@qin ~]# vgcreate -s 8M -l 10 -p 2 Myvg /dev/sdb{1,2} [root@qin ~]# vgdisplay Myvg #查看VG属性信息验证结果 --- Volume group --- VG Name Myvg #VG名称 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 10 #可以看到,支持最大LV数为10个 Cur LV 0 Open LV 0 Max PV 2 #支持最大PV数为2个 Cur PV 2 Act PV 2 VG Size 18.61 GiB PE Size 8.00 MiB #PE大小 Total PE 2382 Alloc PE / Size 0 / 0 Free PE / Size 2382 / 18.61 GiB VG UUID LdOZtc-4ccd-5ryh-Ux7V-O29f-CEhc-VVuuSF
示例2:扩展Myvg大小
[root@qin ~]# vgextend Myvg /dev/sdb3 #由于此前定义了VG的最大PV数,无法扩展 No space for '/dev/sdb3' - volume group 'Myvg' holds max 2 physical volume(s). Unable to add physical volume '/dev/sdb3' to volume group 'Myvg'. [root@qin ~]# vgchange -p 3 Myvg #修改VG属性 [root@qin ~]# vgextend Myvg /dev/sdb3 #扩展VG成功
示例3:缩减Myvg大小;然后删除Myvg
[root@qin ~]# vgreduce Myvg /dev/sdb2 #注意:把PV移出卷组时要保证该PV数据已迁移或未使用 [root@qin ~]# vgchange -an Myvg #标记Myvg为不可用状态 [root@qin ~]# vgremove Myvg #不论VG包含多少PV都可删除,前提是该VG上没有任何LV,如果有就需要先删除LV
四、逻辑卷(LV)的常用管理命令
lvcreate #创建LV -l:设置LV大小,以PE为单位 -L:设置LV大小,以字节为单位 -n:设置LV名称 -p:设置LV权限读写权限,默认为可读可写 -s:设置一个快照卷,对一个已存在的LV做快照 lvextend #扩展LV大小 lvreduce #缩减LV大小 lvchange #修改LV属性信息 -ay:标记LV为可用状态 -an:标记LV为不可用状态 lvremove #删除LV lvdisplay #显示LV属性信息 lvscan #搜索所有磁盘上的逻辑卷 lvs #显示LV简要信息
示例1:创建一个LV,要求大小为10G,名称为lv001,指定卷组为Myvg。
[root@qin ~]# lvcreate -L 10G -n lv001 Myvg
示例2:扩展lv001的大小,要求增加5G空间大小
#方法一: [root@qin ~]# lvextend -L +5G /dev/Myvg/lv001 #方法二: [root@qin ~]# lvextend -L 15G /dev/Myvg/lv001
示例3:缩减lv001的大小,要求减少8G空间大小
[root@qin ~]# lvreduce -L -8G /dev/Myvg/lv001 #注意,缩减前需确保LV为卸载状态
示例4:删除lv001
[root@qin ~]# lvchange -an /dev/Myvg/lv001 #标记lv001为不可用状态 [root@qin ~]# lvremove /dev/Myvg/lv001
示例5:对lv001创建一个快照卷
[root@qin ~]# lvcreate -L 10G -n lv001_snap -p r -s /dev/Myvg/lv001 #必须跟目标逻辑卷在同一卷组中
五、实验:在线扩容和离线缩减逻辑卷的大小。
1、查看当前系统挂载及逻辑卷的相关信息。
2、缩减/data的空间大小,并验证查看。
注意:缩减逻辑卷大小前必须先缩减文件系统的大小,而且要强制检查文件系统
缩减不能少于已经存储的所有数据空间的大小
3、扩展逻辑卷大小
先查看当前LV大小,卷组可用空间,文件系统大小
然后扩展逻辑卷大小
最后扩展文件系统大小
总结:
LVM的添加顺序:PV-->VG-->LV
LVM的删除顺序:LV-->VG-->PV
逻辑卷可在线扩展,但必须离线缩减
缩减很危险,不到万不得已不要执行缩减操作!!!
扩展逻辑卷后文件系统也要扩容
缩减逻辑卷前要先缩减文件系统