一文全解:LVM(逻辑卷管理器)
前两篇文章已经讲了关于磁盘分区和磁盘阵列的相关内容:
但是磁盘分区完后再想扩容或者缩容就比较麻烦了,甚至很多时候不能扩容或者缩容,这时候就要用到linux非常常用的硬盘设备资源管理技术:LVM了。
LVM,英文全称叫做 "Logical Volume Manager",翻译过来的意思叫做"逻辑卷管理器",主要解决的是磁盘动态扩容或缩容的问题。
一般而言,在生产环境中无法在最初时就精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。硬盘分好区或者部署为 RAID 磁盘阵列之后,再想修改硬盘分区大小就不容易了,LVM作为现在非常普及的硬盘设备资源管理技术,允许用户对硬盘资源进行动态调整,从而解决上述问题。
一、逻辑卷管理器基本概念

上图中涉及到几个概念:
PV(Physical Volume):物理卷,顾名思义,它可能是一个硬盘,也可能是一个RAID磁盘阵列。
VG(Volume Group):卷组,多个物理卷(PV)组成一个卷组。
LV(Logical Volume):逻辑卷,也即是我们探讨的核心了,它基于卷组分配管理磁盘资源。
PE(Physical Extent):基本单元,LV能管理分配的最小单位,LVM分配出来的每个空间都必须是PE的整数倍。
也就是说物理卷(PV)组成了卷组(VG),逻辑卷(LV)基于卷组(VG)分配管理基本单元(PE)。
上图中的逻辑卷A跨硬盘将若干个PE合并起来,对外直接使用逻辑卷A即可,而不用关心逻辑卷A下到底有几个硬盘。
二、逻辑卷管理实战
LVM部署时,需要逐个配置物理卷、卷组和逻辑卷,常用的部署命令如下所示:
| 功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
|---|---|---|---|
| 扫描 | pvscan | vgscan | lvscan |
| 创建 | pvcreate | vgcreate | lvcreate |
| 显示 | pvdisplay | vgdisplay | lvdisplay |
| 删除 | pvremove | vgremove | lvremove |
| 扩容 | vgextend | lvextend | |
| 缩容 | vgreduce | lvreduce |
有人或许会问,为啥逻辑卷管理没有扩容和缩容的命令呢?
答:逻辑卷对应着底层的硬盘或者RAID磁盘阵列,如果它能扩容或者缩容,就没有LVM什么事儿了,哈哈。
以下操作基于Vmware虚拟机操作。
1、物理卷和卷组创建
先给虚拟机新增加两块20G的硬盘,然后开机。可以看到sdb/sdc两块硬盘已经就绪

第一步: 让两块硬盘支持lvm技术
pvcreate /dev/sdb /dev/sdc

第二步: 把两块硬盘设备加入到storage卷组
vgcreate storage /dev/sdb /dev/sdc

第三步: 查看卷组状态
vgdisplay

从上述截图中可以看到,卷组创建完成后,PE相关的参数就已经确定好了,大小是4MB,40G的空间一共划分出了10238个PE等待lvm划分逻辑卷使用。
2、逻辑卷创建
第一步: 创建逻辑卷
我们现在从storage卷组中切割出来一块201M的逻辑卷设备。
这里要注意,切割方式有两种:
按照大小切割,使用的参数是
-L,比如-L 150M表示的是切割出来150MB大小的逻辑卷;以基本单元的个数为单位,使用的参数是
-l,每个基本单元的默认大小是4MB,比如-l 37,就可以生成37*4MB=148MB大小的逻辑卷。
比较方便的肯定是根据大小进行切割:
lvcreate -n kdyzm_lv -L 201 storage

创建是成功了,但是可以看到它提示了个信息:Rounding up size to full physical extent 204.00 MiB。这个意思就是四舍五入创建了204MB的逻辑卷设备。为什么呢,我们明明创建的是201MB大小,它擅自给改成了204MB?答案是我们创建的大小必须是PE(Physical Extent,基本单元)的整数倍,PE大小是4MB,所以就给修正成了204MB。
Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。
第二步: 格式化和挂载
如果使用了逻辑卷管理器,不建议使用xfs文件系统,据说xfs和lvm的兼容性并不好。所以接下来使用ext4来格式化硬盘。

