轻松管理Linux的LVM逻辑盘卷

LVM逻辑卷

每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。
完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。

逻辑卷简介

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

物理分区或磁盘是 LVM 的第一构建块。这些可以是分区、完整磁盘、 RAID 集或 SAN 磁盘。物理卷是 LVM 所使用的基础 “ 物理 ”存储。这通常是块设备,例如分区或完整磁盘。设备必须初始化为 LVM 物理卷 ,才能与 LVM 结合使用。

卷组是存储池,由一个或多个物理卷组成,物理区块是物理卷中存储的小型数据区块, 用作 LVM 存储的后端,逻辑区块映射到物理区块, 构成 LVM 存储的前端。默认情况下,每个逻辑区块映射到一个物理区块。启用某些选项将更改此映射,例如 ,镜像会导致每个逻辑区块映射到两个物理区块逻辑卷是逻辑区块组。逻辑卷可以像硬盘驱动器分区一样使用。

LVM工作机制

LVM就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

为什么要使用LVM

在日常工作或者学习中,随着电脑的不断被使用,我们的磁盘空间可能会越来越小,这时候,我们不能直接更换大硬盘,因为硬盘有价,数据无价,这时候我们就可以使用LVM。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,和硬件相关的存储设置被其隐藏,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移,这样能减少操作成本,LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

需要理解的专业名词

(1). 物理卷( Physical Volume,PV)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝。默认为1,保存在设备的开始处;为2时,在设备结束处保存第二份备份。

(2). 卷组(Volume Group,VG)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷PV组成。

(3). 逻辑卷(Logical Volume,LV)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。

(4). 物理块(Physical Extent,PE)
每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

它们几个的关系大致如下图所示:
轻松管理Linux的LVM逻辑盘卷_第1张图片


LVM的制作步骤

在介绍LVM的制作过程之前先来看几个命令以及对应的功能:

  • pvs   查看系统中的物理卷pv的个数以及具体使用情况
  • vgs   查看系统中的卷组vg的个数以及具体的使用情况
  • lvs   查看系统中的逻辑卷lv的个数以及具体使用情况
pvcreate  /dev/vdb{1..3}

创建物理卷,后面跟磁盘的分区;

vgcreate westos /dev/vdb{1..3}

将创建好的物理卷组成一个名为 westos 的物理卷组,当然这个名字可以随意取;

lvcreate  -n lv0 -L 1.5G westos

从名为 westos 的卷组中取出1.5G的大小去创建一个名为 lv0 的逻辑卷,其中参数 -n 指定逻辑卷名称,参数 -L 指定逻辑卷的大小。

下面是具体的LVM制作过程:

Step1 创建三个物理分区并把分区id修改为8e

先在/dev/vdb 磁盘中创建三个物理分区出来,如下:
轻松管理Linux的LVM逻辑盘卷_第2张图片
然后分别将它们的id改为 8e ,即 LVM,如下:
轻松管理Linux的LVM逻辑盘卷_第3张图片
p查看分区信息:
轻松管理Linux的LVM逻辑盘卷_第4张图片
最后 wq 保存退出,并用 partprobe 命令同步分区表,分区创建成功:
在这里插入图片描述

Step2 再另外打开一个Shell用以下命令去监控设备信息

watch -n 1 'pvs; echo =====; vgs; echo ======; lvs'

执行命令之后就会出现以下监控界面:
轻松管理Linux的LVM逻辑盘卷_第5张图片
Step3 pvcreate命令创建物理卷
轻松管理Linux的LVM逻辑盘卷_第6张图片
执行命令之后,可以看到三个物理卷创建成功。

Step4 vgcreate命令创建物理卷组
轻松管理Linux的LVM逻辑盘卷_第7张图片
执行命令之后,可以看到一个名为westos,大小为3个G的物理卷组创建成功。

Step5 lvcreate命令创建逻辑卷

