【Linux】快照技术整理

快照概念

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

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

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

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

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

基于存储栈不同层次的快照分类

快照可以采用很多不同实现方式,可以在存储栈中的不同层次来实现,大致分为软件层和硬件层两类,也可分为基于控制器的快照和基于主机的快照两类。

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

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

快照技术实现

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

1、镜像分离(Split Mirror)

镜像分离快照技术在快照时间点到来之前,首先要为源数据卷创建并维护一个完整的物理镜像卷:同一数据的两个副本分别保存在由源数据卷和镜像卷组成的镜像对上。在快照时间点到来时,镜像操作被停止,镜像卷转化为快照卷,获得一份数据快照。快照卷在完成数据备份等应用后,将与源数据卷重新同步,重新成为镜像卷。

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

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

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

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

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

3、指针重映射(Pointer Remapping)

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

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

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

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

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

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

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

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

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

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

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 VMware 中保存 Linux 快照,您可以按照以下步骤进行操作: 1. 在 VMware 中打开您的 Linux 虚拟机。 2. 在虚拟机运行时,选择菜单栏中的 "VM"(虚拟机)选项。 3. 在 "VM" 菜单中,选择 "Snapshot"(快照)选项。 4. 在弹出的快照管理器窗口中,点击 "Take Snapshot"(拍摄快照)按钮。 5. 输入一个描述性的名称和可选的描述,以便于识别和管理快照。 6. 点击 "OK"(确定)按钮,开始创建快照。 7. VMware 将会创建一个快照,并记录当前虚拟机的状态。这样,在以后需要恢复到这个状态时,您可以选择相应的快照进行恢复。 注意事项: - 创建快照可能会导致虚拟机暂时变慢,因为 VMware 正在捕捉虚拟机的内存和磁盘状态。 - 快照会占用额外的存储空间,因此请确保您的存储设备有足够的空间来容纳快照文件。 恢复快照: 如果您希望将虚拟机恢复到之前保存的快照状态,可以按照以下步骤操作: 1. 在 VMware 中打开您的 Linux 虚拟机。 2. 选择菜单栏中的 "VM"(虚拟机)选项。 3. 在 "VM" 菜单中,选择 "Snapshot"(快照)选项。 4. 在快照管理器窗口中,选择您想要恢复的快照。 5. 点击 "Go to"(转到)按钮,然后选择 "Snapshot"(快照)选项。 6. VMware 将会恢复虚拟机到所选快照的状态。 请注意,在恢复快照时,任何在创建快照之后对虚拟机所做的更改都将被丢弃,并还原为快照创建时的状态。因此,请确保在执行恢复操作之前备份重要数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值