系统环境:centos7

需求:虚机中新增加了两块硬盘如下:

centos7 perl位于 centos7lvm_centos7 perl位于


使用fdisk -l 查看当前系统新增的硬盘信息:

centos7 perl位于 centos7lvm_lvm_02


需求是:先将 /dev/sdb 硬盘挂载到 /test 目录中,后期如果不够用再将 /dev/sdc 硬盘扩容到 /test 目录下

一、LVM
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

LVM基本术语
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

简单来说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区

二、安装LVM
首先确定系统中是否安装了lvm工具:

rpm -qa|grep lvm

centos7 perl位于 centos7lvm_逻辑卷_03


如果命令结果类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。

三、创建和管理LVM

1. 创建分区(也可以不用分区)

使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。如下列图所示:

centos7 perl位于 centos7lvm_lvm_04

先挂载硬盘 /dev/sdb ,创建新硬盘分区(此步骤貌似非必须步骤,也可以不用分区):
首先进入磁盘:

fdisk /dev/sdb

1)选择分区号,linux基本分区和扩展分区之和不能大于4,所以在1-4直接选择,一般是从大到小按编号选:输入命令n,然后输入1。

2)输入命令t,然后输入分区类型,输入8e表示虚拟逻辑卷分区,后期硬盘分区空间不足可以在线扩容。

3)输入命令w,重写分区表。

centos7 perl位于 centos7lvm_lvm_05

查看创建的分区:

centos7 perl位于 centos7lvm_逻辑卷_06


1)使用fdisk –l查看创建的分区,有时候会看不到创建的新分区,此时使用fdisk命令看不到新建的分区信息。

2)partprobe 是一个可以修改kernel中分区表的工具,可以使kernel重新读取分区表而不用重启系统。命令:

partprobe /dev/sdb

2. 创建PV

pvcreate /dev/sdb1

centos7 perl位于 centos7lvm_逻辑卷_07


3. 创建卷组(VG)和逻辑卷(LV)并格式化

创建VG:

# vgcreate [自定义vg名称] [硬盘分区]
vgcreate test_vg /dev/sdb1

centos7 perl位于 centos7lvm_linux_08


创建完成VG之后,才能从VG中划分一个LV。

创建LV:

# lvcreate -l[自定义分区大小] -n[自定义分区名称] [vg名称]
# 分区大小不能超过硬盘容量总和
如创建一个10G的分区:
lvcreate -l10.0G -n test_lv test_vg

如果将vg所有的空闲空间划至/dev/test_vg/test_lv中,可以使用以下方式:
lvcreate -l 100%VG -n test_lv test_vg
或者:
lvcreate -l +100%FREE -n test_lv test_vg

centos7 perl位于 centos7lvm_linux_09


lvdisplay: 查看系统中已经创建好的逻辑卷

centos7 perl位于 centos7lvm_文件系统_10


4. 格式化逻辑卷

# mkfs -t [文件系统] [分区位置]

mkfs -t ext4 /dev/test_vg/test_lv

centos7 perl位于 centos7lvm_逻辑卷_11


5. 创建目录并将新的分区挂载到创建的目录

mkdir /test

mount /dev/test_vg/test_lv /test

centos7 perl位于 centos7lvm_linux_12

6.设置开机自动挂载

# 在/etc/fstab文件末尾添加如下行:

/dev/test_vg/test_lv	/test  ext4		defaults	0 0

# 使用UUID
# 执行 blkid 可查看硬盘的uuid ,如 /dev/test_vg/test_lv 的UUID为UUID="986d6e2d-c41b-48a3-bab7-971b88f7cb60",则上面也可以指定UUID
UUID=986d6e2d-c41b-48a3-bab7-971b88f7cb60	/test  ext4		defaults	0 0

四、扩展VG,将新增加的第二块硬盘(/dev/sdc)挂载到/test目录中,实现/test的扩容

1.创建分区 /dev/sdc1

centos7 perl位于 centos7lvm_lvm_13


2.创建PV

pvcreate /dev/sdc1

centos7 perl位于 centos7lvm_centos7 perl位于_14


3.查看现有的VG

centos7 perl位于 centos7lvm_lvm_15


4.将新创建的PV: /dev/sdc1 添加到VG:test_vg中

centos7 perl位于 centos7lvm_linux_16


查看VG,发现VG的大小增加了,且有空余空间

centos7 perl位于 centos7lvm_centos7 perl位于_17

5.扩容LV:添加lv所在的vg剩下的空余空间

lvextend -l +100%FREE /dev/test_vg/test_lv

centos7 perl位于 centos7lvm_linux_18


查看文件系统大小,发现/test空间并未发生改变:

centos7 perl位于 centos7lvm_lvm_19


6.同步文件系统:

resize2fs /dev/test_vg/test_lv

注:resize2fs 是针对 ext 文件系统格式;

如果是centos7的默认文件系统XFS,需要使用 xfs_growfs /dev/test_vg/test_lv

centos7 perl位于 centos7lvm_linux_20


扩容成功。lsblk: 列出所有的块设备,而且还能显示他们之间的依赖关系

centos7 perl位于 centos7lvm_centos7 perl位于_21

五、附LVM操作的相关命令

命令

含义

pvs

查看PV

lvs

查看LV

vgs

查看VG

pvdisplay

查看系统中已经创建好的物理卷

pvcreate

创建一个新的物理卷

pvremove

删除一个物理卷(也就是从物理卷中删除一个LVM标签)

vgdisplay

查看系统中的卷组

vgcreate

创建一个新的卷组

vgreduce

从卷组中删除一个物理卷(也就是缩小卷组)

vgremove

删除一个卷组

lvdisplay

查看系统中已经创建好的逻辑卷

lvcreate

创建一个新的逻辑卷

lvreduce

缩小逻辑卷(也就是从一个逻辑卷中减少一些LE)

lvremove

从系统中删除一个逻辑卷