从名为 westos 的卷组中取出1.5G的大小去创建一个名为 lv0 的逻辑卷,如下:
轻松管理Linux的LVM逻辑盘卷_第8张图片
逻辑卷创建成功之后, 会产生一个虚拟设备文件,将有两个文件指向这个设备,一个是 /dev/mapper/卷组名-逻辑卷名,还有一个是 /dev/卷组命/逻辑卷名:
在这里插入图片描述
lv、vg和pv的删除

上面介绍了lv、vg和pv的创建过程,那么下面看一下对它们进行删除的命令:
注意:删除时应先删除lv逻辑卷,然后是删除vg卷组,最后再删除pv物理卷

lvremove /dev/westos/lv0

lvremove删除指定的逻辑卷,后面跟创建逻辑卷后产生的虚拟设备文件
轻松管理Linux的LVM逻辑盘卷_第9张图片

vgremove 卷组名称

vgremove命令将对指定名称的卷组进行删除,如下:
轻松管理Linux的LVM逻辑盘卷_第10张图片

pvremove /dev/vdb{1..3}

pvremove命令将删除指定的物理卷:
轻松管理Linux的LVM逻辑盘卷_第11张图片


逻辑卷lv的应用

逻辑卷创建成功之后就可以进行使用了,下面看一下使用逻辑卷的具体步骤:

Step1 格式化之前创建好的逻辑卷设备
可以格式化ext格式,也可以格式化xfs格式,使用mkfs命令进行格式化以ext4文件系统进行格式化为例,如下:
轻松管理Linux的LVM逻辑盘卷_第12张图片
成功将逻辑卷lv0格式化为ext4文件系统。

Step2 挂载设备到文件系统上

可以创建一个专门挂载逻辑卷的目录 /lvm ,然后用mount命令将逻辑卷挂载到新建的目录上,如下:
在这里插入图片描述
使用下面的命令查看挂载情况:

mount | tail -1

在这里插入图片描述
Step3 编辑开机自动挂载文件

/etc/fstab文件是开机进行自动挂载的文件,开机就会自动实现文件中的挂载,该文件中的具体内容在前面的文章已经详细介绍过,在此就不多介绍了。vim命令打开 /etc/fstab 文件,在文件中编辑如下内容:
轻松管理Linux的LVM逻辑盘卷_第13张图片
然后wq保存退出,再执行 mount -a 命令让文件中的挂载生效:
在这里插入图片描述


ext格式逻辑卷的拉伸与缩减

LVM的强大之处在于可以支持在线扩容(拉伸), 但不支持在线缩减(此处的在线指的是逻辑卷在挂载状态下就可以进行操作,而不需要先卸载)。ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)。

1、拉伸逻辑卷
先看下面几个命令:

lvextend  -L 大小 /dev/westos/lv0

-L表示指定拉伸的大小,后面可以直接跟大小,表示拉伸到多大;也可以跟 “+大小”,表示拉伸多少容量。该命令表示将指定的逻辑卷拉伸进行指定大小的拉伸。

resize2fs /dev/westos/lv0

resize2fs命令表示对文件系统进行存储空间大小的更新。

df -h

该命令可以查看文件系统的大小是否拉伸成功。

下面我们就试着将之前创建的大小为1.5G大小的逻辑卷拉伸到1.8G 大小,操作步骤如下:

Step1 确定卷组是否有足够的空间可以拉伸

使用 vgs 命令可以查看卷组的使用情况,从而可以确定是否还有足够的空间进行拉伸:
在这里插入图片描述Step2 使用逻辑卷拉伸命令lvextend对逻辑卷进行拉伸

在这里有两种方式对逻辑卷进行拉伸,都可以实现把逻辑卷拉伸到1.8G,命令分别如下,可以选择其中任意一个:

lvextend  -L 1.8G /dev/westos/lv0
lvextend  -L +300M /dev/westos/lv0

在这里插入图片描述
Step3 查看拉伸后的空间大小

我们可以使用 lvs命令查看逻辑卷设备的大小是否拉伸成功;可以使用 df -h命令查看文件系统的大小是否拉伸成功,如下:
轻松管理Linux的LVM逻辑盘卷_第14张图片逻辑卷成功被拉伸,可是文件系统还并没有被拉伸,下面我们就需要对文件系统进行更新使其拉伸。