当然为了挂载重启后不失效,需要将挂载信息写入到/etc/fstab文件中,此处不赘述。
3、逻辑卷扩容
使用逻辑卷最大的用处就是可以为它动态扩容:卷组由若干块硬盘组成,用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。
逻辑卷扩容的步骤:取消挂载->逻辑卷扩容->检查硬盘完整性->重置设备在系统中的容量->重新挂载硬盘设备
第一步: 取消挂载
扩容前请一定要记得卸载设备和挂载点的关联:umount /kdyzm_lv
第二步: 逻辑卷扩容
将逻辑卷/dev/storage/kdyzm_lv的容量从204.00 MB扩容到300MB
lvextend -L 300M /dev/storage/kdyzm_lv

同时,它也提示了“Size of logical volume storage/kdyzm_lv changed from 204.00 MiB (51 extents) to 300.00 MiB (75 extents).”,这个逻辑卷原来的容量是204M(51个基本单元),现在扩容到了300M(75个基本单元)。
第三步: 检查硬盘完整性
确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。
e2fsck -f /dev/storage/kdyzm_lv

第四步: 重置设备在系统中的容量
刚刚是对 LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。
resize2fs /dev/storage/kdyzm_lv

第五步: 重新挂载硬盘
mount /dev/storage/kdyzm_lv /kdyzm_lv

需要注意的是这里显示的容量是287M,而非300M,要比我们当初设计的扩容容量小一些,这个原因是硬件厂商的制造标准是1M=1000KB,1KB=1000B;在计算机系系统中则是1M=1024KB,1KB=1024B。因此硬盘容量会有些“缩水”,300M的硬盘最终会被识别为 300MB*1000K*1000B/1024B/1024K=286.1022MB ,大概的算法就是这么算的。
4、缩小逻辑卷
缩容操作数据丢失的风险会比较大,所以Linux系统规定,为了保证数据安全,在对LVM逻辑卷进行缩容操作之前,必须先检查文件系统的完整性。完整的缩容步骤如下:
取消挂载->检查文件系统完整性->通知系统内核即将缩容->逻辑卷缩容
第一步: 取消挂载
umount /kdyzm_lv
第二步: 检查文件系统的完整性。
上面说过,检查文件系统完整性是Linux系统强制要求的,如果跳过这一步骤,就会有如下提示

要求必须先运行命令e2fsck -f /dev/storage/kdyzm_lv,那就按照要求,先运行该命令
e2fsck -f /dev/storage/kdyzm_lv

第三步: 通知系统内核将逻辑卷容量缩小到100M
resize2fs /dev/storage/kdyzm_lv 100M

运行该命令没有报错,说明内核通过计算觉得缩容不会有问题,所以批准了缩容操作。
第四步: 逻辑卷缩容
通过lvreduce命令将逻辑卷的容量缩小到100M
lvreduce -L 100M /dev/storage/kdyzm_lv

运行完命令,它还会提示下该命令有风险,要对执行命令进行二次确认,输入y即可。
**第五步: ** 重新挂载系统

这样就完成了缩容。
5、删除逻辑卷
删除逻辑卷,需要依次删除逻辑卷、卷组、物理卷设备,顺序不可颠倒。
第一步: 取消挂载
删除/etc/fstab文件中记录的挂载信息,取消挂载关联。
umount /kdyzm_lv
由于没有写/etc/fstab文件,所以这里不需要删除相关信息。
第二步: 删除逻辑卷
lvremove /dev/storage/kdyzm_lv

注意这里需要二次确认。
第三步: 删除卷组
vgremove storage
这里只需要写卷组名称,因为我们当初创建卷组的时候也是这么创建的。

第四步: 删除物理卷
pvremove /dev/sdb /dev/sdc

