Linux 逻辑卷管理器(LVM)的使用

版权说明:本文为博主原创,如果转载请注明来源。作为学习笔记,不能保证所有知识点是完全正确以及表达无误,用于生产环境配置时请斟酌。如有错误或建议请联系。侵删联系:linuxops@qq.com。感谢各位!

一、前言

服务器的磁盘空间管理在运维工作中是很重要的,一台服务器安装皓系统配置好磁盘上线,随着业务的发展磁盘空间被占满,在传统的磁盘分区中,空间被占满是无法直接对空间进行扩容的.通常情况下我们会插上一个容量更大的磁盘,停止业务后将数据拷贝到更大的磁盘上从新挂载到原来的路径中,这种方式异常麻烦,不仅耗时耗力,更关键的业务停止带来了损失,特别是关键业务.应对这种情况,LVM就产生了.

LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

LVM有其明显的特性:可以在线动态扩容分区空间,也可以动态缩减空间。但也有其局限性:在一个卷组中的磁盘损坏是,整个卷组都会受到影响。

二、LVM的一些概念

在LVM中,通过对底层的物理磁盘抽象封装以逻辑卷的形式提供给上层应用,在抽象过程中有几个很重要的概念需要记住:

  • 物理硬盘:底层的存储设备,linux中的/dev/sda,/dev/sdb等;

  • 物理卷(physical volume,PV):对应于非LVM中的分区,在LVM中,带有LVM的相关信息;可以是一整块物理磁盘,也可以是物理磁盘中的某一个分区。

  • PE:物理块,默认为4MB,逻辑卷管理的存储的最小单位。

  • 卷组(volume group,VG):有一个或多个物理卷组成为一个PE池;

  • 逻辑卷(logical volume,LV):由卷组中产生,可以由一个或多个PE组成一个逻辑卷

以上是LVM中的几个重要的概念,可以看出,物理卷基于物理硬盘,卷组基于物理卷,逻辑卷基于卷组。在创建逻辑卷的时候也将按照这个顺序一层一层创建。

三、创建LVM

上面介绍了LVM的组成和一些概念,接下来我们要来创建一个LVM。创建一个新的LVM大致过程如下:

  • 创建PV物理卷,物理卷可以是一整块磁盘,也可以是磁盘中的一个分区。
  • 创建VG卷组,卷组可以包括多个PV物理卷。
  • 创建LV逻辑卷,逻辑卷的空间来自某一个VG
  • 格式化LV逻辑卷。
  • 挂载LV逻辑卷

为了方便演示,我们使用kvm虚拟机,安装centos7.4系统。

先看一下目前系统的磁盘状态

[root@localhost ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda2        20G  1.8G   19G    9% /
devtmpfs        3.9G     0  3.9G    0% /dev
tmpfs           3.9G     0  3.9G    0% /dev/shm
tmpfs           3.9G  8.5M  3.9G    1% /run
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
tmpfs           783M     0  783M    0% /run/user/0
[root@localhost ~]# fdisk -l

磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000de613

   设备 Boot      Start         End      Blocks   Id  System
/dev/vda1            2048        4095        1024   82  Linux swap / Solaris
/dev/vda2   *        4096    41943039    20969472   83  Linux

[root@localhost ~]# blkid 
/dev/vda2: UUID="f729b994-5140-4785-9832-291567b56010" TYPE="xfs" 
/dev/vda1: UUID="474529d9-7c38-4aee-8f06-201b8daf4dd5" TYPE="swap" 
[root@localhost ~]# 

可以看到目前系统只有一个磁盘,并且没有使用LVM。为了演示,我们加上三个磁盘,具体规划如下:

设备名称 磁盘大小 分区情况
/dev/vdb 10G 不分区
/dev/vdc 10G 不分区
/dev/vdd 10G 分两个区vdd1和vdd2

添加磁盘,并且对vdd分区之后磁盘的情况如下:

[root@localhost ~]# fdisk -l

磁盘 /dev/vda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000de613

   设备 Boot      Start         End      Blocks   Id  System
/dev/vda1            2048        4095        1024   82  Linux swap / Solaris
/dev/vda2   *        4096    41943039    20969472   83  Linux

磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/vdc:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/vdd:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4af22dc0

   设备 Boot      Start         End      Blocks   Id  System
/dev/vdd1            2048    10487807     5242880   83  Linux
/dev/vdd2        10487808    20971519     5241856   83  Linux
[root@localhost ~]# 

可以看出vdd被分为了两个区,每一个区的大小为5G

准备好了磁盘之后我们进行LVM操作。如果安装操作系统的时候没有使用逻辑卷,那么系统不会自动安装LVM,所以我们要安装一下LVM,当前LVM的版本是2。

[root@localhost ~]# yum install -y lvm2 lvm2-devel lvm2-libs

下面开始正式配置KVM。

1、创建PV物理卷

使用pvcreate命令创建PV物理卷,使用pvdisplay查看物理卷信息。

小技巧:LVM的相关命令其实很好记的,比如pvcreate,拆分为pv和create,create意为创建,pv是相对应的逻辑层,这样你应该猜到创建vg使用什么命令吧?

[root@localhost ~]# pvcreate  /dev/vdb /dev/vdc /dev/vdd1 /dev/vdd2
  Physical volume "/dev/vdb" successfully created.
  Physical volume "/dev/vdc" successfully created.
  Physical volume "/dev/vdd1" successfully created.
  Physical volume "/dev/vdd2" successfully created.
[root@localhost ~]# 

如上,创建好了PV,是不是很简单呢?

通过pvdisplay可以查看相关的PV信息,如下信息可以看出VG NamePE Size还有Total PE都没有信息,是因为这些信息需要在VG中指定

[root@localhost ~]# pvdisplay /dev/vdb
  "/dev/vdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bOXMDt-dQGc-Kzu4-E29I-EEER-VhzU-xAkiwO

当然,如果pvdisplay不加参数将会显示所有PV的信息。另外试一下pvs命令吧,会有不一样的体验的

2、创建VG卷组