Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
一、传统磁盘管理的弊端
传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。
传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了,此时无法通过拉伸分区来进行分区扩充,只能通过添加新的硬盘来扩展,然后在新的硬盘上创建分区,接着再对分区格式化,然后将之前分区的所有东西拷贝到新的分区里面。
新增的硬盘作为独立的文件系统存在的,原有的文件系统没有得到任何的扩充。
传统的磁盘管理不能进行动态的磁盘管理,新增硬盘拷贝原有内容时还需要卸载掉当前的挂载点,并且当原有内容文件较多时,花费的时间也较多,一些实时的服务也不接受去停止再去拷贝内容挂载。
二、LVM的磁盘管理
LVM (logical volume Manager)逻辑卷管理。
逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。
在传统的磁盘管理机制中,上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
例如:当新增一个物理硬盘时,上层服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式(挂载的是逻辑卷)。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!!
三、基础概念 PE,PV,VG,LV 及 LVM的原理
- PE (Physical Extend) 物理拓展
- PV (Physical Volume) 物理卷
- VG (Volume Group) 卷组
- LV (Logical Volume) 逻辑卷

在LVM的磁盘管理中,首先将硬盘划分分区,然后将分区格式化存储物理卷(PV),一个或多个物理卷可以用来创建卷组(VG),然后基于卷组可以创建逻辑卷(LV)。
格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),LVM磁盘管理中PE的默认大小是4M大小,PE就是逻辑卷管理的最基本单位
只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷,文件系统就是在逻辑卷上创建的,然后操作系统挂载和使用访问。
四、实验-使用LVM磁盘管理
实验内容:给当前的操作系统新增两块硬盘,然后使用LVM磁盘管理

下图中的/dev/sdb和/dev/sdc为我们新增的硬盘

(一)磁盘分区
将/dev/sdb 划分为三个主分区,分别为2GB,3GB,5GB的空间。
fdisk /dev/sdb
[root@robin robin]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x7e72cf82 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+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):2
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+3G
分区 2 已设置为 Linux 类型,大小设为 3 GiB命令(输入 m 获取帮助):n
Partition type:p primary (2 primary, 0 extended, 2 free)e extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (10487808-20971519,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):
将使用默认值 20971519
分区 3 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
分区划分完毕后进行查看
fdisk -l /dev/sdb # 查看sdb的磁盘分区列表信息

(二)准备物理卷
刚创建的分区是用来储存物理卷的。LVM可以使用不同大小的物理卷。
接下来会使用的几个命令的说明:
- pvcreate 创建物理卷
- pvremove 删除物理卷
- pvdisplay 查看物理卷的属性信息
- pvs 列出系统上的所有物理卷及其信息(LVM提供的一个命令行工具)
- pvextend 扩展物理卷的大小
首先,根据刚刚的三个主分区依次创建三个不同大小的物理卷
pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3
使用pvdisplay看一下物理卷的属性信息,可以看到每个物理卷的名称就是它的主分区名称。

(三)准备卷组
常用命令(和物理卷的格式一样)
- vgcreate 创建卷组
- vgremove 删除卷组
- vgdisplay 查看卷组信息
- vgs 列出系统上的所有卷组及其信息(LVM提供的一个命令行工具)
- vgextend 扩展卷组中的物理卷(添加新的物理卷到卷组中)
将刚刚创建的三个物理卷都放到一个卷组(vg_test)中
# -s 选项用来指定 PE的大小, vg_test为新建的卷组名称
vgcreate -s 4M vg_test /dev/sdb1 /dev/sdb2 /dev/sdb3
同样,验证查看一下卷组的信息,使用 vgdisplay 命令

(四)创建逻辑卷
常用命令:
- lvcreate 创建逻辑卷
- lvremove 删除逻辑卷
- lvdisplay 查看逻辑卷信息
- lvs 列出系统上的所有逻辑卷及其信息(LVM提供的一个命令行工具)
- lvresize 调整逻辑卷的大小
- lvextend 扩展逻辑卷的大小
我们刚刚生成的卷组大小差不多有10GB,现在根据卷组去创建逻辑卷,先创建一个5GB的逻辑卷(lv_test)。
# -n 指定逻辑卷的名称
# -L 指定逻辑卷的大小
lvcreate -n lv_test -L 5G /dev/vg_test
使用lvdisplay命令查看一下,可以看到lv_test的卷组是vg_test,以及它的一个大小是5G,并且它的路径为 “/dev/vg_test/lv_test” (/dev/卷组/逻辑卷)

(五)格式化-挂载
格式化逻辑卷为文件系统,使用 mkfs 命令。挂载使用 mount 命令。
- 格式化逻辑卷
mkfs.ext4 /dev/vg_test/lv_test

- 挂载
mkdir /home/robin/data # 这里我存在一个robin用户,所以我将robin用户下的data目录作为挂载点使用
mount /dev/vg_test/lv_test /home/robin/data
- 查看挂载后的状态(df)
df -h /home/robin/data

(六)扩展逻辑卷
动态的扩展,是LVM最有用的功能.
扩展逻辑卷分为如下几步:
- 卸载当前要进行扩展的逻辑卷 (umount)
- 扩展逻辑卷大小 (lvresize)
- 检查磁盘错误
- 更新文件系统大小
- 重新挂载
umount /dev/vg_test/lv_test # 1. 卸载逻辑卷lvresize -L 7G /dev/vg_test/lv_test # 2. 扩展逻辑卷大小到7Ge2fsck -f /dev/vg_test/lv_test # 3. 检查逻辑卷磁盘错误resize2fs /dev/vg_test/lv_test # 4.更新文件系统大小mount /dev/vg_test/lv_test /home/robin/data # 5.重新挂载
再次使用 df 命令查看挂载目录的磁盘信息,容量已经发生改变。

