当前位置: 首页 > news >正文

快照(Snapshot)技术发展综述

快照(Snapshot)技术发展综述

刘爱贵

摘要:传统数据备份技术存在备份窗口、恢复时间目标RTO和恢复时间点RPO过长的问题,无法满足企业关键性业务的数据保护需求,因此产生了数据快照技术。本文对快照技术的概念、特点、实现技术和发展现状进行了概括性阐述,并对其未来的发展进行了展望。

关键词:快照,备份,复制,镜像,写时复制,指针重映射

作者简介:刘爱贵,研究方向为网络存储、数据挖掘和分布式计算;毕业于中科院,目前就职于赛门铁克@Symantec,从事存储软件研发。Email: Aigui.Liu@gmail.com

注:作者学识和经验水平有限,如有错误或不当之处,敬请批评指正。

PDF格式下载:http://download.csdn.net/source/1613486

一、 引言

随着计算机技术和网络技术的不断发展,信息技术水平不断得到提高。人类进入称为信息社会的二十一世纪后,诸如数字通信、数字多媒体、电子商务、搜索引擎、数字图书馆、天气预报、地质勘探、科学研究等海量数据型应用的涌现,各种信息呈现爆炸式的增长趋势,存储成为信息计算技术的中心。应用对存储系统的要求不断提高,存储容量不断升级,从GigaByteTeraByte PetaByteExaByte,愈显巨大。图灵奖获得者Jim Gray提出一个新的经验定律:网络环境下每18个月生产的数据量等于有史以来的数据量之和。与此同时,现代企业对计算机的依赖性严重增强,信息数据逐渐成为企业赖以生存的基础,数据损坏或丢失将给企业带来巨大的损失。由于黑客、病毒、硬件设备的失效以及火灾、地震等自然灾害的原因,使系统和数据信息遭到破坏甚至毁灭,如果不及时地进行恢复,将对企业造成巨大的损失,所以备份容灾技术显得尤为重要。尤其,9.11等事件造成的灾难性后果使人们更加深刻地认识到数据信息的价值和意义,日益重视数据的保护。

在过去的20多年中,虽然计算机技术取得了巨大的发展,但是数据备份技术却没有长足进步。数据备份操作代价和成本仍然比较高,并且消耗大量时间和系统资源,数据备份的恢复时间目标和恢复点目标比较长。传统地,人们一直采用数据复制、备份、恢复等技术来保护重要的数据信息,定期对数据进行备份或复制。由于数据备份过程会影响应用性能,并且非常耗时,因此数据备份通常被安排在系统负载较轻时进行(如夜间)。另外,为了节省存储空间,通常结合全量和增量备份技术。

显然,这种数据备份方式存在一个显著的不足,即备份窗口问题。在数据备份期间,企业业务需要暂时停止对外提供服务。随着企业数据量和数据增长速度的加快,这个窗口可能会要求越来越长,这对于关键性业务系统来说是无法接受的。诸如银行、电信等机构,信息系统要求24x7不间断运行,短时的停机或者少量数据的丢失都会导致巨大的损失。因此,就需要将数据备份窗口尽可能地缩小,甚至缩小为零,数据快照(Snapshot)、持续数据保护(CDP, Continuous Data Protection)等技术,就是为了满足这样的需求而出现的数据保护技术。

二、 快照概念

快照(Snapshot)是某个数据集在某一特定时刻的镜像,也称为即时拷贝,它是这个数据集的一个完整可用的副本。存储网络行业协会SNIA对快照的定义是[1]:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本(duplicate),也可以是数据的一个复制品(replicate)

快照具有很广泛的应用,例如作为备份的源、作为数据挖掘的源、作为保存应用程序状态的检查点,甚至就是作为单纯的数据复制的一种手段等。创建快照的方法也有很多种,按照SNIA的定义[2],快照技术主要分为镜像分离(split mirror) 、改变块(changed block) 并发(concurrent) 三大类。后两种在实现时通常使用指针重映射(pointer remapping)和写时拷贝(copy on write)技术。changed block 方式的灵活性及使用存储空间的高效性,使得它成为快照技术的主流。

第一种快照是镜像分离。在即时拷贝之前构建数据镜像,当出现一个完整的可供复制的镜像时,就可以通过瞬间“分离”镜像来产生即时拷贝。这种技术的优点是速度快,创建快照无须额外工作。但缺点也很显明,首先它不灵活,不能在任意时刻进行快照;其次,它需要一个与数据卷容量相同的镜像卷;再者,连续地镜像数据变化影响存储系统的整体性能。

第二种快照是改变块[3]。快照创建成功后,源和目标共享同一份物理数据拷贝,直到数据发生写操作,此时源或目标将被写向新的存储空间。共享的数据单元可是块、扇区、扇道或其他的粒度级别。为了记录和追踪块的变化和复制信息,需要一个位图(bitmap),它用于确定实际拷贝数据的位置,以及确定从源还是目标来获取数据。

