这里我续上一章日志《linux LVM配置2》讲解一下LVM的快照功能

LVM的系统快照

现在你知道 LVM 的好处咯,未来如果你有想要增加某个 LVM 的容量时,就可以透过这个放大、缩小的功能来处理。 那么 LVM 除了这些功能以外,还有什么能力呢?其实他还有一个重要的能力,那就是系统快照 (snapshot) 什么是系统快照啊?快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区不文件系统共享。 用讲的好像很难懂,我们用图解说明一下好了:

左图为最出建置系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块) 作为数据存放处。 此时快照区内并没有任何数据,而快照区与系统区共享所有的 PE 数据, 因此你会看到快照区的内容不文件系统是一模一样的。 等到系统运作一阵子后,假讴 A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B I 的区块则还是与文件系统共享!

照这样的情况来看,LVM 的系统快照是非常棒的“备份工具”,因为他只有备份有被更动到的数据, 文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此“快照”当时的文件系统就得以“备份”下来,且快照所占用的容量又非常小!

那么快照区要如何建立与使用呢?首先,由于快照区与原本的 LV 共享很多PE 区块,因此快照区与被快照的 LV 必项要在同一个 VG 上面。

下面我就使用我之前删除的/dev/sdb5 来新建一个快照

  1. [root@CentOS5 ~]#pvcreate /dev/sdb5 
  2. [root@CentOS5 ~]#pvscan  
  3.   PV /dev/sdb6   VG aixevg          lvm2 [1.39 GB / 0    free] 
  4.   PV /dev/sdb7   VG aixevg          lvm2 [1.39 GB / 0    free] 
  5.   PV /dev/sdb8   VG aixevg          lvm2 [1.39 GB / 0    free] 
  6.   PV /dev/sdb9   VG aixevg          lvm2 [1.39 GB / 0    free] 
  7.   PV /dev/sdb5                      lvm2 [1.40 GB] 
  8.   Total: 5 [6.96 GB] / in use: 4 [5.56 GB] / in no VG: 1 [1.40 GB] 

添加PVVG

  1. [root@CentOS5 ~]#vgextend aixevg /dev/sdb5  
  2.   Volume group "aixevg" successfully extended 

下面就是创建快照了

创建快照命令格式

  1. [root@CentOS5 ~]#lvcreate -l 89 -s -n aixebak /dev/aixevg/aixelv 
  2. -l:后面接用多少PE加入快照中 
  3. -s:这是最重要的参数,它表示snapshot,就是快照之意 
  4. -n:后面接新建快照名称,/dev/….则是要被快照的LV完整文件名 

  1. [root@CentOS5 ~]#lvcreate -l 89 -s -n aixebak /dev/aixevg/aixelv  
  2.   Logical volume "aixebak" created 

创建好快照之后查看一下LV

  1. [root@CentOS5 ~]#lvdisplay  
  2.   --- Logical volume --- 
  3.   LV Name                /dev/aixevg/aixelv 
  4.   VG Name                aixevg 
  5.   LV UUID                Mx0CUA-JUxI-dV3Q-9NIV-fvRH-REJP-GcIZQd 
  6.   LV Write Access        read/write 
  7.   LV snapshot status     source of 
  8.                          /dev/aixevg/aixebak [active] 
  9.   LV Status              available 
  10.   # open                 1 
  11.   LV Size                5.56 GB 
  12.   Current LE             356 
  13.   Segments               4 
  14.   Allocation             inherit 
  15.   Read ahead sectors     auto 
  16.   - currently set to     256 
  17.   Block device           253:0 
  18.     
  19.   --- Logical volume --- 
  20.   LV Name                /dev/aixevg/aixebak 
  21.   VG Name                aixevg 
  22.   LV UUID                61WaYj-jUXH-ck5R-Rb82-P7eq-GGn0-1Qyr01 
  23.   LV Write Access        read/write 
  24.   LV snapshot status     active destination for /dev/aixevg/aixelv 
  25.   LV Status              available 
  26.   # open                 0 
  27.   LV Size                5.56 GB 
  28.   Current LE             356 
  29.   COW-table size         1.39 GB 
  30.   COW-table LE           89 
  31.   Allocated to snapshot  0.00%  
  32.   Snapshot chunk size    4.00 KB 
  33.   Segments               1 
  34.   Allocation             inherit 
  35.   Read ahead sectors     auto 
  36.   - currently set to     256 
  37.   Block device           253:1 

