快照即为源数据做备份,方便数据的"回滚"和"前滚",保证数据安全.
保证备份的一致性
在做快照之前,程序必须将所有缓存中的数据刷到磁盘.
步骤:
1.快照进程发出”准备快照”通知
2.快照代理要求”停止写并刷新缓存”
3.程序缓存被冲刷到存储设备
4.程序缓存管理回复”缓存已刷新”
5.快照代理报告”快照准备完毕”
快照的实现方式
常用的有:写前复制,写时转向和拆分镜像等.
写前复制(copy with write)
指的是在第一次对源卷进行写操作之前,将源卷中对应的数据块复制到快照卷,而后续对原卷中该数据块的写操作可以直接进行.
在写源卷之前,首先查找快照映射表.映射了源卷块跟快照卷块的关系.
在未命中的情况下,将该数据块从源卷复制到快照卷中,并在快照映射表中追加记录,最后才能将数据写到源卷上. 如果能命中的情况下,直接写到源卷.
在需要获取某时刻的数据时,即获取某个快照卷的数据.
步骤如下:
查看快照映射表,若能命中则向快照卷获取,若不能命中则向源卷获取.
写时转向
做快照后,快照指向源卷的文件,当有数据块要修改时,它的内容被写到新的位置,数据块的父亲也必须被修改以指向它的位置,如图中,A数据块被修改.优点是,写操作只需要一次.
拆分镜像
同一数据的两个副本分别保存在由源数据卷和镜像卷组成.在快照时间点到来时,镜像操作被停止,镜像卷转化为快照卷,获得一份数据快照.
快照卷在完成数据备份等应用后,将于源数据卷重新同步,重新成为镜像卷.镜像分裂快照能够在最短时间内生成完整的物理副本.