当前位置: 首页 > 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;并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...