Snapshot一般都是利用cow(copy on write)来实现的,
首先,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中;数据在一段时间内的变化不是太频繁,就不会占用太多的空间。
阅读(1785) | 评论(0) | 转发(0) |