Linux-LVM逻辑卷管理

news/2024/9/19 8:13:33/ 标签: linux, 运维

一、背景

        Linux运维过程中大家有没有想过生产环境服务器磁盘分区如果数据量越来越膨胀(这些都是重要数据,不能删除),那么此时如何来应对这个问题呢?   既要不影响正在运行的程序,同时也不能中断关机等操作。

        这么一想就很蛋疼了。假设你运行的是kafka或者mysql数据库、或者其他有状态的服务,由于之前规划存在问题或者突然情况,导致数据增长速率超过你的预期,就会出现需要分区需要扩容的情况了。

        LVM逻辑卷的机制是其中一种可以满足在线热扩容、对应用程序无关、安全的磁盘管理机制,也许可以满足你的需求。LVM(逻辑卷管理)是一种灵活的存储管理技术,允许用户将一个或多个物理硬盘的分区组合起来,形成一个物理卷集合,从而可以更灵活地管理和分配磁盘空间。

        说白了就是,应用层只管对接抽象的数据结构,无须关心底层实现,底层实际容量变动对上层无感。  接下来让我们一起来看看,LVM逻辑卷该如何使用.

        为了实现分区动态扩容机制,前期进行分区选型的时候,要根据情况判断,是否需要使用LVM方式划分分区方便后面应对动态扩容的需求,普通分区方式直接挂载,无法做到动态扩容。

二、LVM的整体实现原理

1、基本术语

  1. PE(Physical Extent):物理扩展单元

    • 定义:PE 是 LVM 中的基本分配单位,它是组成卷组(VG)的基本单元。
    • 大小:PE 的大小通常是 4MB,默认情况下是固定的,但可以根据需要进行配置。
    • 作用:PE 是物理卷(PV)上分配给逻辑卷(LV)的最小单位,逻辑卷由多个 PE 组成。
  2. PV(Physical Volume):物理卷

    • 定义:PV 是指用来创建卷组的一个或多个磁盘分区或整个磁盘。
    • 作用:PV 是 LVM 的基础,它包含了用于 LVM 的存储空间。物理卷可以是硬盘上的一个分区或整个磁盘。
    • 创建:使用 pvcreate 命令将一个或多个磁盘分区或整个磁盘转换为物理卷。
  3. VG(Volume Group):卷组

    • 定义:VG 是由一个或多个物理卷组成的集合,它提供了一个可以划分成多个逻辑卷的空间池。
    • 作用:VG 是 LVM 中的逻辑容器,它将多个物理卷组合在一起,提供了一个统一的存储池,可以在其中创建逻辑卷。
    • 创建:使用 vgcreate 命令创建卷组,并指定一个或多个物理卷作为成员。
  4. LV(Logical Volume):逻辑卷

    • 定义:LV 是在卷组内部定义的一个存储区域,它可以动态地调整大小,并且独立于底层物理存储设备。
    • 作用:LV 类似于传统的文件系统,但是提供了更多的灵活性和可扩展性。逻辑卷可以跨越多个物理卷。
    • 创建:使用 lvcreate 命令创建逻辑卷,并指定卷组和大小。

2、关系图(PV、VG、LV、PE)

        PV作为物理存储层,组成为VG抽象资源池,LV从VG中按需申请获取存储容量,不够则继续可以从VG中申请扩容,底层如何扩容,PV之间如果组织存储等等,应用层LV不需要关心、上层对下层变动无感、透明。

        如果后期需要扩容,只需要继续往VG里面添加PV,VG存在足够容量,LV就能继续从VG资源池中拿到存储容量。从而实现,分区实时在线动态热扩容的目的。 再也不怕磁盘空间不足的问题了。

三、扩容实操

1、创建PV

存在一个空白的硬盘: /dev/sdb,  直接使用这个/dev/sdb全部转换为一个PV(切割PE的过程).

pvcreate /dev/sdb

2、创建VG且添加PV

创建VG名称为: my-vg, 并且将/dev/sdb这个PV加入到VG资源池:

vgcreate my-vg /dev/sdb

3、创建LV,从VG获取存储容量

   创建LV名称为: my-lv, 并且从my-vg申请10G的存储空间.

lvcreare -n my-lv -L 10G my-vg

4、格式化LV,创建文件系统

    针对my-lv创建文件系统,文件系统类型是xfs. 

mkfs.xfs /dev/my-vg/my-lv

5、挂载LV卷到目录挂载点,实现文件写入/读取

  挂载:   mount /dev/my-vg/my-lv   /data/,   测试写文件、读文件完全没问题.

 mount /dev/my-vg/my-lv   /data/

