概念
要解决的问题,快照究竟是在备份什么?
全球网络存储工业协会SNIA(Storage Networking Industry Association)对快照(Snapshot)的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像(和索引----本人添加)。
快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。按照 SNIA 的定义, 快照有全量快照和增量快照两种类型, 其中又各自使用了不同的快照技术:
上面这个定义翻译过来后很难理解和产生歧义,更喜欢下面的(增量快照的)定义:
- 存储快照是特定时间点数据的一组参考标记。快照就像一个详细的目录表,为用户指向他们可以回滚到的数据的可访问副本。摘自:What is a Storage Snapshot? - https://www.techtarget.com/searchdatabackup/definition/storage-snapshot
存储快照是什么意思?
存储快照可以定义为一组指针,用于表示(denote )存储在存储设备上的数据。该存储设备可以是磁盘驱动器、磁带或存储区域网络 (SAN)。它可以被认为是一个目录,每个指针描述存储在磁盘上的信息或数据。计算机将此快照视为数据的完整备份。
存储快照提供了在创建快照时文件或设备的简明“外观”。它不是数据的精确复制品,而只是数据在特定时刻的快速“图片”。What is a Storage Snapshot? -https://www.techopedia.com/definition/13596/storage-snapshot
以上的定义可以用一成语来形容:按图索骥。 图-->照片-->快照。 骥-->被快照的数据
所以快照应该是一个数据的目录。
这就解答了快照究竟是在备份什么
快照是对当前目录及以下的子树状态进行保存,创建快照相当于对目录树中(节点以下的子目录树)每个inode进行备份,因为inode承载了文件系统的全部信息。
快照分类
根据 SNIA,快照分为完整快照和增量快照,增量快照又分COW和ROW,共三种。它们使用不同的快照技术。
- 全量快照:镜像分离(Split Mirror)。
- 增量快照:
- 写时拷贝(Copy-On-Write)
- 写时重定向(Redirect-On-Write)
全量快照可以参考RAID1理解,创建快照时会生成一个源卷的镜像卷,在读操作时没有任何影响,在写操作时会有两次写入操作,分别是写入源卷与镜像卷。关于增量快照是本文的重点内容,下文将进行详细的介绍。
增量快照
增量快照包含COW和ROW两种,下面我们将介绍这两种快照技术的原理实现。
相关概念
- 数据组织形式
存储系统采用虚拟化存储技术。存储池中创建的LUN包含了元数据卷(Meta Volume)和数据卷(Data Volume)两部分组成。
- 元数据卷(Meta Volume):记录LUN中数据组织形式及其属性的卷,结构形式为树形。
- 数据卷(Data Volume):存放LUN中的实际数据的卷,数据读取和写入都以Extent为单位。
- 源卷
需要进行快照操作的源数据所在的卷,对用户而言表现形式为源LUN。源LUN包括Meta Volume和Data Volume:
- Meta Volume:记录源数据在源LUN中的存在位置。
- Data Volume:记录源LUN中存放的业务数据。
- 快照卷
对源LUN创建快照后,逻辑上生成的数据副本。对用户而言表现形式为快照LUN。快照LUN包括Snapshot Meta Volume和Snapshot Data Volume:
- Snapshot Meta Volume:快照元数据卷。每生成一份快照,就会建立一个Snapshot Meta Volume。
- Snapshot Data Volume:与Snapshot Meta Volume对应的数据卷。记录的是写快照时产生的数据。
- COW数据空间
快照生成并激活后,存储系统在源LUN所在的存储池中动态划分一部分存储空间,用于保存写前拷贝数据。同一个源LUN对应的所有快照LUN共享同一个COW数据空间。COW数据空间包括COW Meta区域和COW Data区域:
- COW Meta区域:同一个源LUN下所有快照共用的元数据区。用于存放写源LUN时所有快照LUN所产生的写前拷贝映射项,即写前拷贝数据与其在COW Data区域中存放位置的对应关系。
- COW Data区域:与COW Meta区域对应的数据空间。用于存放写源LUN时产生的写前拷贝数据。
- 映射表
映射表用于记录源LUN数据和快照LUN数据的在某个时间点的改变情况以及改变后的存储位置。映射表分为共享映射表和独享映射表:
- 共享映射表存放在COW Meta区域中,用于记录写源LUN时产生的写前拷贝数据与其在COW Data区域中存放位置的映射关系。