热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVM的吹水堂

简介在今天,数据每天大量增多的情况下,服务器经常面临正常使用的分区空间不够的情况,假如还是使用传统分区方式的话,再加一颗新硬盘,然后重新分割、格式化,将原本的数据完整的复制过来,然

简介

    在今天,数据每天大量增多的情况下,服务器经常面临正常使用的分区空间不够的情况,假如还是使用传统分区方式的话,再加一颗新硬盘,然后重新分割、格式化,将原本的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁盘容量被浪费了! 你想要将这个 partition 缩小时,你又该如何呢?LVM的出现,正是为了解决这些问题。。。

    LVM(全称:Logical Volume Manager 中文名称:逻辑卷管理器),又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个Linux 版本的逻辑卷管理器。

    LVM,它可以零停机前提下可以自由地对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区,它的出现可以说解决磁盘管理的很多问题。把它说得这么好,接下来我们就来慢慢了解它,在介绍它怎么使用之前,我们先来了解几个术语。


术语

    1、PM:物理存储介质(physical media)

        这里指系统的存储设备:硬盘,是存储系统最低层的存储单元。


    2、PV:物理卷(physical volume)

        物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数(也就是在传统分区上附加了LVM的管理数据)。


    3、PE:(physical extent)

        每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。


    4、VG:卷组(Volume Group)

        LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。


    5、LV:逻辑卷(logical volume)

        LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。


    6、LE:(logical extent)

        逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

 

结构分析

,

    首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成,一个卷组由一个或多个物理卷组成。从上图可以明显看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。


LVM工作方式     
    下面来看一看LVM到底是怎样工作的。每一个物理卷都被分成几个基本单元,即所谓的PE。PE的大小是可变的,但是必须和其所属卷组的物理卷相同。在每一个物理卷里,每一个PE都有一个惟一的编号。PE是一个物理存储里可以被LVM寻址的最小单元。  


    每一个逻辑卷也被分成一些可被寻址的基本单位,即所谓的LE。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的所有逻辑卷来说都是相同的。

 
    在一个物理卷中,每一个PE都有一个惟一的编号,但是对于逻辑卷这并不一定是必需的。这是因为当这些PE ID号不能使用时,逻辑卷可以由一些物理卷组 成。因此,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。 


    你可能会觉得奇怪,有关逻辑卷和逻辑卷组的所有元数据都存到哪儿去了。类似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每一个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每一个物理卷的起始处。  


    VGDA由以下信息组成: 
        ·一个PV描述符 
        ·一个VG描述符 
        ·LV描述符 
        ·一些PE描述符  


    当系统启动LV时,VG被激活,并且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA建立起来的映射机制就用于访问实际的物理位置来执行I/O操作。

   

LVM命令介绍

    在创建和使用LVM之前,首先得先安装好LVM的程序包

   # rpm -qa | grep ‘lvm‘

    ,


创建 详细查看  摘要查看 删除  增加  减小
PV  pvcreate  pvdisplay pvs  pvremove

VG  vgcreatevgdisplay vgs  vgremove vgextenvgreduce
LV  lvcreate  lvdisplaylvs lvremovelvexten  lvreduce

    从上面的表格可以看出来,命令大部分都是相似的,所以也比较容易记忆.


    PV用法详解

        创建    pvcreate DEVICE(/dev/sda1)

        删除    pvremove DEVICE(/dev/sda2)


    VG用法详解

        创建    vgcreate vgNAME pv   

        # vgcreate myvg /dev/sda1 /dev/sda2

        删除    vgremove vgNAME

        # vgremove myvg

        增加    vgextend vgNAME pv

         # vgextend myvg /dev/sda2

        减小    vgreduce vgNAME pv


    lv用法详解

        增加    lvcreate -L [+]SIZE -n NAME VG

         # lvcreate -L 512M -n mylv1 myvg

        删除    lvremove lv

        如下是表示lv的两种   

        # lvremove /dev/myvg/mylv1

        或者是用

        # lvremove /dev/mapper/myvg-mylv1

        增大    lvextend -L [+]SIZE lv

         # lvextend -L 1G /dev/myvg/mylv1

        减小    lvreduce -L [-]SIZE lv

         # lvreduce -L -256M /dev/mapper/myvg-mylv1


实践篇(创建LVM)

    1、首先先对一个磁盘进行分区并标记为LVM的磁盘

    # fdisk /dev/sdb

    ,

    # t

    修改标记为8e

    ,

    2、再将它创建为PV

    # pvcreate /dev/sdb1

    ,

    3、创建一个vg,并将/dev/sdb1这个pv加入vg组

    # vgcreate myvg /dev/sdb1

    ,

    4、然后再在myvg的卷组上创建一个512M的lv

    # lvcreate -L 512M -n mylv1 myvg

    ,

    5、然后将mylv1这个逻辑卷格式化为ext4的文件系统格式

    # mke2fs -t ext4 /dev/myvg/mylv1

    ,

    6、最后将mylv1挂载到/mnt/data这个目录就可以进行使用访问了

    #mount /dev/myvg/mylv1 /mnt/data

    ,

本文出自 “LC的IT之路” 博客,转载请与作者联系!

LVM的吹水堂


推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
author-avatar
田得婕_762
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有