由于传统的磁盘管理不能对磁盘进行磁盘管理,因此诞生了LVM技术,LVM技术最大的特点就是对磁盘进行动态管理。由于LVM的逻辑卷的大小更改可以进行动态调整,且不会出现丢失数据的情况。

 

LVM(Logic Volume Manager)是逻辑卷管理的简称。它是Linux环境下对磁盘分区管理的一种机制。对于其他的的UNIX(AIX/HP/SUM)操作系统,以及Windows系统也有类似的磁盘管理软件。

 

LVM管理的方式非常简单,就是通过将底层的物料磁盘抽象并封装起来,然后以逻辑的方式呈现给上层应用。



LVM 机制的基本概念
PV(物理卷)
VG(卷组)
LV(逻辑卷)


image.png


  • 逻辑卷管理概念定义:

image.png

image.png

主要命令

image.png


实验环境:

VMware Workstation Pro

image.png


image.png

image.png

image.png

image.png

image.png

image.png

image.png

先添加一块硬盘做以下实验使用。


---

划分磁盘分区:

查看系统是否识别新添加的硬盘      fdisk -l

image.png注:/dev/sdb/为新添加的磁盘


将sdb磁盘进行分区,分出3个主分区,1个扩展分区,2个逻辑分区,分区大小全为2G.

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xb6f3b9c8 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (4196352-41943039,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n  
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (8390656-41943039,默认为 8390656):
将使用默认值 8390656
Last 扇区, +扇区 or +size{K,M,G} (8390656-41943039,默认为 41943039):+2G
分区 3 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):N
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e 
已选择分区 4
起始 扇区 (12584960-41943039,默认为 12584960):
将使用默认值 12584960
Last 扇区, +扇区 or +size{K,M,G} (12584960-41943039,默认为 41943039):
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 14 GiB

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (12587008-41943039,默认为 12587008):
将使用默认值 12587008
Last 扇区, +扇区 or +size{K,M,G} (12587008-41943039,默认为 41943039):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (16783360-41943039,默认为 16783360):
将使用默认值 16783360
Last 扇区, +扇区 or +size{K,M,G} (16783360-41943039,默认为 41943039):+2G
分区 6 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

image.png


安装LVM管理工具

使用yum方式安装:    yum install lvm2 -y

创建PV,将磁盘分区/dev/sdb1-3 初始化为物理卷

格式:pvcreate 物理设备/分区设备

[root@localhost ~]# pvcreate /dev/sdb[1-3]
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.


查看PV

image.png

注:

PV NamePV名字
VG Name隶属的VG名字
PV SizePV的大小
Allocatable是否可分配
PE Size每个PE的大小
Total PEPE的数量
  Free PE剩余的PE
 Allocated PE可分配的PE
 PV UUIDPV的UUID号


pvs也可以查看PV信息,没有pvdisplay详细

image.png


pvscan  扫描磁盘中的物理卷

image.png


创建VG——将物理卷/dev/sdb1-3 组合成一个卷组

格式:vgcreate 卷组名(自定义)  物理卷名

image.png

image.png


同样可是使用vgs/vgscan查看

image.png


创建LV

lvcreate -L 1G -n lv01 vg01    //从vg01这个卷组中分出1G的空间给lv01

image.png

注:

-L 指定创建的LV的大小

-I 指定创建的LV的PE数量

-n LV的名字


查看LV的信息 lvdisplay

image.png

同样可以使用lvs和lvscan查看

image.png


image.png

这时的VFree从5.99g减少到了4.99g,另外的1g被分配到了lv01


格式化LV

mkfs.xfs /dev/vg01/lv01   #将/dev/vg01/lv01格式化为xfs文件系统

image.png


挂载使用

mkdir /opt/lv01   #创建用于挂载的目录

mount /dev/vg01/lv01 /opt/lv01/  #临时将逻辑卷挂载到目录下

image.png


将挂载信息写入/etc/fstab,实现开机自动挂载

image.png

mount -a  #检测/etc/fstab文件,并运行挂载


添加测试数据

向/opt/lv01写入测试数据以验证LVM的磁盘动态管理

image.png


LVM的扩容操作

LVM最大的好处就是可以对磁盘进行动态管理,而且不会丢失现有的数据

(1)LV的扩容

查看vg01剩余容量,还有4.99G可用

image.png


对lv01进行扩容:lvextend -L +1G /dev/vg01/lv01

image.png

vg从4.99变成了3.99    lv从1G变为2G 


使用dh -hT 命令查看分区使用的情况:

image.png

发现实际容量并没有变化,那是因为系统还不认识刚刚添加进来的磁盘的文件系统,所以还需要对文件系统进行扩容


这里我使用的文件系统是xfs文件系统,使用以下命令去扩容:

xfs_growfs /opt/lv01/

image.png


如果是ext系列的文件系统,使用以下命令扩容:

resize2fs 设备名或挂载点


扩容后,在使用df -hT查看分区情况:

image.png


再看看挂载点/opt/lv01里面有没有变化:

image.png

挂载点目录里的数据正常,代表对lv01在线扩容完成。


(2)VG的扩容

VG的扩容有两种方法:

第一种:通过增加PV来实现扩容。

创建PV:使用/dev/sdb5来创建一个PV

pvcreate  /dev/sdb5

image.png


扩容VG:

查看现在的vg01的容量

[root@localhost lv01]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   3   1   0 wz--n- <5.99g <3.99g
[root@localhost lv01]# vgextend vg01 /dev/sdb5
  Volume group "vg01" successfully extended
[root@localhost lv01]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  vg01   4   1   0 wz--n- 7.98g 5.98g

image.png


第二种:通过扩展RAID设备的容量来间接对VG进行扩容,这是基于RAIDA设备做的LVM。

 需要注意是:raid设备大小变化后,需要调整PV的大小:

pvresize raid的设备名称



LV的缩减操作

缩减操作需要离线处理

(1) 卸载文件系统

image.png

(2)缩减LV

image.png


(3)挂载查看

image.png

这是因为xfs文件系统只支持增加,不支持减少。但是不是说xfs系统文件不能减少,只是缩减后需要格式化才能挂载上,但是这样操作原来的数据就丢失了


image.png

image.png

image.png

在看挂载点,没有任何数据。


如果是ext系统的话,不会出现这种结果

卸载挂载后

检查磁盘:e2fsck -f /dev/vg01/lv01

缩减文件系统:resize2fs /dev/vg01/lv01

缩减LV: lvreduce -L 1G /dev/vg01/lv01

注:文件系统和LV缩减的大小必须保持一致,1G代表缩减到的大小



移除LVM

(1)卸载挂载

(2)移除LV

image.png

image.png

lvremove /dev/vg01/lv01

vgremove vg01

pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5

到此,LVM移除完成。