linux下LVM相关知识(动态增减LVM,快照功能)的总结

一,什么是LVM 

  LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。LVM是磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。物理卷(physical volume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

 

二,LVM解决了什么难题

  每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。  虽然现在有 很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要 重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解 决问题。  因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。  

  归纳来讲LVM提供两种比较厉害的功能:

     1):可以动态的增大或者缩小磁盘的大小而不影响磁盘原有的数据

     2):提供一种实现数据备份的通道--快照功能

 

三,LVM的逻辑结构

这里要说明以下几点:

  1),pv被创建后是由很多的PE(physical extension物理盘区)组成的,物理盘区就相当于我们说的block,不过通常比一般的block大,可以是4M,8M,16M等,

  2),当VG被创建后,我们才能正常查看PE的数量

  3),其实最后的LV就是由这些PE组成的,不过在LV里面这些PE叫做LE

  4),一个系统上可以有很多个PV,VG,LV

 

以下是LVM管理的相关命令:

 

四,LVM创建过程

   这里我们在虚拟机里面创建在底层准备两个10G的分区作为PV(两个分区的大小不一定非得相等)

  1),创建两个分区sdb1和sdb2         //这里不再列出创建过程,注意创建分区的ID号为8e

 

  2),把这两个分区创建成PV

     #pvcreate /dev/sdb1 /dev/sdb2  //创建成PV

     #pvdisplay                     //查看创建的PV详细信息

 

  3),把创建的PV做成VG

     #vgcreate vg0 /dev/sdb1 /dev/sdb2 //创建成VG(记得指定创建的VG名字)

     #vgdisplay vg0                  //查看创建好的vg信息

 

  4),创建LV

     #lvcreate -L 5G -n lvm1 vg0    //创建LV (-L指定LV大小,-n指定LV名字,注意要制定要在哪个vg中创建LV,因为一个磁盘上是可以存在多个卷组vg的)

     #lvdisplay /dev/vg0/lvm1       //查看创建的LV信息(注意这里不能使用lvdisplay lvm1,需要指定lvm1的路径或者指定卷组名称才能显示出来详细信息。例如#lvdisplay vg0)

 

     到这里我们的lv已经创建完毕,它跟我们的基本磁盘分区一样,要想使用必须先格式化。

 

  5),格式化创建的LV

     #mke2fs -j /dev/vg0/lvm1        //格式化成ext3文件系统

     #mount /dev/vg0/lvm1  /mnt      //挂载新的分区到/mnt

                                     //如果想每次开机自动挂载可以写到 /etc/fstab下

     #ls /mnt                        //会有lost+found文件,证明磁盘分区建立成功

 

  其他的命令介绍:

     #pvremove  /dev/sdb2            //删除一个pv

     #vgextend  vg0 /dev/sdb3        //扩展vg的大小(要先创建sdb3作为pv)

     #vgreduce  vg0 /dev/sdb3        //缩小vg的大小(缩减的时候要先使用pvmove /dev/sdb3,把数据移除)

缩减VG

 想要减小VG的大小,首先确认想删减的分区是否已经写上数据:

