LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的办法是使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着linux内核中逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。
LVM的几个基本术语:
1.物理存储介质(PhysicalStorageMedia)
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等。
2.物理卷(Physical Volume,PV)
从逻辑上与磁盘分区具有同样功能的设备,是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
3.卷组(Volume Group,VG)
由一个或多个物理卷PV组成,类似于非LVM系统中的物理磁盘,可以在卷组上创建一个或多个LV(逻辑卷)。
4.逻辑卷(Logical Volume,LV)
逻辑卷建立在卷组VG之上,类似于非LVM系统中的磁盘分区,在逻辑卷LV之上可以建立文件系统。
5.物理块(Physical Extent,PE)
每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。
### 1.首先让系统中已建立好的分区具有LVM功能:
#博主使用vdb这块硬盘做实验,首先用fdisk /dev/vdb进入该盘的设置界面, 用p命令查看该硬盘上的分区情况:
# 发现此盘上现在有两个分区,但都未开启LVM功能,下一步我们开启这两个分区的LVM功能:
在上一步的设置界面输入t命令修改分区的类型,输入1为分区1修改类型,再输入L命令查看VLM功能的id是多少。
没错id 如上图所示是 8e,继续输入8e,这时分区一的类型就修改完成了,按p命令查看修改结果:
发现已经修改成功,我们模仿上面的步骤对分区2进行同样的操作。
### 2.创建物理卷(PV)、卷组(VG)、逻辑卷(LV)
首先我们把vdb1分区做成物理卷PV,用命令:pvcreate /dev/vdb1 实现,在这之前一定记得用 partprobe命令通知系统的分区情况。
接着我们创建卷组(VG),使用命令:vgcreate vg1 /dev/vdb1
再接着我们创建逻辑卷(LV),为逻辑卷分配50M的大小,使用命令:lvcreate -L 50M -n lv1 vg1
查看PE、LV、VG的信息:
现在我们为逻辑卷(LV)创建文件系统,再将其挂载到/mnt目录上:
### 3.为逻辑卷(LV)扩容
我们先来看看现在LV的容量:
我们将其扩展至100M,使用命令:lvextend -L 100M /dev/vg1/lv1
查看已经成功扩展至100M:
但这只是lv1 这块设备扩容成功了,文件系统记录的还是原来的设备大小:
所以还需要扩展文件系统,使用该命令:xfs_growfs /dev/vg1/lv1
此时文件系统也扩展至将近100M。有的人可能会问:为什么磁盘的容量和lv1卷的容量不一致?这时因为磁盘采用的是1M=1024KB,而lv1逻辑卷采用的1M=1000KB。
### 4. 对VG卷组进行扩容
# 若某天你的原有的VG卷组的容量用完了,我们就需要对卷组进行扩容。
首先先要创建一块新的物理卷,使用命令 : pvcreate /dev/vdb2 来创建新的物理卷。
接着将新创建的物理卷加入之前的卷组vg1,使用命令:vgextend vg1 /dev/vdb2 来进行扩展vg1:
然后再查看扩展的结果,已经由之前的496M扩展至1.46GB:
在压缩前应该注意,xfs文件系统是不可以压缩的, 而ext类型的文件系统可压缩。
(一)、使用tx4文件系统的设备容量的拉伸
### 1.首先将xfs文件系统转换为ext文件系统
将/dev/mapper/vg1-lv1 卸载 并 格式化为ext4类型的文件系统:
然后挂载该设备 并 用blkid命令查看修改的结果:
### 2.拉伸lv1的容量
先看看现在lv1的容量为多大:
将其扩展至1GB,使用命令:lvextend -L 1000M /dev/vg1/lv1
### 3.拉伸ext4文件系统
先来看看现在的文件系统记录的挂载的容量大小:
使用命令:resize2fs /dev/vg1/lv1 对文件系统进行扩展,并查看扩展后的结果:
(二)、使用ext4文件系统的设备容量的压缩
### 1. 使用监控命令监控pv vg lv 以及挂载在/mnt上的虚拟设备vg1-lv1设备的动态信息:
命令: watch -n 1 'pvs;echo ===;vgs;echo ===;lvs;echo ===;df -h /mnt'
### 2.扫描检测逻辑卷的大小
此步是必须进行的操作,防止压缩太小,已有文件放不下。
使用命令: e2fsck -f /dev/vg1/lv1 来进行检测,检测前要卸载掉设备,如下图:
### 3.ext4 文件系统的压缩
#文件系统的压缩要在设备的压缩之前,防止数据损坏
使用该命令对文件系统进行压缩:resize2fs /dev/vg1/lv1 500M,表示压缩至500M。
观察监视窗口发现:虽然挂载的设备已经压缩至500MB,但逻辑卷lv1这块虚拟设备的容量并没有变化:
### 4.逻辑卷lv1的压缩
使用该命令进行压缩:lvreduce -L 500M /dev/vg1/lv1
再观察监视窗口发现 挂载的lv1设备和真实的lv1的容量大小都被压缩至500M了:
四、物理卷PV的增减:
### 1.新建一个2GB大小的物理卷,并加入卷组vg1,此物理卷未被使用过:
### 2.从vg1中移除未使用的物理卷和增加新的物理卷:
再监视窗口里看见vdb3这块物理卷现在在vg1这个卷组中:
使用命令:vgreduce vg1 /dev/vdb3 从vg1中移除该物理卷:
使用命令:vgextend vg1 /dev/vdb3来把vdb3这块物理卷再次加入卷组vg1中:
### 3.从vg1中去掉已经使用的物理卷:
#博主这里的vdb2这块物理卷已经使用过了且正在使用,我们试着把其从vg1中移除掉。
#首先将物理卷vdb2移到物理卷vdb3,注意!!!vdb3这块物理卷需要具备两个条件:1.容量要比vdb2大;2.未被逻辑卷lv1使用过。
放一张移动前的数据图片:
现在使用命令: pvmove /dev/vdb2 /dev/vdb3 来移动vdb2到vdb3:
再将vdb2 从vg1卷组 中移除掉:
### 4.磁盘的快照:
##第一步:挂载 /dev/mapper/vg1-lv1 设备到 /mnt 目录上,然后再目录/mnt下面创建10个文件:
## 第二步:对逻辑卷磁盘设备vg1-lv1做快照
先卸载掉/dev/mapper/vg1-lv1:
然后对逻辑卷lv1进行快照。
使用命令: lvcreate -L 100M -n lv1_snop -s /dev/vg1/lv1 #### 表示对lv1逻辑卷创建一个大小为100M名字叫lv1_snop的快照。
现在挂载快照文件,发现真实设备中的10个file文件也在:
## 第三步:删除快照文件及里面的10个文件
首先删除掉10个文件:
然后卸载掉快照:
### 第四步:再创建快照
lvcreate -L 50M -n lv1_snop1 -s /dev/vg1/lv1
### 第五步:测试看那10个文件是否还存在。
最后得出结论:对i磁盘进行快照后读的是原文件,更改的是快照文件,原文件没有被损坏。
1.先卸载挂载的逻辑卷以及快照设备:
2.移除快照设备:
3.移除逻辑卷lv1:
移除之前:
用命令 lvremove /dev/vg1/lv1 移除:
观察监视窗口,lv1 消失了,说明已经被成功移除:
4.移除 卷组 vg1:
移除前监控窗口:
观察监控窗口:
5. 移除物理卷
使用命令 pvremove /dev/vdb{1,2,3} 移除三个物理卷:
观察监控窗口:
#现在所有的LVM设备都被删除了
然后我们删除掉 vdb1 vdb2 vdb3 这三个分区:
最后我们用命令 partprobe 命令通知系统对分区的改变,到这里关于LVM的所有设备和设定都移除了。