看大家回复的如此热烈,也加进来讨论讨论。欢迎拍砖!
从作快照的位置来看:要么是在主机端,要么就是Storage上(NAS或者ARRAY)
1 首先从主机端开始讲起(只讨论基本原理,不做各种快照变体的讨论)
1.1 对于Windows平台,应该大家都熟悉VSS(MS在Storage上技术比较落后些,比起UNIX平台推出这种技术要晚)
它其实定义的是一套框架,由provider, writer, requestor组成。快照分为2步走,第一步是请求生成快照,第二步是在后续操作中不断的根据快照类型拷贝数据。
第一步操作细节为,由requestor请求,锁住writer(各种应用,比如exchange, sql之类)的IO,将cache写入存储设备(从而避免数据一致性问题),然后恢复writer的I/O,做一些快照的初始化工作,这就是做快照那一瞬间的动作,其消耗的时间由I/O的负荷和已有快照的存储空间相关,因此最初做快照可能就很快;
而第二步则是在快照生成后的漫长过程中,在更新原文件时,采用Copy on Write(CoW)技术去拷贝数据(各软硬件厂商提供的provider,会有自己的一套规则去管理快照,但基本原理都一样,正如江湖语言--天下武功出少林),这种快照基本都是是基于卷的。
顺便说一声,各位看官经常提到快照的指针,是不是有点晕;其实,这个指针准确的说是LBA地址或者卷寻址的地址。打个比方,
比如在T1时刻,F1文件存放的数据放在lba地址A1;
在T2时刻做了一个快照,快照中对应的F1'文件(F1的快照),它初始时不会分配地址空间来存放数据,而是直接用lba地址A1(常说的指针),所以此时F1和F1'内容一样;
而在T3时刻,要对F1文件改动,此时F1'采用CoW,分配新lba地址A1',把F1里面的内容拷贝过来,然后去更新F1文件lba地址A1里面的值,此时F1和F1'就不一样了
1.2 对于Unix/Linux平台,大部分都提供文件系统和卷的快照
1.2.1 卷的快照
其实和Windows的VSS原理差不多,总是采用CoW和bitmap之类的技术来实现和管理;
1.2.2 文件系统的快照
对于很多Unix的文件系统, 比如Veritas的VxFS(它有2种,一种是和卷的快照类似,另一种叫做Checkpoint,这里采用checkpoint来阐述)和IBM的 TransArc Episode文件系统,都是采用fileset(文件集),其技术原理也是一样,只不过它更加的易于管理;拿VxFS举例,每做一次Checkpoint,就会创建一个fileset,它能持续的保存变更的数据,并且Checkpoint是可以被mount的,也就是说它会被经常用于备份应用种(因为备份依赖文件系统的东西更多,所以在文件系统做checkpoint意义是非常明显的)。
同时在文件系统做,减少了windows种VSS需要writer模块,直接将文件系统freeze就可以,而不用针对各种应用设计设计writer模块,当cache中的数据写入后,采用thaw就可以恢复文件系统的操作。
2. 对于Storage设备
其实,不管是NAS还是SAN,你都可以把它想象成装有OS主机的大盒子,只不过NAS给外界的接口是NFS或者CIFS,而ARRAY则是一套SCSI target端接口;
有了这个概念基础,那存储设备也可以在其所在盒子内部设计快照;
至于在盒子内的文件系统(NAS可能会这样选择)或者是卷级(Array可能选择和卷紧密相关的lun)就王婆卖瓜啦。
各位看官可能被快照的指针,和快速制作快照迷惑,其实也就是一层纸......
[ 本帖最后由 rechardluo 于 2007-8-29 13:10 编辑 ]