一、介绍

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。LVM可以对分区在线扩容,快照,镜像和条带化,功能非常强大。这篇文章的主题就是其中一个功能——快照。

快照(Snapshot)就是关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。

对lvm快照的理解_lvm

其实快照就相当于一张照片,照的某个时刻都应的lv的数据。如果在快照以后,lv的数据发生变化,快照就会将变化的数据拷贝到snap中,这样你通过快照去访问lv时,数据还是原来的数据。当然,在你创建snap的时候,肯定给这个快照指定了一个大小,如果变化的数据量超过了的指定的大小,那么快照将会损坏。

二、创建lvm

创建lv的过程:

[root@oracle ~]# pvcreate /dev/sda{3,4}
  Physical volume "/dev/sda3" successfully created
  Physical volume "/dev/sda4" successfully created
[root@oracle ~]# vgcreate newvg /dev/sda{3,4}
  Volume group "newvg" successfully created
[root@oracle ~]# vgdisplay newvg
  --- Volume group ---
  VG Name               newvg
  System ID            
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               400.00 MiB
  PE Size               4.00 MiB    #lv从vg划分空间的最小单 位,所以lv的大小一定是PE的整数倍;创建vg可以-s指定
  Total PE              100
  Alloc PE / Size       0 / 0  
  Free  PE / Size       100 / 400.00 MiB
  VG UUID               tnecBI-66Nv-Vsm2-JbN0-FD41-gyPJ-D7MiKP
[root@oracle ~]# lvcreate -L 200M -n mylv newvg
  Logical volume "mylv" created
[root@oracle ~]# mkfs.ext4 /dev/newvg/mylv
[root@oracle mnt]# mount /dev/newvg/mylv /mnt/lvm/

随便cp个文件到/mnt/lvm/这个目录下

[root@oracle etc]# cd /mnt/lvm/
[root@oracle lvm]# ls
fstab  inittab  lost+found

三、测试快照

[root@oracle lvm]# lvcreate -s -L 20M -n snap-lv -p r /dev/newvg/mylv
  Logical volume "snap-lv" created
[root@oracle lvm]# mount /dev/newvg/snap-lv /mnt/snap
[root@oracle lvm]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/newvg/snap-lv
  LV Name                snap-lv
  VG Name                newvg
  LV UUID                ugNG4W-D4ym-Uszx-yIjH-QLm6-2gDU-qVd9DC
  LV Write Access        read only
  LV Creation host, time oracle, 2014-02-07 14:57:46 +0800
  LV snapshot status     active destination for mylv
  LV Status              available
  # open                 0
  LV Size                200.00 MiB
  Current LE             50
  COW-table size         20.00 MiB
  COW-table LE           5
  Allocated to snapshot  0.06%  #这个是已分配的snap空间
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
[root@oracle lvm]# cat /etc/man.config >> fstab
 #随便找个文件追加到刚刚拷贝到/mnt/lvm/下的文件中
[root@oracle lvm]# lvdisplay
 #再次查看快照的空间
  --- Logical volume ---
  LV Path                /dev/newvg/snap-lv
  LV Name                snap-lv
  VG Name                newvg
  LV UUID                ugNG4W-D4ym-Uszx-yIjH-QLm6-2gDU-qVd9DC
  LV Write Access        read only
  LV Creation host, time oracle, 2014-02-07 14:57:46 +0800
  LV snapshot status     active destination for mylv
  LV Status              available
  # open                 1
  LV Size                200.00 MiB
  Current LE             50
  COW-table size         20.00 MiB
  COW-table LE           5
  Allocated to snapshot  0.25% 
   #这里已分配0.25%,刚刚是0.06%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
[root@oracle lvm]# cd /mnt/
[root@oracle mnt]# ls
lvm  snap
[root@oracle mnt]# cat lvm/fstab
[root@oracle mnt]# cat snap/fstab

可以发现快照的已分配空间发生了变化,lvm目录中的fstab文件也变化了,但是snap中的fstab还是没有变化。

还是说一句,这个snap的空间一定要把握好,如果超出了指定的空间,快照就会损坏,就起不到备份的效果了。如果实在把握不准,可以指定快照的大小和需要快照的lv的大小一样,这样就不可能出现snap空间不够的情况了。