1.什么是快照?
- 在计算机系统中,快照通常指的是在某一特定时间点保存系统的状态,并将这个状态存储到特定的硬盘分区中,以便在系统出现问题时能够恢复到这个状态。
- 快照可以用于数据备份、进程维护、系统镜像和云计算环境中的系统状态回滚。
2.快照的分类
• 全量快照
- 镜像分离 (Split Mirror)
• 增量快照
- 写时拷贝 (Copy-On-Write)
- 写时重定向 (Redirect-On-Write)
3.Copy-on-write (COW) 复制写快照技术
1.COW快照需要消耗一些存储空间–建立快照卷。当为一个数据卷创建一个快照之后,这些预留的空间用来存放被变化数据更新的旧数据。COW快照在初始化的过程中仅创建用来描述源数据块位置的指针信息(元数据),而不是完整的将源数据块拷贝过来。因此初始化的过程几乎可以在瞬间完成,对系统的影响很小。
2.COW快照会跟踪数据卷的写操作和数据块变化。当某个数据块发生改变时,在将旧的数据覆盖之前,首先将该块的旧数据复制到预留的快照卷,该步骤仅在数据卷相应数据块位置发生第一次写操作请求时进行。这个处理过程确保快照出来的数据与发起快照的那个精确时间点保持完全一致。
3.如果我们需要访问某个时间点的快照数据,对没有改变过的块直接从数据卷读取;对已经改变并被复制的块则从快照空间读取。从快照被创建那一刻开始,每个快照都会跟踪记录描述块改变的元数据信息。
4.COW快照的优势:空间的高效利用。快照卷只需要保留发生过变化的数据块,与数据卷相比要小得多。
COW快照的缺点:会引起数据卷性能的下降,因为创建快照之后,对数据卷的写操作会增加一个等待的过程,即旧数据块复制到快照卷的过程。
4.Redirect-on-write (ROW) 重定向写快照
“ROW重定向写”与“COW复制写”是相对的概念,它可以避免两次写操作引起的性能损失。ROW同COW一样在空间利用方面效率非常高。
ROW快照避免了写性能的损耗,因为ROW把对数据卷的写请求重定向给了快照预留的存储空间,而写操作的重定向设计则把需要两次写才能完成的操作减少为一次写。
COW的两次写包括:
1、将旧数据写入快照卷
2、在数据卷写入新数据。
而ROW只有写入新数据一步,使用ROW快照,数据卷存放的是上一个快照时间点的旧数据,新数据最终存放在预留的快照空间。
这里也有一个复杂的问题,就是快照的删除。被删除的快照上的数据必须被复制到原始数据卷,并且做一致性回退。创建的快照越多,维护快照的复杂度也会以指数级别上升。这些复杂性包括对原始数据的访问、快照数据和原始数据卷的跟踪、以及快照删除后的数据调整。另一个直接引发的严重问题是,原始数据集中会产生大量的碎片。
5.快照的一致性问题
如果用快照来处理结构化数据,可能会存在一些问题。结构化数据涉及到数据库,以及数据库类应用(例如邮件系统、ERP或CRM等等)。许多产品中的快照并不能与这些应用程序集成或被直接调用。
有一种可能的情况是,在我们创建快照的瞬间,数据库恰好不在静止状态(缓存正在刷新、写操作事务尚未完成、索引和元数据正在更新等等),此刻生成的快照数据是不一致的,很有可能无法正常使用。
• 在微软的Windows Server平台上,利用Windows Volume Shadow Copy Services (VSS)和它的API,数据库应用程序可以集成并调用快照工具,解决这个问题。VSS是专门为结构化数据应用设计的服务框架,可以驱动数据库等应用进入数据一致性的静止状态,在快照开始初始化之前,完成刷新缓存、结束写操作以及系统状态的更新。
• 目前在Linux和Unix操作系统平台上还没有类似VSS的服务或API。
• 这里还有一个好办法,可以不通过Windows VSS,获得数据库的一致性快照。这个办法需要备份软件的配合,将快照技术的API同备份软件集成,就可以从备份服务器端驱动备份软件的数据库代理Agent。Agent备份代理程序可以驱动数据库进入静止状态,然后反向让备份服务器通知快照工具开始执行创建快照的操作。