数据快照

探究快照技术

一、什么是快照

存储网络行业协会对快照的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始时间点)的映像,快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。其实就像照相机一样,相机快门一闪,记录下那一时刻。不一样的就是快照可以恢复到那一时刻,但是我们却永远也会不到我们照片中的曾经时刻。

很多的情况是我们对磁盘进行快照,磁盘快照(Snapshot)是针对整个磁盘卷册进行快速的档案系统本分,与其他备份方式最主要的不同点在于“速度”,很多种快照技术在进行磁盘快照时并不涉及任何档案的复制动作,即使数据量再大,一般情况,通常可以在几秒内完成快照动作。当然也有部分会在快照时候消耗较多的时间,例如克隆快照,下面会介绍到。

二、快照的作用

快照的作用主要是能够进行在线数据备份与恢复,当存储设备发生应用故障或者文件损坏时可以进行快速的数据恢复,将数据回滚到够格可用的时间点的状态,快照的另一个作用就是为存储用户提供另外一个数据访问通道,当元数据进行在线应用处理时,用户可以访问快照数据,还可以利用快照进行测试等工作,所有的存储系统,不论高中低端,只要应用于在线系统,那么快照就成为一个不可或缺的功能。快照的作用可以如下图中一个简单的文件来体现。

 

三、快照的应用及实现

创建一个快照,不同的设备需要不同的命令,但是对于系统来说,基本都包括如下的几个步骤:

1):发起创建指令

2):在发起时间点指定通知系统停止应用程序和文件系统的操作

3):创建快找点,创建快照空间

4):创建完成之后,释放文件系统和应用程序,系统恢复正常运行

四、常用到的快照技术

1、克隆(Clone)快照

Clone快照创建的是数据的完整副本,快照的对象可以是一个存储卷、一个文件系统或者一个LUN,Clone的优点就是具有高可用性,但是缺点也很明显,就是在创建的时候,数据要完整的复制一份。

使用Clone快照需要面对的一个非常严重的问题是每个快照都需要占用和源数据空间一样大的存储空间。尤其对快照需求较大、较多的情况,资源成本会非常高。另外就是创建的时候消耗时间较长。

优点:具有高可用性;快照文件可以作为备份使用。

缺点:快照创建时间较长;快照占用空间较大,资源成本较高。

Clone快照创建的时刻,系统的所有的操作都会停止,创建一个和源数据空间大小一样的快照空间,将数据完整拷贝到快照空间中,快照完成后,系统恢复正常工作,实现过程如下图所示:

 

 

 

2、镜像分离(Split mirror)快照

镜像分离(split mirror)快照也属于全量快照,这种快照方式比较简单,先创建一个原始卷的镜像卷,每次磁盘写入数据的时候,都会往原始卷和快照卷同时写入内容,当启动快照时,则镜像卷能快速脱离,生成一个快照卷。

优点:镜像分离的快照生成和恢复方便,速度快,快照操作的时间非常短,仅仅是断开镜像卷对所需的时间,通常只有几毫秒,几乎不会对上层应用造成影响;创建快照无需额外的工作,而且数据隔离很好,不存在快照卷和原始卷的相互影响;管理简单,不需要监控目标数据的状态,而且可以作为数据备份直接保存起来。

缺点:磁盘空间占用比较大,因为每个快照都需要占用和源数据卷同样的存储空间,而对于需要多份快照的需求,它需要多个与源数据卷容量相同的镜像卷;写数据时同时需要写两份,会降低存储系统的整体性能。

镜像分离首先会创建镜像卷,镜像卷和数据卷同时进行数据写入,快照执行时刻,镜像卷进行分离,作为镜像文件,实现过程如下如所示:

3、写时拷贝(COW)快照

在创建写时拷贝(copy-on-write)快照的时候,会创建一个快照空间,在创建COW快照的时候,创建的仅仅是保存源数据空间和快照空间对应关系的指针信息,而不是进行数据的完整拷贝,创建的数据空间中的数据块为空,快照空间占用的存储空间也是很小的,因此创建过程很快,对系统的影响很小。

COW会跟踪数据卷的写操作和源数据块的数据变化,当某个位置的数据发生变化时,将旧数据被覆盖之前,首先会将该块的旧数据复制到预留的快照空间中,该过程也仅在数据卷对应的数据块位置第一次发生数据变化的时候进行。

当进行数据回滚的时候,需要将非空块中的数据,复制到对应的源数据空间的位置,完成数据回滚。

COW快照在创建之后,每个数据块第一次有新数据写入都会有等待和数据拷贝的情况。

快照的创建过程:

Step 1: 创建快照指令

Step 2: 生成快照卷

Step 3: 源数据卷中的原始数接收到更新操作指令

Step 4: 将源数据卷中的原始数据拷贝到快照卷中(预留空间), 下次针对这一位置的写操作将不再执行写时拷贝操作

Step 5: 更新快照卷指针表

Step 6: 更新源数据卷的原始数据

Step 7: 不断的重复 Step 3~6, 直到执行下一次快照

优势: COW 在进行快照操作之前, 不会占用任何的存储资源, 也不会影响系统性能;创建快照时由于快照卷与源数据卷通过各自的指针表共享同一份物理数据, 而不需要进行全量拷贝所以快照创建速度非常快, 可以瞬间完成。

劣势: COW 因为创建快照后会的每次写入操作都需要先将源数据卷中的原始数据拷贝到快照卷中才能开始写入源数据卷, 所以会降低源数据卷的写性能。