第三种快照是并发[3]。它与改变块非常相似,但它总是物理地拷贝数据。当即时拷贝执行时,没有数据被复制。取而代之,它创建一个位图来记录数据的复制情况,并在后台进行真正的数据物理复制。

三、 不同存储层次的快照实现

“计算机科学中的任何问题,都可以通过增加间接层次来解决”-Butler Lampson1992年图灵奖获得者。对于快照技术,我们可以在存储系统中的不同层次来实现,可以在磁盘阵列、文件系统、卷管理器、NAS系统或备份系统中来实现。

1 存储系统栈与快照实现

存储栈由一组硬件和软件组件组成,为运行在主机操作系统上的应用系统提供物理存储介质,如图1所示。快照可以采用很多不同实现方式,也可以在存储栈中的不同层次来实现,大致分为软件层和硬件层两类,也可分为基于控制器的快照和基于主机的快照两类[4]

基于控制器的快照,在存储设备层或硬件层中实现,由存储系统硬件提供商管理并集成于磁盘阵列中。这种快照在LUN级(块级)完成,独立与操作系统和文件系统。基于主机的快照,在设备驱动和文件系统级之间实现,通常由文件系统、卷管理器或第三方软件来执行。这种快照不依赖存储硬件,但却依赖于文件系统和卷管理软件。该快照作用于逻辑数据视图,这与基于控制器的快照的不同,它作用与物理数据。

在以上各个存储层次中,物理存储层和卷管理器是最适合实现快照的两个组件,它们可以方便地利用物理存储,是当前主流的实现层次。文件系统层实现快照是一个可行的选择,然而诸如数据库等应用会直接选择使用逻辑卷来实现快照,因为在文件系统层它们不能被快照技术所管理。一般来说,没有必要在应用层实现快照,对于备份机制,可以利用下层的文件系统或卷管理器接口来实现,但需要应用暂时停顿以保证快照数据一致性。总的来说,基于软件层的快照易于操作,且提供比较好的恢复粒度,而基于硬件层的快照往往更高的性能和容错性。

目前,存储厂商提供了在不同存储层次实现快照的存储产品。快照在存储子系统中实现的有IBM TotalStorage Disk SystemsNetApp NAS EMC Symmetrix,在虚拟化层中实现的有IBM Total Storage SAN Volume Controller,在卷管理器中实现的有Veritas Volume ManagerLinux LVMIBM Tivoli Storage Manager LVSAMicrosoft® Windows® 2003 VSS System provider,在文件系统中实现的有AIX JFS2IBM TotalStorage SAN File SystemIBM General Parallel File SystemIBM N seriesNetApp filersVeritas File System

四、 快照实现方式及技术

  快照技术能够实现数据的即时影像,快照影像可以支持在线备份。全量快照是实现所有数据的一个完整的只读副本,为了降低快照所占用的存储空间,人们提出了写时复制(COW Copy-On-Write)和写重定向(ROWRedirect on Write)快照技术。另外,还出现了其他一些快照技术的实现方式,如日志、持续数据保护等,可以提升快照的相关性能。

1、 镜像分离(Split Mirror)

  镜像分裂快照技术在快照时间点到来之前,首先要为源数据卷创建并维护一个完整的物理镜像卷:同一数据的两个副本分别保存在由源数据卷和镜像卷组成的镜像对上。在快照时间点到来时,镜像操作被停止,镜像卷转化为快照卷,获得一份数据快照。快照卷在完成数据备份等应用后,将与源数据卷重新同步,重新成为镜像卷。对于要同时保留多个连续时间点快照的源数据卷,必须预先为其创建多个镜像卷,当第一个镜像卷被转化为快照卷作为数据备份后,初始创建的第二个镜像卷立即与源数据卷同步,与源数据卷成为新的镜像对。镜像分裂快照操作的时间非常短,仅仅是断开镜像卷对所需的时间,通常只有几毫秒,这样小的备份窗口几乎不会对上层应用造成影响,但是这种快照技术缺乏灵活性,无法在任意时间点为任意的数据卷建立快照。另外,它需要一个或者多个与源数据卷容量相同的镜像卷,同步镜像时还会降低存储系统的整体性能。[5]

