磁盘管理二-LVM相关内容

时间:2022-04-15 10:22:47

1、基本概念

LVM:logical volume manager 逻辑卷管理器

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

三者如下图所示:

磁盘管理二-LVM相关内容

  -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 强行检查