Step4 更新文件系统的大小

resize2fs命令可以对文件系统进行存储空间大小的更新,如下:
在这里插入图片描述
Step5 查看更新后的文件系统

df -h 查看更新后的文件系统大小:
轻松管理Linux的LVM逻辑盘卷_第15张图片
2、拉伸物理卷组

上一个需求中,逻辑卷拉伸的大小比卷组的要小,那么如果逻辑卷拉伸大小需求要比卷组的空间大呢?这时就需要先对卷组进行拉伸,然后再从足够空间大小的卷组中取出需求大小的逻辑卷。

先看一个拉伸卷组的命令:
vgextend命令是对指定卷组进行拉伸,后面跟卷组名,还有要加入卷组的物理卷。
下面我们就试着将之前拉伸到1.8G大小的逻辑卷再次拉伸到3.5G 大小,操作步骤如下:

Step1 确定卷组是否有足够的空间可以拉伸

在这里插入图片描述
Step2 创建一个物理卷

之前的物理卷有3个,加起来只有3G的大小,所以我们需要用 pvcreate 命令创建一个物理卷,如下:
在这里插入图片描述
Step3 将新的物理卷添加 / 拉伸到物理卷组中并查看拉伸后的卷组容量变化

vgextend将物理卷添加到卷组中:
在这里插入图片描述
Step4 再拉伸逻辑卷,重复上面拉伸逻辑卷的操作

对逻辑卷进行指定大小的拉伸:
在这里插入图片描述
对文件系统大小进行更新,并查看更新后的文件系统:
轻松管理Linux的LVM逻辑盘卷_第16张图片
3、缩小逻辑卷

如果逻辑卷存储空间太大了,可能会造成浪费,因此会有缩小逻辑卷的需求,下面我们就看一下缩小逻辑卷的操作步骤。前面就提到过LVM不支持在线缩减,因此需要先把挂载的逻辑卷卸载掉
注意:和拉伸逻辑卷顺序正好相反,缩小逻辑卷需要先缩小文件系统,然后才能进行缩小逻辑卷的操作。
具体的操作步骤如下:

Step1 卸载正在挂载的逻辑卷

umount /lvm

Step2 对文件系统进行校验

使用e2fsck命令是检查ext2、ext3、ext4等文件系统的正确性。-f 参数代表强制检查,-v参数表示详细显示模式:

e2fsck -fv /dev/westos/lv0

轻松管理Linux的LVM逻辑盘卷_第17张图片
Step3 先缩小文件系统到1G

resize2fs命令还能改变文件系统到指定的大小:
在这里插入图片描述
Step4 缩小逻辑卷

缩小逻辑卷的命令是lvreduce,该命令用法和拉伸逻辑卷命令lvextend用法是一样的,同样是-L 指定大小:

lvreduce  -L 1G /dev/westos/lv0

轻松管理Linux的LVM逻辑盘卷_第18张图片
然后重新挂载逻辑卷,并查看所见是否生效:
轻松管理Linux的LVM逻辑盘卷_第19张图片
Step5 查看卷组中是否有空闲的分区,如果有,则移除空闲分区
轻松管理Linux的LVM逻辑盘卷_第20张图片
可以看到 vdb3和vdb5是空闲的。

vgreduce命令对卷组中空闲的物理卷进行移除,用法如下:

vgreduce 卷组名  /dev/vdb{3,5}

轻松管理Linux的LVM逻辑盘卷_第21张图片
再用pvremove命令把空闲的物理卷删除掉:
轻松管理Linux的LVM逻辑盘卷_第22张图片


xfs格式逻辑卷的拉伸(不能缩减)

上面介绍了ext4格式的逻辑卷的拉伸以及缩减步骤,那么如果逻辑卷的格式是xfs的话,又该如何进行拉伸呢?需要注意的一点是 xfs格式的逻辑卷不提供缩减方法。

