当前位置: 首页 > news >正文

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端

传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去

传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了,此时无法通过拉伸分区来进行分区扩充,只能通过添加新的硬盘来扩展,然后在新的硬盘上创建分区,接着再对分区格式化,然后将之前分区的所有东西拷贝到新的分区里面。
新增的硬盘作为独立的文件系统存在的,原有的文件系统没有得到任何的扩充。

传统的磁盘管理不能进行动态的磁盘管理,新增硬盘拷贝原有内容时还需要卸载掉当前的挂载点,并且当原有内容文件较多时,花费的时间也较多,一些实时的服务也不接受去停止再去拷贝内容挂载

二、LVM的磁盘管理

LVM (logical volume Manager)逻辑卷管理。

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。

LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。

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

例如:当新增一个物理硬盘时,上层服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式(挂载的是逻辑卷)。

LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!!

三、基础概念 PE,PV,VG,LV 及 LVM的原理

  1. PE (Physical Extend) 物理拓展
  2. PV (Physical Volume) 物理卷
  3. VG (Volume Group) 卷组
  4. 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可以使用不同大小的物理卷。
接下来会使用的几个命令的说明:

  1. pvcreate 创建物理卷
  2. pvremove 删除物理卷
  3. pvdisplay 查看物理卷的属性信息
  4. pvs 列出系统上的所有物理卷及其信息(LVM提供的一个命令行工具)
  5. pvextend 扩展物理卷的大小

首先,根据刚刚的三个主分区依次创建三个不同大小的物理卷

pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3

使用pvdisplay看一下物理卷的属性信息,可以看到每个物理卷的名称就是它的主分区名称

在这里插入图片描述

(三)准备卷组

常用命令(和物理卷的格式一样)

  1. vgcreate 创建卷组
  2. vgremove 删除卷组
  3. vgdisplay 查看卷组信息
  4. vgs 列出系统上的所有卷组及其信息(LVM提供的一个命令行工具)
  5. vgextend 扩展卷组中的物理卷(添加新的物理卷到卷组中)

将刚刚创建的三个物理卷都放到一个卷组(vg_test)中

# -s 选项用来指定 PE的大小, vg_test为新建的卷组名称
vgcreate -s 4M vg_test /dev/sdb1 /dev/sdb2 /dev/sdb3

同样,验证查看一下卷组的信息,使用 vgdisplay 命令
在这里插入图片描述

(四)创建逻辑卷

常用命令:

  1. lvcreate 创建逻辑卷
  2. lvremove 删除逻辑卷
  3. lvdisplay 查看逻辑卷信息
  4. lvs 列出系统上的所有逻辑卷及其信息(LVM提供的一个命令行工具)
  5. lvresize 调整逻辑卷的大小
  6. 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 命令。

  1. 格式化逻辑卷
mkfs.ext4 /dev/vg_test/lv_test

在这里插入图片描述

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

在这里插入图片描述

(六)扩展逻辑卷

动态的扩展,是LVM最有用的功能.
扩展逻辑卷分为如下几步:

  1. 卸载当前要进行扩展的逻辑卷 (umount)
  2. 扩展逻辑卷大小 (lvresize)
  3. 检查磁盘错误
  4. 更新文件系统大小
  5. 重新挂载
 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进行扩展。

卷组扩展的本质就是 将物理卷加入到卷组中

所以从其他硬盘进行扩展卷组可以分为如下几步:
● 新的硬盘进行分区
● 创建不同大小的物理卷
● 将新创建的物理卷添加到需要扩展的卷组中
● 查看检验卷组是否扩充

  1. 将/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.

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

tips: 这里第一块硬盘10G加上第二块扩展的2G所以就是接近于12G的一个大小


相关文章:

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了&#xff…...

CTFHUB-WEB-SQL注入

sql学的太不好了&#xff0c;回炉重造 判断 Sql 注入漏洞的类型&#xff1a; 1.数字型 当输入的参 x 为整型时&#xff0c;通常 abc.php 中 Sql 语句类型大致如下&#xff1a;select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断&#xff…...

案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理