6、扩容LV卷大小,实现动态扩容

     假设此时我们的10G存储不够了,那么可以实现实时动态无感扩容,对上层进程无感扩容,不影响业务程序和服务。

      1、LV扩容的前提那肯定是看VG资源池是否充足对吧, 巧妇难为无米之炊, VG没容量肯定申请不下来。

       2、执行lvextend扩容命令: lvextend -L +8G /dev/my-vg/my-lv

lvextend -L +10G /dev/my-vg/my-lv

       3、扩容成功后,df -h /data/ 查看容量还是10G而不是18G?  先不慌, 虽然LV扩容了,但是之前创建的文件系统是针对10G的LV当时识别的。 需要重新识别的过程

xfs_growfs /data/  #重新识别文件系统

        最后df -h /data/查看,发现容量已经扩容为18G. 

四、Centos7操作系统默认分区形式是LVM

        安装Centos7操作系统,如果选择默认分区则就是使用LVM管理硬盘的.

        查看操作系统的挂载情况和磁盘情况:

        可以发现 / 根分区, 挂载的是一个LV不是普通分区。 这样我们的/分区可以动态扩容,只要再插入一台硬盘,将硬盘制作为PV, PV加入到这个VG, LV再从VG申请容量就可以完成/分区扩容的目的。 很方便,再也不怕/分区满了.

五、总结

1、涉及到的相关命令

1、PV

创建PV:  pvcreate    例子: pvcreate /dev/sdb /dev/sdc

删除PV: pvremove

查看PV:  pvs、pvdisplay(更加详细的信息)

2、VG

创建VG:  vgcreate     例子: vgcreare myvg /dev/sdb /dev/sdc

删除VG: vgremove

查看VG:  vgs、vgdisplay(更加详细的信息)

3、LV

创建LV:  lvcreate      例子: lvcreate -n mylv -L 2G myvg

删除LV: lvremove

查看LV:  lvs、lvdisplay(更加详细的信息)

扩容:      lvextend      例子:  lvextend -L +10G /dev/myvg/mylv

4、更新文件系统扩容信息

针对 EXT2、EXT3、EXT4文件系统类型:   resize2fs /dev/myvg/mylv

针对XFS文件系统类型:   xfs_growfs /data/

创建文件系统:    mkfs.xfs /dev/myvg/mylv

2、LVM相关总结

        记住一个原则就是,这种动态扩容存储相关的,大部分的核心思想就是将上层依赖的东西,依赖于一个抽象层而非实际存储层,因为依赖抽象层以后,抽象层可以不动,底层无论怎么变都是无感、透明的,这样扩展性强。  我的容量不够直接每次都加硬盘(PV)即可,我的容量可以一直扩下去。

        包括像K8S的PV、PVC这些存储机制,大家想想是不是有异曲同工之妙。 后端PV存储类型、容量大小都不需要关心, 应用只需要申请PVC, 拿到存储空间就行,我管你后端是NFS还是Ceph、还是其它存储方式,我应用层能用就行,这个不归应用层管,对应用层透明的。


http://www.ppmy.cn/news/1526543.html

相关文章

Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令

文章目录 1. **标准 JAR 打包****打包方式****配置示例****使用方式****优点****缺点** 2. **可执行 JAR(Executable JAR)****打包方式****配置示例****使用方式****优点****缺点** 3. **Uber JAR(Fat JAR / Shadow JAR)****打包方…

Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声

参考文献:Cheng B , Gao N , Huang Y ,et al.Broadening perfect sound absorption by composite absorber filled with porous material at low frequency:[J].Journal of Vibration and Control, 2022, 28(3-4):410-424.DOI:10.1177/1077546320980214. 为了提高低…

优化Web性能:Varnish中精准识别并缓存移动与桌面请求