[root@ax3 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/hda6
  VG Name               vgtest
  PV Size               964.81 MB / not usable 830.00 KB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              241  
  Free PE               100  
  Allocated PE             141   #这个说明hda6上已经有141个PE上已经写上了数据
  Allocated PE          0
  PV UUID               uTYGW9-MKq4-OEdn-FNzV-77DK-j4XI-IeNLtb

--- Physical volume ---
  PV Name               /dev/hdb5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               297

  Allocated PE          181
  PV UUID               o4LYXW-fm9v-e4oN-ZSuW-SI6e-pLoW-gMrPKa

  --- Physical volume ---
  PV Name               /dev/hda5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               478
  Allocated PE          0
  PV UUID               xD2DkY-G12w-XU7S-a5tB-jEig-4LXB-e0ZK0K

可以直接移出hda5,因为它完全没有数据;也可以移出hda6,只需把hda6上的数据移动到其他分区就可以了:
# pvmove /dev/hda6 /dev/hdb5 #把hda6上的数据备份到hdb5上

然后开始减小VG的大小,我们这里删去hda5,当然,如删去hda6,步骤也完全一样:
[root@ax3 ~]# vgreduce vgtest /dev/hda5
  Removed "/dev/hda5" from volume group "vgtest"
[root@ax3 ~]# pvscan
  PV /dev/hda6   VG vgtest          lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest          lvm2 [1.87 GB / 1.16 GB free]
  PV /dev/hda5                      lvm2 [1.87 GB]
  Total: 3 [4.68 GB] / in use: 2 [2.81 GB] / in no VG: 1 [1.87 GB]

#除去hda5的PV属性
[root@ax3 ~]# pvremove /dev/hda5
  Labels on physical volume "/dev/hda5" successfully wiped
[root@ax3 ~]# pvscan
  PV /dev/hda6   VG vgtest   lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest   lvm2 [1.87 GB / 1.16 GB free]
  Total: 2 [2.81 GB] / in use: 2 [2.81 GB]  / in no VG: 0 [0   ]
此时的hda5就恢复到了初始的模式,再将其system id从8e变为83,则它就完全成为了一个普通的分区。


五,扩展或者缩减一个LVM的大小

  这里我们要引入两个概念:物理边界和逻辑边界

  物理边界:我们对一个磁盘进行分区的分区边界

  逻辑边界:我们格式化分区,建立文件系统后形成的分区边界

在我们对LVM扩展的时候,我们要先扩展物理边界,然后再扩展逻辑边界;缩减LVM的时候则相反(读者这里可以好好体会下为什么这样做)

其实就是水(逻辑边界)与水桶(物理边界)的问题

 

  扩展LVM:

    #lvextend -L +2G /dev/vg0/lvm1   //为LVM1增加2G的大小(注意这里是扩展的物理边界)

    #df -lh                        //显示发现LVM1的大小没有变化(因为我们还没有扩展逻辑边界)

    #resize2fs -p /dev/vg0/lvm1      //扩展其逻辑边界(-p显示扩展的过程)

    #df -lh                          //这时候发现lvm1的大小已经增加了2G,表明扩展成功

 

  缩减LVM:缩减存在一定的风险,所以在生产环境中我们一般不缩减LVM大小

    #umount  /dev/vg0/lvm1           //必须先卸载掉

    #e2fsck  -f /dev/vg0/lvm1        //对这个逻辑卷进行自检,保证其数据的一致性

    #resize2fs  /dev/vg0/lvm1 3G     //缩减逻辑卷到3G大小(缩减的是逻辑边界)

    #lvreduce -L 3G /dev/vg0/lvm1    //缩减的是物理边界

    #mount  /dev/vg0/lvm1 /mnt       //挂载逻辑卷到/mnt

    #ls /mnt                         //查看数据是否被损坏

   

六,快照snapshot(主要是用作在线备份)

  介绍几个概念,关于数据的备份

    冷备份:卸载掉文件系统,不能读不能写

    温备份:不卸载文件系统,能读取文件系统内容但是不能写

    热备份:不卸载文件系统,既能读取文件系统内容又能写入

  注意两点:

  1),快照其实也是一个逻辑卷  

  2),快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份

 

  创建过程:

    #lvcreate -L 512M -s -n lvm1-snap -p r /dev/vg0/lvm1   //创建一个512M的快照(-s指定这是一个快照,-n指定快照名字,-p指定这个快照的权限) 

    #mkdir /snap                       //创建一个目录作为快照卷的挂载点

    #mount /dev/vg0/lvm1-snap /snap          //将快照挂载到 /snap 目录下

    #tar -jcf /tmp/snap.tar.gz  /snap/* //备份快照卷的内容到/tmp下

  这个时候无论你在逻辑卷上做什么变化都不用担心数据丢失了,从备份的快照文件里面可以恢复之前的文件,这就是快照卷的强大之处了……

   当快照备份完之后我们就可以释放并删除这个快照了,以免对系统的负载过大

   #umount /dev/vg0/lvm1-snap

   #lvremove /dev/vg0/lvm1-snap

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。