xfs格式逻辑卷的拉伸方式可ext格式的拉伸步骤其实是相同的,只是在更新文件系统时用的命令是不同的。xfs格式文件系统的更新命令为 xfs_growfs ,用法和 resize2fs 用法是一样的。

下面就看一下xfs格式的逻辑卷的拉伸的具体步骤:
首先我们需要把之前的物理卷、卷组以及逻辑卷都删除掉,如下:
轻松管理Linux的LVM逻辑盘卷_第23张图片
然后我们再创建接下来的实验要用的物理卷、卷组和1G大小的逻辑卷,如下:
轻松管理Linux的LVM逻辑盘卷_第24张图片
然后将逻辑卷lv0格式化成xfs格式的文件系统,如下:
轻松管理Linux的LVM逻辑盘卷_第25张图片
并将逻辑卷lv0挂载到/lvm 目录:
轻松管理Linux的LVM逻辑盘卷_第26张图片
下面我们就试着将创建好的1G大小的逻辑卷拉伸到1.8G 大小,操作步骤如下:

Step1 确定卷组是否有足够的空间可以拉伸
轻松管理Linux的LVM逻辑盘卷_第27张图片
Step2 对逻辑卷进行拉伸
拉伸方式和之前的一样也是有两种方式,分别如下:

lvextend  -L 1.8G /dev/westos/lv0
lvextend  -L +300M /dev/westos/lv0

轻松管理Linux的LVM逻辑盘卷_第28张图片
Step3 查看文件系统的大小是否拉伸成功
轻松管理Linux的LVM逻辑盘卷_第29张图片
Step4 更新文件系统
命令如下:

xfs_growfs  /dev/westos/lv0

轻松管理Linux的LVM逻辑盘卷_第30张图片
Step5 查看更新后的文件系统大小
轻松管理Linux的LVM逻辑盘卷_第31张图片


创建快照以便于数据备份

当我们利用逻辑卷存储文件时,可能会碰到逻辑卷会损坏的情况,那么逻辑卷中的文件就会出现问题甚至会丢失。这时我们就需要对逻辑卷创建快照,当快照损坏时,再重新创建一个就可以了。
快照逻辑卷是 LVM 存储的另一项灵活功能。 LVM 快照是临时保留所更改的逻辑卷的原始数据的逻辑卷。快照提供原始卷的静态视图,从而能够以一致状态备份其数据,快照卷大小只需足以存储在它存在期间更改的数据即可。
如果数据更改量大于快照存储容量 ,则快照将自动变为不可用( 原始卷原封不动,仍然需要从卷组中手动解除挂载和删除不可用的快照 )。

创建快照的命令如下:

lvcreate  -L 10M -n lv0-snap -s /dev/westos/lv0

-L是指定快照的大小,-n是指定快照的名字,-s是对哪一个逻辑卷进行创建快照。

目前有一个1.8G大小的逻辑卷,如下:
轻松管理Linux的LVM逻辑盘卷_第32张图片
将其挂载到/lvm下,并查看挂载情况:
轻松管理Linux的LVM逻辑盘卷_第33张图片
然后在/lvm 目录下创建50个文件,如下:
轻松管理Linux的LVM逻辑盘卷_第34张图片
然后取消挂载,并创建逻辑卷lv0的快照,如下:
轻松管理Linux的LVM逻辑盘卷_第35张图片
然后将快照挂载到 /lvm 下,并查看/lvm 目录:
轻松管理Linux的LVM逻辑盘卷_第36张图片
下面我们把 /lvm下的文件都删除掉来模拟快照损坏的场景:
在这里插入图片描述
文件都不在了,这时我们需要将这个损坏的快照删除掉,再重新创建一个快照就可以解决了。首先将快照的挂载卸载掉,然后删除之前的逻辑卷快照:
在这里插入图片描述
然后再次创建快照并将其挂载到/lvm目录下,并查看目录,之前丢失的文件就又会回来了,如下:
轻松管理Linux的LVM逻辑盘卷_第37张图片

你可能感兴趣的:(Linux)