引言 在现代Web开发中,为了提升用户体验,针对不同类型的设备提供定制化的内容是一项重要的策略。Varnish作为HTTP加速器和缓存代理服务器,能够帮助我们实现这一目标。本文将详细介绍如何利用Varnish来实现基于设备类型(PC端与移动…

Pr:首选项 - 媒体缓存

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“媒体缓存” Media Cache选项卡的设置用于管理和优化媒体缓存文件的存储与清理。定期清除媒体缓存是优化 Pr 性能或进行故障排除的最佳做法。 将视频和音频导入 Pr 时,它会将这些文件处理成…

企业的终端安全该怎么防护?

安装金刚钻信息网站数据防泄密系统能够有效防止终端数据泄露,提供全面的安全保障。该系统通过对终端上的敏感数据进行加密,确保只有经过授权的用户才能访问或读取数据,即使设备丢失或遭到入侵,数据也不会被轻易获取。此外&#xf…

单硬盘安装Win10和麒麟V10双系统指导建议

随着信创电脑的普及,国产操作系统也逐渐走进了大家的视野,许多人选择了国产操作系统来体验其开源、安全、高效的特性,而Windows系统也是大多数人习惯使用的操作系统。一台电脑上同时安装银河麒麟V10和Windiows10双系统也成为了非常常见的需求。那么,如何在一台电脑上安装银…

SpringBoot框架下的房产销售系统设计与实现

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的…

Android12_13左上角状态栏数字时间显示右移动

文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1)早期一般屏幕都是方形的,但是曲面屏,比如:好多车机Android产品、魔镜…

Qt ORM模块使用说明

附源码:QxOrm是一个C库资源-CSDN文库 使用说明 把QyOrm文件夹拷贝到自己的工程项目下, 在自己项目里的Pro文件里添加include($$PWD/QyOrm/QyOrm.pri)就能使用了 示例test_qyorm.h写了表的定义,Test_QyOrm_Main.cpp中写了所有支持的功能的例子: 通过自动表单添加…

9.14工作笔记

M psy分析 冰红茶看看他的研究思路 https://bbs.quantclass.cn/thread/45169 psyv4计算:首先算因子H 然后放到回测框架里算12H 衰减加权 和psyv1做比较 transperiod这个函数里面的for循环再看看 比如df是小时数据,hold_period为3D,这里of…

【C++】入门基础(下)

Hi!很高兴见到你~ 目录 7、引用 7.3 引用的使用(实例) 7.4 const引用 【第一分点】 【第二分点1】 【第二分点2】 7.5 指针和引用的关系(面试点) 8、inline 9、nullptr Relaxing Time! ———…

Spring-IOC容器-ApplicationContext

IOC:Inversion of Control 控制反转,是一种设计原则,spring 中通过DI(dependency Injection)来具体实现。 比如原本对象的实例化,是通过程序主动New出来,IOC中的对象实例交给Spring框架来实例化&#xff0…

爬虫全网抓取

爬虫全网抓取是指利用网络爬虫技术,通过自动化的方式遍历互联网上各个网站、论坛、博客等,从这些网页中提取所需的数据。它通常涉及以下几个步骤: 目标设定:确定要抓取哪些类型的网页内容,比如新闻、商品信息、用户评论…

Error: ReferenceError: ReadableStream is not defined

midway项目在build完,docker启动时,莫名地报错Error: ReferenceError: ReadableStream is not defined,之前一直好好地,初时以为是新加的代码引起,后来排除了。 报错如下: 2024-08-20 11:57:51.446 ERROR …

SAP EWM Cross Docking (CD) 越库操作

目录 1 介绍 2 业务流程 3 后台配置主数据 4 业务操作 1 介绍 EWM Cross Docking 又称“越库操作”,即从仓库的一个道口直接跳到另一个道口。这样操作都不用想,肯定是为了仓库工作效率。CD 分两部分,一个是“计划性越库”,另…

asp.net core调用wps实现word转pdf的方法

1,首先安装wps,从官网下载安装包 2,创建.net core控制项目 添加com引用,搜索wps 准备一个word文档,名字叫001.docx,随便编写一些文字内容 3,word转pdf 编写代码 namespace WPSStu01 {inter…

UVM仿真的运行(四)—— objection 机制

0. 引言 前面介绍了uvm仿真的启动,按照domain中指定的DAG的phase node 顺序执行各个组件的phase。 在执行run_phase node的Executing 状态时,以fork...join_none的方式在后台调用run_phase imp的traverse方法去并行执行各个component的run_phase方法,同时会等待task运行结…

Spring security 动态权限管理(基于数据库)

一、简介 如果对该篇文章不了解,请移步上一篇文章:spring security 中的授权使用-CSDN博客 当我们配置的 URL 拦截规则请求 URL 所需要的权限都是通过代码来配置的,这样就比较死板,如果想要调整访问某一个 URL 所需要的权限&…

【网络安全】基础知识详解(非常详细)零基础入门到精通

一、什么是网络安全? 百度上对“网络安全”是这么介绍的: “网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露、系统连续可靠正常地运行,网络服务不中断。” 嗯…是不…

libmodbus:写一个modbusTCP服务

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…