(七)扩展卷组
假设我们第一块硬盘(/dev/sdb)创建的卷组(vg_test)已经满了,且/dev/sdb这块硬盘已经没有可以使用的多余空间了,同时我们还有一块硬盘/dev/sdc (10GB大小)尚未使用,我们从第二块硬盘中划分两个G给卷组vg_test进行扩展。
卷组扩展的本质就是 将物理卷加入到卷组中
所以从其他硬盘进行扩展卷组可以分为如下几步:
● 新的硬盘进行分区
● 创建不同大小的物理卷
● 将新创建的物理卷添加到需要扩展的卷组中
● 查看检验卷组是否扩充
- 将/dev/sdc进行分区(先分一个2G的分区给我们扩展使用就行)
fdisk /dev/sdc命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8eWARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.已将分区“FAT12”的类型更改为“Linux LVM”命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.


- 基于主分区/dev/sdc1创建物理卷 /dev/sdc1
pvcreate /dev/sdc1
- 将新建的物理卷添加到需要扩展的卷组(vg_test)中
vgextend vg_test /dev/sdc1
- 查看卷组是否正确的扩充
vgdisplay vg_test

tips: 这里第一块硬盘10G加上第二块扩展的2G所以就是接近于12G的一个大小
相关文章:
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
一、传统磁盘管理的弊端 传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了ÿ…...
CTFHUB-WEB-SQL注入
sql学的太不好了,回炉重造 判断 Sql 注入漏洞的类型: 1.数字型 当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断ÿ…...
案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
这家汽车行业的客户缺乏一套系统来支持产品研发过程的管理。他们一直在寻找一款可以覆盖从基本需求到产品开发,再到项目实施等各个阶段的研发管理工具,并且需要这款工具又一定的灵活性,更好地适应并提升现有的业务流程。 通过引入Atlassian的…...
【算法与数据结构】40、LeetCode组合总和 II
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:【算法与数据结构】39、LeetCode组合总和的基础之上,这道题变成了candidates中有重复元素&…...
Flink SQL -- 命令行的使用
1、启动Flink SQL 首先启动Flink的集群,选择独立集群模式或者是session的模式。此处选择是时session的模式:yarn-session.sh -d 在启动Flink SQL的client: sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…...
asp.net core把所有接口和实现类批量注入到容器
要将所有接口和实现类批量注入到容器,可以使用反射和循环来实现自动批量注册。下面是一种示例方法: 创建一个扩展方法,用于批量注册接口和实现类。 public static class ServiceCollectionExtensions {public static IServiceCollection Re…...
SPSS曲线回归
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…...
软件之禅(七)面向对象(Object Oriented)
黄国强 2023/11/11 前文提到面向对象构建的模块控制器,根据第一性原理,从图灵机的角度,面向对象不是最基本的元素。那么面向对象是不是不重要呢? 答案是否定的,面向对象非常非常重要。当我们面对一个具体的领域…...
汽车之家车型_车系_配置参数数据抓取
// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…...
RabbitMQ的 五种工作模型
RabbitMQ 其实一共有六种工作模式: 简单模式(Simple)、工作队列模式(Work Queue)、 发布订阅模式(Publish/Subscribe)、路由模式(Routing)、通配符模式(Topi…...
原型制作神器ProtoPie的使用Unity与网页跨端交互
什么是ProtoPie? ProtoPie是一款面向设计师的软件原型设计工具,例如制作App界面交互展示,制作好的原型可以一键发布到Web服务器,就可以浏览器访问。由于其内置了大量常用交互类型,以及"程序化"模块…...
另辟奚径-Android Studio调用Delphi窗体
大家都知道Delphi能调用安卓SDK,比如jar、aar等, 但是反过来,能在Android Studio中调用Delphi开发的窗体吗? 想想不太可能吧, Delphi用的是Pascal,Android Studio用的是Java,这两个怎么能混用…...
SOLID 原则,程序设计五大原则,设计模式
SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle):修改一个类的原因只能有一个。开闭原则(Open/Closed Principle):对于扩展,类应该是“开放”的;对于修改&…...
Java基础——数组(一维数组与二维数组)
文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明: 数组是引用数据类型,数组的元素是同一类型的任何数据类型,包括基本数据类型和引用数据类型…...
Python爬虫抓取微博数据及热度预测
首先我们需要安装 requests 和 BeautifulSoup 库,可以使用以下命令进行安装: pip install requests pip install beautifulsoup4然后,我们需要导入 requests 和 BeautifulSoup 库: import requests from bs4 import BeautifulSou…...
Qt QTableWidget表格的宽度
默认值 QTableWIdget的表格宽度默认是一个给定值,可以手动调整每列的宽度,也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...
OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)
1、引言 通过opencv_apps,你可以在ROS中以最简单的方式运行OpenCV提供的许多功能,也就是说,运行一个与功能相对应的launch启动文件,就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码,非常的方便。 对于想熟悉每个…...
常见排序算法之插入排序类
插入排序,是一种简单直观的排序算法,工作原理是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。在实现过程中,它使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循…...
Dubbo服务消费端远程调用过程剖析
1 Dubbo服务消费端远程调用过程概述 (1)当消费方调用远程服务的方法时,会被InvokerInvocationHandler拦截,执行其invoke()方法,创建RpcInvocation对象; (2)接着会选择远程调用的负…...
华硕荣获“EPEAT Climate+ Champion”永续先驱称号
华硕持续深耕永续理念,努力提供低碳排放、高效能产品,并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺,并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
