Understanding and exploiting snapshot technology for data protection, Part 1: Snapshot technology overview
http://www.ibm.com/developerworks/tivoli/library/t-snaptsm1/index.html
对原文略有删节,删除了IBM具体产品的描述~
引言:
快照技术被普遍地应用在数据保护和数据挖掘等领域。主流的硬件和软件厂商都在自己的产品中提供了快照的支持。使用快照进行数据保护有很高的商业价值,比如:备份不需要当机或者需要很短的当机时间,频繁的备份可以用来缩短还原时间,大数据量的备份很高效,从快照快速恢复系统的能力等。
这个系列的目的是提供一个快照技术的概述。这些信息将有助于你在自己的应用场景中有效的利用快照技术。
什么是快照?
快照是一个常用的工业界术语,用来表示在给定时间点纪录存储系统状态,并在发生错误时从快照恢复系统状态的能力。从根本上说,快照创建了数据在某一时间点数据的副本。一般来说,快照的拷贝操作会立即完成并且副本可以被数据保护、数据分析等应用程序使用。在拷贝数据和访问副本的过程中,原始数据对上层应用始终可用,对原始数据的操作也不会被打断。
快照提供了一种卓越的数据保护方法。由于快照很好的解决了商业系统面临的问题,在存储系统中支持快照越来越成为一种趋势。快照提供更高的可用性,快速的状态恢复,对于大量数据的简单有效的备份管理,降低数据丢失的风险等等。
如何实现快照?
厂商使用不同的策略来实现快照,这些方式各自有自己的优点和缺点。因此,了解快照的实现方式对于构建高效的数据保护解决方案和选择适合自己应用场景的快照实现都十分重要。
这一部分介绍普遍采用的快照实现方法。
写前拷贝快照(copy-on-write)
存储卷快照的创建使用预先为快照分配的存储区域。当快照第一次创建的时候,只拷贝记录原始数据位置的元数据。在快照创建时不拷贝数据,因此,快照的创建几乎是即时的。如果出现对原始卷的写操作,快照副本将记录被更新的数据块。在原始数据被覆盖之前,被更改的数据会被复制到为快照分配的存储池里,因此,才有了“写前快照”的名字。
在写操作覆盖一个数据块之前,“写前拷贝”将原始的数据块移到快照的存储空间里。这保证了快照数据与快照创建时的一致。如果原始数据没有发生更改,对快照数据的读请求将重定向到原始数据,如果发生更改,读请求将读取快照存储的副本数据。快照包含了描述在首次创建之后更改的数据的元数据信息。需要注意的是,原始数据只在首次遇到写请求的时候拷贝一次。
下图描述了一个使用“写前拷贝”策略来实现数据逻辑拷贝的快照操作。
“写前拷贝”快照可能最初会影响原始数据卷的性能,因为对于元数据卷的写操作必须等待原始数据拷贝到快照空间。如果数据没有发生更改,对于快照卷的读操作将重定向到原始数据卷。然而,这个方法非常节省空间,因为快照空间只存储更新的数据。另外,“写前拷贝”快照依赖快照后原始数据卷的数据依然可用。
重定向写(redirect-on-write)
这个方法与“写前拷贝”很类似,但是避免了其两次写操作的缺点。基于“重定向写”的快照兼具空间节省和较高性能两个优点。
对元数据卷的新的写入数据将重定向到快照分配的存储区域。“重定向写”的优点是只有一个写操作,而“写前拷贝”需要两次写操作(一次用来拷贝数据,一次执行数据更新)。
然而,使用“重定向写”,原始数据卷保存的是某一时间点的数据(快照创建时的数据),也就是快照,更新的数据存储在快照分配的存储区域中。当删除一个快照,快照区域中的数据更新需要应用到原始数据卷,更重要的,当有多个快照存在的情况下,访问原始数据卷的数据,记录快照和原始数据卷的数据,在快照删除时维持一致的数据都就将变的较为复杂。使用“重定向写”的快照依赖于快照创建前的原始数据而且原始数据会很快碎片化(数据集中的某些数据会变成旧数据)。
分割镜像(split-mirror)
“分割镜像”创建存储实体的物理镜像,例如 创建与文件系统、卷、LUN等有同样实体同样大小的镜像。整个原始数据的所有内容都要拷贝到另一个独立的数据存储里。由于复制的副本是存储在独立存储空间里原始数据的完整备份,副本具有高可用性。然而,由于需要数据拷贝,使用这种方式的快照不能立即创建。当然,如果已经存在一份原始数据的镜像,可以将这份镜像“一分为二”,副作用就是,这份镜像可能不是原始数据最新状态的拷贝。使用这种快照方法,每个快照都需要与原始数据同样大小的存储空间。“分割镜像”方法有同步更新镜像数据的开销。
支持多镜像的RAID系统可以使用“分割镜像”的方法创建原始数据的拷贝。
基于日志文件的架构(log structrued file architecture)
这种解决方案使用日志文件来记录对原始数据的更改,如果数据需要恢复或者回滚,读取日志文件种的事务并逆序执行即可。对于原始数据的写操作使用类似于关系型数据库中得记录方式。
使用后台拷贝的写前拷贝(copy-on-write with background copy)
有些厂商提供这样一种快照实现, 通过使用“写前拷贝”和一个后天的拷贝进程来创建原始数据的完成备份。这种策略结合了“写前拷贝”和“分割镜像”的优点。它使用“写前拷贝”来创建一个即时的数据快照,然后使用后台的拷贝进程进行块级的数据拷贝,直到创建了原始数据的完整备份。
连续数据保护(continous data protection)
"连续数据保护"(CDP)也叫做连续备份。在CDP中,对一个数据的更新请求被记录到存储空间的另一个位置。CDP创建了整个存储系统的完整更改日志。CDP与其他的快照实现方法不同,它为每个数据更新都创建了快照。传统快照只是创建了某个指定时间点原始数据的拷贝。基于CDP的解决方案可以提供更细的还原粒度,可以还原到数据的任意一次更改。
快照和存储系统的栈式结构
一个存储的栈式结构包含了许多硬件和软件部分。下图显示了通用的存储层次。
出了不同的快照实现策略,快照也可以实现在存储结构不同层次中。概括的说,快照可以实现在软件层,也可以实现在硬件层。这也称为基于控制器的快照(硬件实现)和基于宿主的快照(host-based 文件系统或者卷管理器)。
基于控制器的快照有存储系统的生产厂商提供并内嵌在磁盘阵列中。这些快照实现在LUN级别(块设备级),因此独立于操作系统或者文件系统。
基于宿主(host-based)的快照实现在设备驱动和文件系统之间。快照可以由文件系统、卷管理器或者第三方软件提供。基于宿主的快照对于底层的硬件环境没有依赖,但是依赖于特定的文件系统或者卷管理软件。而且这些快照在数据的逻辑视图层面进行操作,而基于控制器的快照使用的是数据的物理视图。
对于存储系统结构的观察
将快照实现在存储结构的不同层次对数据解决方案会有一定的影响,下面是需要注意的几点:
--物理存储设备和卷管理器在存储系统实现中是两个基本的结构。基本上这两个层次是总会出现的。
--使用文件系统式可选的。有部分应用选择直接使用逻辑卷,例如 数据库应用。 因此这些应用不能利用文件系统级的快照技术
--每个层次都只在自己的层次保证一致性,因此如果某个层次要做快照必须强制上层的缓冲区先下发所有的缓冲操作,然后再创建快照。
--相对于基于硬件的快照系统,基于文件系统和基于卷管理的快照系统更加简单并提供跟高的还原粒度。
--基于硬件的快照系统提供了对硬件错误的保护策略而且有更好的性能。