拷贝一下数据到/mnt/lvm

  1. [root@CentOS5 ~]#mount /dev/aixevg/aixelv /mnt/lvm 
  2. [root@CentOS5 ~]#cp –a /etc /var /mnt/lvm 

接下来我们可以挂载、查看aixebak,可以看到到aixebak有一样的内容,这就是快照(aixebak)功能,自动备份

  1. [root@CentOS5 ~]#mkdir /mnt/aixebak 
  2. [root@CentOS5 ~]#mount /dev/aixevg/aixebak /mnt/aixebak/ 
  3. [root@CentOS5 ~]#df -h 
  4. Filesystem            Size  Used Avail Use% Mounted on 
  5. /dev/sda2             4.9G  3.4G  1.3G  74% / 
  6. /dev/sda5             3.6G   72M  3.4G   3% /date 
  7. /dev/sda1             289M   16M  259M   6% /boot 
  8. tmpfs                 125M     0  125M   0% /dev/shm 
  9. /dev/mapper/aixevg-aixelv 
  10.                       5.4G  587M  4.6G  12% /mnt/lvm 
  11. /dev/mapper/aixevg-aixebak 
  12.                       5.4G  587M  4.6G  12% /mnt/aixebak 

我们把aixebak取消挂载

  1. [root@CentOS5 ~]#umount /mnt/aixebak/ 
  2. [root@CentOS5 ~]#df -h /mnt/lvm/ 
  3. Filesystem            Size  Used Avail Use% Mounted on 
  4. /dev/mapper/aixevg-aixelv 
  5.                       5.4G  587M  4.6G  12% /mnt/lvm 

恶搞下原来要被快照的分区

  1. [root@CentOS5 ~]#rm -rf /mnt/lvm/var/ 
  2. [root@CentOS5 ~]#cp -a /boot /lib /mnt/lvm/ 
  3. [root@CentOS5 ~]#lvdisplay /dev/aixevg/aixebak  
  4.   --- Logical volume --- 
  5.   LV Name                /dev/aixevg/aixebak 
  6.   VG Name                aixevg 
  7.   LV UUID                61WaYj-jUXH-ck5R-Rb82-P7eq-GGn0-1Qyr01 
  8.   LV Write Access        read/write 
  9.   LV snapshot status     active destination for /dev/aixevg/aixelv 
  10.   LV Status              available 
  11.   # open                 0 
  12.   LV Size                5.56 GB 
  13.   Current LE             356 
  14.   COW-table size         1.39 GB 
  15.   COW-table LE           89 
  16.   Allocated to snapshot  5.73%  
  17.   Snapshot chunk size    4.00 KB 
  18.   Segments               1 
  19.   Allocation             inherit 
  20.   Read ahead sectors     auto 
  21.   - currently set to     256 
  22.   Block device           253:1 

上面看到,被快照的区域已经被改动了,然而我们快照依然可以将原来的数据还原出来,下面就快照区域备份原来的数据,然后删除快照区域

  1. [root@mkk aixebak]# mkdir /backups 
  2. [root@mkk aixebak]# mount /dev/aixevg/aixebak /mnt/aixebak/ 
  3. [root@mkk aixebak]# cd /mnt/aixebak/ 
  4. [root@mkk aixebak]# tar -jcvf /backups/lvm.tar.bz2 * 
  5. [root@CentOS5 ~]#umount /mnt/aixebak/ 
  6. [root@CentOS5 ~]#lvremove /dev/aixevg/aixebak  
  7. Do you really want to remove active logical volume "aixebak"? [y/n]: y 
  8.   Logical volume "aixebak" successfully removed 

下面我们格式化之前被快照的区域,然后还原被恶搞之前的数据

  1. [root@CentOS5 ~]#umount /mnt/lvm/ 
  2. [root@CentOS5 ~]#mkfs -t ext3 /dev/aixevg/aixelv  
  3. [root@CentOS5 ~]#tar -jxvf /backups/lvm.tar.bz2 -C /mnt/lvm/ 
  4. [root@CentOS5 ~]#cd /mnt/lvm/ 
  5. [root@mkk lvm]# ls 
  6. etc  lost+found  var 

从上面我们看到,LVM快照是可以完全还原之前的数据的,这也是我们用来备份系统的手段