snapshot快照原理
source: http://blog.csdn.net/chenyulancn/article/details/11727381
snapshot是STK(storagetek)为其SVA(shared virtual array)系列磁盘开发的一项技术,后来STK又不这项技术运用与其中低端的磁盘上,但是在非SVA磁盘上这项技术实现起来有点别扭.snapshot 与其他的磁盘快速拷贝技术(如:IBM的flashcopy,EMC的timefinder,hds的shadowimage等)有本质的区别.
1、工作原理
首先,Snapshot会占用磁盘空间,占用空间的多少是由变化数据的多少决定;极端情况下,所有的数据都有变化,就需要有与Target Lun一样大小的Lun。
Snapshot 开始工作的时候,在RAID控制器的Cache中建立一个数据区域指针,与Target的Block一一对应;当某一个Block的数据中要变化,Controller先将原始数据复制到Snapshot Lun中,同时修改指针,指向Snapshot Lun中的Block。
当 Host需要读Target Lun中数据的时候,直接读取Targe Lun;如果读取Snapshot Lun中的数据,现查询内存指针;数据没有改变,就直接读取Target LUn中的Block,如果改变,就直接读取Snapshot Lun中的Block。
也就是说,Snapshot的核心是建立一个指针列表,指示读取数据的地址。
提供一个瞬时数据的影像,只有当数据要改变时,才复制到一个新的Lun中;数据在一段时间内的变化不是太频繁,就不会占用太多的空间。
2、工作方式
snapshot 有两种方式,一种是将目标LUN的数据完全复制一份,要占用相等地磁盘空间,典型的是EMC TIMEFINDER
另一种是对指针的复制,占用空间很少。管理指针也与两种方式,一种是在原数据被修改前,现将原数据复制到特定的快照区域(有有两种方式,一种在单独的磁盘分区,一种是在原文件系统占用的空间),在修改快照中的指针,这样可以不改变原文件系统的指针结构,可以减少磁盘碎片,大多数快照都是这么做的;另一种是修改的数据继续写到同文件系统的空余空间,修改文件系统原来的指针,而不是修改快照的指针。我知道的只有NETAPP这么做,但他的特殊文件系统结构可以做的很好,因为有NVRAM参与。
指针玩的最好的是Veritas的CheckPoint,HP的EVA盘阵(来自COMPAQ)和NetApp WAFL
其实snapshot意思就是“快照”,是数据在某一时刻的状况。进行snapshot可以用磁盘阵列内的软件进行,例如EMC的 timefiner,IBM的Flashcopy,HDS的ShadowImage;也可以在操作系统级利用volume manager软件或file system的技术实现。实现方式也有两种,一种是镜像型的,也就是所有数据copy一份;另一种是指针型,上面谈了很多了。例如VERITAS的 volume manager snapshot是镜像型的,而file system snapshot是指针型的。IBM的FlashCopy好像也有两种方式,IBM的flashcopy分为前台和后台拷贝两种方式,前台拷贝是实际完全拷贝,后台就是说的那种建立指针的方式。后台方式下,如果你访问备份卷 的数据,发现不是最新的,就会先去从原卷上执行COPY工作,达到访问数据的正确行。后台拷贝对系统性能影响小一些。
一般指针型的snapshot是只读的。指针型的snapshot,如果没有备份而原盘坏了,数据应该是无法恢复的;而镜像型的snapshot本身就是当时时刻的数据的全copy,所以原数据坏对它是没有影响的。