应用场景: COW 快照技术在创建快照后的一次数据更新操作实际上需要一次读操作(读源数据卷的数据)和两次写操作(写源数据卷与写快照卷), 所以, COW 更适合于应用对存储设备读多写少的场景。

除此之外, 如果一个应用容易出现对存储设备的写入热点(只针对某个有限范围内的数据进行写操作), 也是较较理想的选择。因为其数据更改都局限在一个范围内, 对同一份数据的多次写操作只会出现一次写时复制操作。实现过程如下图所示。

4、写时重定向(ROW)快照

写时重定向(redirect-on-write)是和COW相近的概念,但是避免两次写操作的性能损失问题,ROW和COW的空间利用效率很高。ROW快照在创建的时候,也是创建一个数据块为空的数据空间以及保存源数据空间和快照空间的指针信息,相比于COW的复杂数据写入过程,ROW的写入过程只要一步就可以完成,ROW的数据卷存放的是上一个快照时间点的旧数据,新数据则通过指针信息找到快照空间中相对应的位置进行写入。但是这种模式也有一个比较麻烦的问题就是快照的删除,被删除的快照上的数据必须先复制到对应的数据空间之后,快照才会删除。

优点:快照的创建时间较短;快照空间占用存储空间较小;数据写入较快,性能较好。

缺点:快照删除时候,要将快照空间数据复制到源数据卷,消耗时间较长。

如果在创建快照之后, 对源数据卷的数据进行了更新操作的话, 并不会像 COW 似得直接修改源数据卷原始数据, 而是再开辟一个新的空间用于存放用于更新原始数据的新的数据,具体步骤如下:

Step 1: 创建快照

Step 2: 将自上次快照以来所有的重定向写数据所对应在源数据卷中的数据复制出来生成这个时间点的快照, 然后再将这些重定向写数据写回到源数据卷中的相应位置

Step 3: 源数据卷中的原始数据接收到更新操作指令

Step 4: 开辟一个新的数据存储卷(预留空间)

Step 5: 将源数据卷数据指针表中被更新原始数据的指针重定向到新开辟的数据存储卷

Step 6: 写入更新数据到新开辟的存储空间中

Step 7: 重复 Step 3~6, 直到下一次执行快照

读操作是否需要读重定向, 则根据读取数据的位置是否有过自上次快照以来的写重定向, 必须对有过写重定向的位置进行读重定向, 反之就不需要了。

ROW的快照方式的一个很大的问题就是快照的删除,要将快照空间的数据复制到数据卷。快照的删除过程如下:

Step 1: 操作系统暂停工作

Step 2: 快照空间中非空块中的数据按照指针表将数据复制到源数据卷中对应的空间中

Step 3:释放快照空间。

 

 

五、快照的方式

具体使用快照时,存储管理员可以有三种形式,即冷快照拷贝、暖快照拷贝和热快照拷贝。
  冷快照拷贝:进行冷快照拷贝是保证系统可以被完全恢复的最安全的方式。在进行任何大的配置变化或维护过程之前和之后,一般都需要进行冷拷贝,以保证完全的恢复原状(rollback)。冷拷贝还可以与克隆技术相结合复制整个服务器系统,以实现各种目的,如扩展、制作生产系统的复本供测试/开发之用以及向二层存储迁移。
  暖快照拷贝:暖快照拷贝利用服务器的挂起功能。当执行挂起行动时,程序计数器被停止,所有的活动内存都被保存在引导硬盘所在的文件系统中的一个临时文件(.vmss文件)中,并且暂停服务器应用。在这个时间点上,复制整个服务器(包括内存内容文件和所有的LUN以及相关的活动文件系统)的快照拷贝。在这个拷贝中,机器和所有的数据将被冻结在完成挂起操作时的处理点上。
  当快照操作完成时,服务器可以被重新启动,在挂起行动开始的点上恢复运行。应用程序和服务器过程将从同一时间点上恢复运行。从表面上看,就好像在快照活动期间按下了一个暂停键一样。对于服务器的网络客户机看来,就好像网络服务暂时中断了一下一样。对于适度加载的服务器来说,这段时间通常在30到120秒。
  热快照拷贝:在这种状态下,发生的所有的写操作都立即应用在一个虚拟硬盘上,系统的文件以保持高度的一致性。服务器提供让持续的虚拟硬盘处于热备份模式的工具,以通过添加REDO日志文件在硬盘子系统层上复制快照拷贝。

六、快照和传统备份的区别

总的来说,就一句话:快照是数据存储的某一时刻的状态记录;备份则是数据存储的某一个时刻的副本。这是两种完全不同的概念。

1、备份的数据安全性更好:如果原始数据损坏,很多快照回滚是无法恢复出正确的数据的,而备份可以。

2、快照的速度比备份快得多:生成快照的速度比备份速度快的多。也因为这个原因,为了回避因为备份时间带来的各种问题(例如IO占用、数据一致性等)很多备份软件是先生成快照,然后按照快照所记录的对应关系去读取底层数据来生成备份。

3、占用空间不同:备份会占用双倍的存储空间,而快照所占用的存储空间则取决于快照的数量以及数据变动情况。极端情况下,快照可能会只占用1%不到的存储空间,也可能会占用数十倍的存储空间。(PS:不过如果同一份数据,同时做相同数量的快照和增量备份的话,备份还是会比快照占用的存储空间多得多。)

 

posted @ 2020-09-01 18:09  H-Designer  阅读(3390)  评论(0编辑  收藏  举报