1、基本概念

LVM:logical volume manager 逻辑卷管理器

LVM构成:物理卷PV,卷组VG(PE物理区域,最小存储单元),逻辑卷LV(LE逻辑区域,最小存储单元)

三者如下图所示:

  -1  即VG可以包含多个PV,LV可以占用VG的全部或者一部分

  -2  LE==PE

  -3    lvm2已经不限制LE和PE的上限,故LE和PE的数值可大于65536

2、为什么要用LVM

LVM可以方便的进行磁盘缩放,当最初规划的空间不够用的时候,可以通过增加PV,VG,扩展LV的大小。

3、怎么创建

基本思路:构建PV->VG->LV->格式化->挂载LV

具体步骤:

  -1  创建PV

     pvcreate /dev/sd[a-z][1-9]

     eg:  

     pvcreate /dev/sdb1

     pvcreate /dev/sdb2

  -2  创建卷组VG  (可指定PE大小,最小为4K,最大根据操作系统版本而定,必须为2的倍数,默认是4M   -s 8M指定pe为8M,则创建lv必须为8M的倍数)

     vgcreate vg_name pv_device

     eg:  

     vgcreate myvg /dev/sdb1 /dev/sdb2

  -3  创建逻辑卷LV  

       lvcreate -l 100%free -n lv_name vg_name

     or

     lvcreate -L [+]size -n lv_name vg_name

     (-l(非i)表示将多少百分比的空闲空间划给lv

      -L表示将多少单位空闲空间划给lv,单位M,G等)

     eg:  

     lvcreate -L 100M -n mylv myvg 指定mylv大小为100M(若是+100M,则表示给mylv增加100M)

  -4  格式化处理

     mke2fs -t ext4 /dev/myvg/mylv

  -5  挂载逻辑卷

     mount -t ext4 /dev/myvg/mylv

  -6  自动挂载

     编辑/etc/fstab

     /dev/myvg/mylv /testlvm    ext4    defaults        0 0

3、怎么扩展缩放

  -1  扩展lv

    --1   检查当前vg剩余空间

        vgdisplay vg_name

        eg:vgdisplay myvg | grep Free

    --2  若VG空间足够,则直接进行lv扩展

       ---1 扩展物理边界,务必先扩展物理边界

          lvextend -L [+]SIZE lv_device

            eg:lvextend -L +5G /dev/mapper/myvg-mylv  #追加5G空间

       ---2 请先确保物理边界扩展成功(successfully resized),扩展逻辑边界

           resize2fs lv_drvice

           eg:resize2fs /dev/mapper/myvg-mylv

    --3  若VG空间不够,则先进行VG扩展,后进行lv扩展

       ---1 创建新的pv

          pvcreate /dev/sd[a-z][1-9]

          eg:pvcreate /dev/sdb3

       ---2 扩展VG

          vgextend vg_name pv_device

          eg:vgextend myvg /dev/sdb3

       ---3 此时和--2就一致了

  -2  缩减lv(必须先umount+备份后操作[备份非必须,不过建议备份])

    --1  缩减就是将扩展步骤反过来,先缩减逻辑边界,再缩减物理边界

       ---1 resize2fs lv_device SIZE  (这里只能直接指定缩减后的空间大小,故务必先确定逻辑卷已经使用的空间大小)

          eg:

          resize2fs /dev/mapper/myvg-mylv 17G

       ---2 lvreduce -L [-]SIZE lv_device

          eg:

          lvreduce -L -5G /dev/mapper/myvg-mylv

    --2  缩减VG

       ---1 确定需要移除的pv,及所属vg

          pvdisplay

       ---2 转移pv数据

          pvmove pv_device

          eg:

          pvmove /dev/sdb1

       ---3 缩减vg

          vgreduce -a   #清除vg中的所有空闲pv,或者指定pv,指定和-a不能同时使用

          eg:       

          vgreduce mylv /dev/sdb1 

       ---4 删除pv

          pvremove pv_device

          eg:

          pvremove /dev/sdb1      

4、快照卷用于备份(创建一个区域,用来存储快照卷生成时数据改变前的源数据,只要有数据发生变化,就备份一份放于快照卷,未变的不备份)。 

  原理:linux自带的快照卷使用的是cow技术,即copy-to-write,也就是只复制发生变化前的源数据,从而保证数据一致性。

  创建快照卷的过程:

  1、快照卷初始化,复制源卷的所有inode至快照卷的inode map,并监视源卷的block变化

  2、当源卷数据发生变化时,将变化前的数据复制到快照卷中,并将对应的bit map位更改成1

  3、此时用户访问新数据就通过源卷的inode进入,而老数据就通过快照卷的inode进入

  4、需要注意的是,因为快照卷是复制的源卷的inode,故inode号和存储的文件属性和源卷一模一样,但是并不是硬链接中指向了同一个inode,而是两个分区下的两个号相同的inode。

  5、当快照卷创建完毕后,若修改源卷的数据,则会发现源卷的数据对应inode会发生变化,而快照卷的依然不变。

  -1 特点:

    --1  生命周期为整个snap占满前所用时间,生成快照卷期间,发生变化的源数据的原始大小总和不能超过快照卷设定的大小,如果超过,则快照会释放

    --2  需设定为只读属性,保证快照卷内容不发生改变

    --3  跟关联的原逻辑卷同一个卷组

    --4  ls快照卷的时候,输出的大部分数据都是源卷的数据,而真正存储的数据仅仅是生成快照卷期间发生变化的数据块的源数据,因此快照卷不必大于源lv卷(可以查看快照卷挂载路径的inode和源卷的inode,发现是一致的,即显示的数据都是相同数据块的内容)

  -2 创建快照卷

     lvcreate -L SIZE -s -p r -n lv_snap_name lv_device

     (-L指定大小,-s表明创建一个快照卷snap,-p [r|rw]只读|读写权限,-n快照卷名)

     eg:

     lvcreate -L 100M -s -p r -n mylvsnap /dev/mapper/myvg-mylv

  -3 挂载快照卷

     mount -t ext4 lv_snap_device path

     eg:

     mount -t ext4 /dev/mapper/mylvsnap /mylvsnap

     (此时可以看到/mylvsnap目录inode号已经指向了源卷的挂载目录)              