2、 写时复制(COW, Copy On Write

2 写时复制快照

写时复制快照使用预先分配的快照空间进行快照创建,在快照时间点之后,没有物理数据复制发生,仅仅复制了原始数据物理位置的元数据。因此,快照创建非常快,可以瞬间完成。然后,快照副本跟踪原始卷的数据变化(即原始卷写操作),一旦原始卷数据块发生首次更新,则先将原始卷数据块读出并写入快照卷,然后用新数据块覆盖原始卷(如图2)。写时复制,因此而得名。

这种快照技术在创建快照时才建立快照卷,但只需分配相对少量的存储空间,用于保存快照时间点之后源数据卷中被更新的数据。每个源数据卷都具有一个数据指针表,每条记录保存着指向对应数据块的指针。在创建快照时,存储子系统为源数据卷的指针表建立一个副本,作为快照卷的数据指针表。当快照时间点结束时,快照建立了一个可供上层应用访问的逻辑副本,快照卷与源数据卷通过各自的指针表共享同一份物理数据。快照创建之后,当源数据卷中某数据将要被更新时,为了保证快照操作的完整性,使用写时复制技术。对快照卷中数据的访问,通过查询数据指针表,根据对应数据块的指针确定所访问数据的物理存储位置。

写时复制技术确保复制操作发生在更新操作之前,使快照时间点后的数据更新不会出现在快照卷上,保证了快照操作的完整性。写时复制快照在快照时间点之前,不会占用任何的存储资源,也不会影响系统性能;而且它在使用上非常灵活,可以在任意时间点为任意数据卷建立快照。在快照时间点产生的“备份窗口”的长度与源数据卷的容量成线性比例,一般为几秒钟,对应用影响甚微,但为快照卷分配的存储空间却大大减少;复制操作只在源数据卷发生更新时才发生,因此系统开销非常小。但是由于快照卷仅仅保存了源数据卷被更新的数据,此快照技术无法得到完整的物理副本,碰到需要完整物理副本的应用就无能为力了,而且如果更新的数据数量超过保留空间,快照就将失效。

3、 指针重映射Pointer Remapping

3 指针重映射快照

这种实现方式与写时复制非常相似,区别在于对于原始数据卷的首次写操作将被重定向到预留的快照空间。该快照维持的是指向所有源数据的指针和拷贝数据。当数据被重写时,将会给更新过的数据选择一个新的位置,同时指向该数据的指针也被重新映射,指向更新后的数据。如果拷贝是只读的,那么指向该数据的指针就根本不会被修改。重定向写操作提升了快照I/O性能,只需一次写操作,直接将新数据写入快照卷,同时更新位图映射指针;而写时拷贝需要一次读和两次写操作,即将原始卷数据块读入并写入快照卷,然后将更新数据写入原始卷。

不难发现,快照卷保存的是原始副本,而原始卷保存的则是快照副本。这导致删除快照前需要将快照卷中的数据同步至原始卷,而且当创建多个快照后,原始数据的访问、快照卷和原始卷数据的追踪以及快照的删除将变得异常复杂。此外,快照副本依赖与原始副本,原始副本数据集很快变得分散。

4、 日志文件架构(Log-structured file architecture

  这种形式的快照技术利用日志文件来记录原始数据卷的写操作。所有针对原始数据卷的写操作都记录在日志系统中,相当于每次数据变化均会生成快照。因此,这与数据库系统事务或文件系统日志非常相似,可以根据需要,从日志恢复数据或者回滚事务到任意合理状态。严格意义讲,这种方式不能称之为快照,但的确能达到快照的目标,不少文件系统实现了这种功能,如ZFSJFSEXT3NTFS等。

5、 克隆快照(Copy on write with background copy

  前面提到的快照,基本上都不会生成完整的快照副本,无法满足完整物理数据副本的业务需求。克隆快照可生成与源数据卷一致的镜像快照,它充分利用了写时拷贝和镜像分离两种快照技术的优点。快照时间点时,它先使用写时拷贝方式快速产生快照副本,然后在后台启动一个拷贝进程来执行源数据卷至快照卷的块级数据拷贝任务。一旦复制完成,就可以通过镜像分离技术获得一个克隆快照。克隆快照同样继承了镜像分离快照的缺点,除了需要一个与源数据卷容量相等的快照卷外,还会一定程度上影响存储系统的整体性能。

6、 持续数据保护(Continuous data protection

以上几种快照技术均存在共同的不足之处,即不能在任意点创建任意多的快照。日志型快照虽然没有上述不足,但却依赖与具体的文件系统,无法直接应用到使用不同文件系统的应用,对于非基于文件系统的数据应用无能为力。

持续数据保护[6],也称连续备份,它自动持续捕捉源数据卷数据块的变化,并连续完整地记录这些数据块版本。每一次数据块变化都会被记录,生成瞬间快照,这与其他快照技术在快照时间点上创建快照是不同的。因为写操作都被记录保存下来,因此能够动态地访问任意一个时间点的数据状态,提供了细粒度的数据恢复,可以实现瞬间和即时的恢复,有效拉近恢复点目标。数据块级的持续数据保护技术的优点是与应用的藕合比较松,性能和效率比较高,系统连续不间断运行,不存在快照窗口问题。它的缺点是对存储空间的要求比较高,这也是限制数据块级持续数据保护技术广泛应用的根本原因。

1[4]从不同角度对以上几种快照技术进行了分析对比。

镜像分离

指针重映射

写时复制

日志文件

克隆快照

持续数据保护

快照是否依赖源数据卷?

NO
镜像包含完整的数据副本

YES
未变化的数据从源数据卷访问

YES
未变化数据从源数据卷访问

YES
未变化数据从源数据卷访问

ONLY
仅在后台拷贝未被完成时

YES
除了包含源数据副本实现外

空间效率

NO
要求源数据卷相同容量存储空间

YES
大多数据情况下要求变化数据存储空间

YES
大多数据情况下要求变化数据存储空间

YES
要求变化数据存储空间

NO
要求源数据卷相同容量存储空间

YES
存储空间需求取决于保存变化数据的数据和频率

源数据卷系统CPUI/O负载

LOW/HIGH
镜像分离后低,分离前数据同步高

HIGH/NONE
软件型快照高,硬件型快照无

HIGH/NONE
软件型快照高,硬件型快照无

HIGH
对写操作进行日志时高

LOW
一般由存储子硬件执行


具体实现相关

源数据卷写负载

NONE
写负载发生在分离前

NONE
写直接重定向至新块

HIGH
首次写产生额外写负载

HIGH
写操作必须进行日志

HIGH
拷贝完成前的首次写产生写负载

HIGH
每次写操作导致相应的写操作 

逻辑数据错误保护机制

YES
数据必须从镜像卷拷贝,变化没有记录,速度较慢

YES
数据变化可以回滚或者同步至源数据源

YES
数据变化可以回滚或者同步至源数据源

YES
数据变化可以回滚

YES
可以反向建立快照,由于仅复制变化数据块,速度较快

YES
数据变化可以同步至原始数据副本

源数据卷物理介质故障保护机制

YES
镜像卷是完整副本

NONE
有效源数据卷必须存在

NONE
有效源数据卷必须存在

NONE
有效源数据卷必须存在

YES
后台复制完成后完全保护


具体实现相关

1 快照技术一览及对比

五、 案例分析

  目前,几乎所有存储厂商的存储产品都支持快照,这成了事实上的行业标准,不具备快照功能的产品无法参与市场的竞争。不同厂商的快照实现方式各不相同,各有技术优势,也有不足之处,用户可以根据应用数据的特点来选择不同的方案。下面简要介绍当前主流存储厂商的快照技术。

1、 EMC TimeFinder

EMC TimeFinder [7][8]提供本地存储复制,以提高应用程序可用性和数据恢复速度。利用 EMC Symmetrix 系统,提供了很高的部署灵

相关文章:

  • 国产开源硬件力作CanoKey,替代昂贵的Yubikey!
  • 在CentOS上升级OpenSSL 1.1.1k
  • firewall-cmd 常用命令
  • 俞敏洪在北京大学2008年开学典礼上的发言
  • iptables 之 REJECT 与 DROP 对比
  • Nginx捕获并自定义proxy_pass返回的错误
  • 后台传JSON,前台动态生成一个下拉框
  • PostgreSQL psql工具使用方法
  • 在后台把DataTable组织成JSON,送到前台动态填充UltraWebGrid
  • Win10以后的版本不支持文件拖动打开的解决办法
  • 阴阳历转换
  • EmEditor正则匹配中文
  • VC阴阳历转化与二十四节气
  • EmEditor 正则表达式语法
  • 星期、干支、二十八宿计算公式
  • Google 是如何开发 Web 框架的
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【css3】浏览器内核及其兼容性
  • 03Go 类型总结
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Bootstrap JS插件Alert源码分析
  • C++入门教程(10):for 语句
  • CSS盒模型深入
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • GitUp, 你不可错过的秀外慧中的git工具
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Linux Process Manage
  • log4j2输出到kafka
  • ng6--错误信息小结(持续更新)
  • spring学习第二天
  • Vue小说阅读器(仿追书神器)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 普通函数和构造函数的区别
  • 微信小程序设置上一页数据
  • 优秀架构师必须掌握的架构思维
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 回归生活:清理微信公众号
  • 正则表达式-基础知识Review
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ###项目技术发展史
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma预处理命令
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Python) SOAP Web Service (HTTP POST)
  • (八)c52学习之旅-中断实验
  • (笔试题)分解质因式
  • (编译到47%失败)to be deleted
  • (翻译)terry crowley: 写给程序员
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (五)MySQL的备份及恢复
  • (一)appium-desktop定位元素原理
  • (转载)利用webkit抓取动态网页和链接
  • ***原理与防范