这家汽车行业的客户缺乏一套系统来支持产品研发过程的管理。他们一直在寻找一款可以覆盖从基本需求到产品开发&#xff0c;再到项目实施等各个阶段的研发管理工具&#xff0c;并且需要这款工具又一定的灵活性&#xff0c;更好地适应并提升现有的业务流程。 通过引入Atlassian的…...

【算法与数据结构】40、LeetCode组合总和 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;【算法与数据结构】39、LeetCode组合总和的基础之上&#xff0c;这道题变成了candidates中有重复元素&…...

Flink SQL -- 命令行的使用

1、启动Flink SQL 首先启动Flink的集群&#xff0c;选择独立集群模式或者是session的模式。此处选择是时session的模式&#xff1a;yarn-session.sh -d 在启动Flink SQL的client&#xff1a; sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…...

asp.net core把所有接口和实现类批量注入到容器

要将所有接口和实现类批量注入到容器&#xff0c;可以使用反射和循环来实现自动批量注册。下面是一种示例方法&#xff1a; 创建一个扩展方法&#xff0c;用于批量注册接口和实现类。 public static class ServiceCollectionExtensions {public static IServiceCollection Re…...

SPSS曲线回归

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…...

软件之禅(七)面向对象(Object Oriented)

黄国强 2023/11/11 前文提到面向对象构建的模块控制器&#xff0c;根据第一性原理&#xff0c;从图灵机的角度&#xff0c;面向对象不是最基本的元素。那么面向对象是不是不重要呢&#xff1f; 答案是否定的&#xff0c;面向对象非常非常重要。当我们面对一个具体的领域…...

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库 #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 其实一共有六种工作模式&#xff1a; 简单模式&#xff08;Simple&#xff09;、工作队列模式&#xff08;Work Queue&#xff09;、 发布订阅模式&#xff08;Publish/Subscribe&#xff09;、路由模式&#xff08;Routing&#xff09;、通配符模式&#xff08;Topi…...

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…...

另辟奚径-Android Studio调用Delphi窗体

大家都知道Delphi能调用安卓SDK&#xff0c;比如jar、aar等&#xff0c; 但是反过来&#xff0c;能在Android Studio中调用Delphi开发的窗体吗&#xff1f; 想想不太可能吧&#xff0c; Delphi用的是Pascal&#xff0c;Android Studio用的是Java&#xff0c;这两个怎么能混用…...

SOLID 原则,程序设计五大原则,设计模式

SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle)&#xff1a;修改一个类的原因只能有一个。开闭原则(Open/Closed Principle)&#xff1a;对于扩展&#xff0c;类应该是“开放”的&#xff1b;对于修改&…...

Java基础——数组(一维数组与二维数组)

文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明&#xff1a; 数组是引用数据类型&#xff0c;数组的元素是同一类型的任何数据类型&#xff0c;包括基本数据类型和引用数据类型…...

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…...

Qt QTableWidget表格的宽度

默认值 QTableWIdget的表格宽度默认是一个给定值&#xff0c;可以手动调整每列的宽度&#xff0c;也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...

OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)

1、引言 通过opencv_apps&#xff0c;你可以在ROS中以最简单的方式运行OpenCV提供的许多功能&#xff0c;也就是说&#xff0c;运行一个与功能相对应的launch启动文件&#xff0c;就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码&#xff0c;非常的方便。 对于想熟悉每个…...

常见排序算法之插入排序类

插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;工作原理是将一个记录插入到已经排好序的有序表中&#xff0c;从而形成一个新的、记录数增1的有序表。在实现过程中&#xff0c;它使用双层循环&#xff0c;外层循环对除了第一个元素之外的所有元素&#xff0c;内层循…...

Dubbo服务消费端远程调用过程剖析

1 Dubbo服务消费端远程调用过程概述 &#xff08;1&#xff09;当消费方调用远程服务的方法时&#xff0c;会被InvokerInvocationHandler拦截&#xff0c;执行其invoke()方法&#xff0c;创建RpcInvocation对象&#xff1b; &#xff08;2&#xff09;接着会选择远程调用的负…...

华硕荣获“EPEAT Climate+ Champion”永续先驱称号

华硕持续深耕永续理念&#xff0c;努力提供低碳排放、高效能产品&#xff0c;并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺&#xff0c;并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...