最后,欢迎关注我的博客:https://blog.kdyzm.cn
一文全解:LVM(逻辑卷管理器)的更多相关文章
- LVM逻辑卷管理器
LVM概述 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O ...
- Linux 笔记 - 第十七章 Linux LVM 逻辑卷管理器
一.前言 在实际生产中,有时会遇到磁盘分区空间不足的情况,这时候就需要对磁盘进行扩容,普通情况下需要新加一块磁盘,重分区.格式化.数据复制.卸载旧分区.挂载新分区等繁琐的步骤,而且有可能造成数据的丢失 ...
- LVM逻辑卷管理测试——逻辑卷扩展、收缩、快照及删除
一.逻辑卷扩展 [root@lxjtest /]# umount /testLVM/ [root@lxjtest /]# df -h Filesystem Size Used Avail Use% M ...
- LVM逻辑卷管理测试——创建逻辑卷
虚拟机里再添加两块硬盘,如下所示: 启动系统后,我们可以看到新添加的两块硬盘为/dev/sdb和/dev/sdc.每个2GB. [root@lxjtest ~]# fdisk -l Disk /dev ...
- Linux系统磁盘管理(lvm逻辑卷管理)
linux系统用户常遇到的一个问题就是如何精准的评估分区的大小,已分配合适的磁盘空间:普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文 ...
- Linux逻辑卷管理器(LVM)
LVM基础 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O ...
- 18 LVM逻辑卷管理
根据上一节的内容,我们知道md这个内核模块可以用来做软RAID的管理.同时RAID实现了两个功能:1.提高了磁盘的读写能力:2.对于数据进行了冗余备份: 但是,如果是管理员手动误删的数据,则一样无法找 ...
- CentOS下LVM逻辑卷管理技术解释
1.LVM逻辑卷管理技术产生的背景 企业日益变化的存储需要使得传统的磁盘分区存储显得不够灵活 2.磁盘分区存储 对于这样的三个物理分区的话,迟早有一天会被数据填满,因为它是死的,无法进行缩放. 假设下 ...
- CentOS LVM逻辑卷管理
在CentOS 挂载(U盘NTFS格式,新硬盘,增加交换分区,扩展根分区等)中扩展根分区部分用的就是LVM逻辑卷管理来进行扩展的. 1.为什么会有逻辑卷管理 传统磁盘管理是直接对硬盘分区进行访问,你如 ...
- LVM(逻辑卷管理器)部署、扩容、缩小
物理卷 -- Physical Volume -- PV 卷组 -- Volume Group -- VG 逻辑卷 -- Logical Volume -- LV 1.硬盘设备管理技术虽然能够有效 ...
随机推荐
- 恭喜PaddleOCRSharp开源项目通过PaddleOCR社区常规赛优秀项目首次评选
PaddleOCR优秀社区项目推荐: PaddleOCR社区常规赛首次评选结果已于日前出炉,本次优秀项目推广为大家带来的是[部署篇]:️ PaddleOCR的.NET调用库:包含文本识别.文本检测.基 ...
- JVM面试篇(下)
垃圾收集器 简述 Java 垃圾回收机制 在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行 ...
- webpack externals忽略不打入的包
例如项目中使用从 CDN 引入 jQuery,而不是把它打包进来使用 import $ from 'jquery' webpack.config.js externals: { jquery: 'jQ ...
- 红白机基本原理(二) CPU
CPU 首发公号:Rand_cs NES 使用的 CPU 为 6502,但与标准的 6502 有些许不同,最大的不同在于 NES 使用的芯片拥有一个 pAPU(pseudo-Audio Process ...
- 爬取m3u8加密视频
import random import os import re import requests import asyncio import aiohttp import time from lxm ...
- 模拟epoll的饥饿场景
说明 一直听说epoll的饥饿场景,但是从未在实际环境中面对过,那么能不能模拟出来呢?实际的情况是怎样呢? 模拟步骤 基于epoll写一个简单的tcp echo server,将每次read返回的字节 ...
- mongodb创建索引和删除索引和背景索引background
mongodb创建索引和删除索引和背景索引background MongoDB的背景索引允许在后台创建和重建索引,而不会对数据库的正常操作产生影响.背景索引的创建过程是非阻塞的,可以在业务运行时创建或 ...
- 搭建springboot redis项目
1.创建项目 如果出现init失败(需要等待网络可以正常连接) 或者运行主类的时候报错(错误: 找不到或无法加载主类),需要重新导入maven项目再重新编译试试. 2.引入pom jar <?x ...
- mongodb安装及启动配置文件,允许远程访问连接
windows安装https://www.runoob.com/mongodb/mongodb-window-install.html https://www.runoob.com/mongodb/m ...
- 开箱即用的Live2d
安装 npm i @tomiaa/live2d 代码 <template> <div ref="live2dContentRef" id="live2d ...