5、移除逻辑卷

   lvremove lv_device

6、移除卷组

   vgremove vg_name

7、pv载体出现问题解决步骤

  -0  确定问题pv所在的vg

     eg:

     pvdisplay /dev/sdb3  (假设此处是myvg)

  -1  新加一个pv,扩大vg,增加lv
     eg:
     pvcreate /dev/sdb4  (10G)
     vgextend /dev/mapper/myvg /dev/sdb4
     lvextend -L +10G /dev/mapper/myvg-mylv
     resize2fs /dev/mapper/myvg-mylv
  -2  转移要出问题的数据pv(确定转移的pv容量以及pv_device)
     eg:
     pvdisplay /dev/sdb3   #假设sdb3大小为5G
     pvmove /dev/sdb3   #将sdb3转移到其他空余资源上
  -3  缩减lv
     eg:
     lvdisplay /dev/mapper/myvg-mylv #假设扩充后的lv大小为20G
     resize2fs /dev/mapper/myvg-mylv 15G  #缩减lv至15G,保证有删除sdb3正常执行
     lvreduce -L -5G /dev/mapper/myvg-mylv
  -4  缩减vg
     eg:
     vgreduce myvg /dev/sdb3    #若sdb3中含有数据,则会提醒
  -5  删除掉出问题的数据pv
 
     eg:
     pvremove /dev/sdb3

8、做出修改之后,建议进行文件系统检测

  fsck -a 自动修复

  或者(e2fsck仅用来检测ext系列)
     e2fsck [-t fs_type] [-f] [-p] /path/to/device
     -f 强行检查

    

磁盘管理二-LVM相关内容的更多相关文章

  1. Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用

    在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...

  2. 【转载】Linux磁盘管理:LVM逻辑卷管理

    Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理 这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理!!! 一. ...

  3. 20190410Linux中磁盘管理及LVM(week2day1)

    Linux磁盘管理及LVM讲解(week2_day2)   硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接 ...

  4. Linux命令-磁盘管理(二)

    Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...

  5. linux磁盘管理系列-LVM的使用

    LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...

  6. Linux磁盘管理及LVM讲解

    硬盘接口 硬盘接口分为IDE.SATA.SCSI和SAS四种, IDE接口硬盘多用于家用产品中,也部分应用于服务器.不支持热添加,比较老. SCSI接口的硬盘则主要应用于服务器市场.linux. 而S ...

  7. Linux磁盘管理及LVM讲解(1)

    硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服务器上,价 ...

  8. Linux进阶之磁盘管理及LVM逻辑卷

    本节内容 磁盘管理 LVM 一.磁盘管理 1.硬盘接口 种类及其应用: IDE接口硬盘多用于家用产品,部分应用于服务器 SATA SCSI接口硬盘主要应用于服务器 SAS只在高端服务器上,价格昂贵 2 ...

  9. Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理

    一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该 ...

随机推荐

  1. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

  2. Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法

    最近开始使用Idea,有些地方的确比eclipse方便.但是我发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能 ...

  3. Network Attack

    Network Attack Nicola regularly inspects the local networks for security issues. He uses a smart and ...

  4. mysql 增量导入到elasticsearch

    <pre name="code" class="html">zjtest7-redis:/odbc_es# cat /odbc_es/run_mys ...

  5. margin:0 auto 与 text-align:center 的区别(转载)

    摘自:http://www.cnblogs.com/zhwl/p/3529473.html 基本概念: 1.text-align: 属性规定元素中的文本的水平对齐方式;   该属性通过指定行框与哪个点 ...

  6. Javascript构造函数学习

    我们经常会用JS的构造函数实现Java语言中的继承,今天整理一下构造函数的相关属性及说明. 下面定义一个构造函数: function Person(name, sex, age) { this.nam ...

  7. Java虚拟机体系结构深入研究总结

    工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的“伎俩”. 要对Java程序 ...

  8. IOS消息推送情况总结

      App没有启动的时候,接受到了消息通知.这个时候操作系统会按默认方式来展示一个alert,在App Icon上标记一个数字 .当程序处于关闭状态收到推送消息时,点击图标或消息栏会调用 - (BOO ...

  9. JUnit4中的测试套件

    测试套件 JUnit3.8中,用测试套件同时运行多个测试类(http://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html). 在JUnit ...

  10. c++之 变量

    变量的基本操作 变量就是一个可以变化的量,变量由变量类型.变量名.初始值(可选)组成,例如: int abc = 10; 变量类型:int 变量名:abc 初始值:10 // 该值为可选项,在创建变量 ...