快照是云盘在某一个或多个时间点的数据备份,可以将当前云盘恢复到快照对应历史时间点的云盘数据。本文为您介绍创建快照和删除快照的原理、快照容量的计算原理以及快照容量与云盘容量的关系等。
创建快照原理
您可以根据需要为云盘手动或自动创建快照。具体操作,请参见创建快照或创建自动快照策略。
原理说明
快照分为全量快照和增量快照。云盘创建的第一份快照是创建时间点云盘上所有数据块的全量快照,不备份空数据块。后续创建的快照均是增量快照,仅备份上一个快照以来有变化的数据块。全量快照和增量快照的元信息中均会存储全量的数据块信息,因此在通过任一快照回滚云盘时,均可以恢复对应历史时间点的所有云盘数据。
云盘初始化后会在逻辑块地址LBA(Logical Block Address)的基础上划分数据块(Block)作为快照数据备份的最小粒度,一旦数据块有业务数据写入,就将参与计量。云盘的数据写入和修改不会对已创建的快照造成影响,快照也不会影响原云盘的数据。
快照创建完成后,将存储在对象存储OSS中。
在OSS支持同城冗余的地域,将默认使用同城冗余OSS来存储您的快照数据,以最大程度保证您快照数据的冗余性。
在OSS暂不支持同城冗余的地域,将使用本地冗余OSS来存储您的快照数据。如果您的业务可用性要求较高,建议您使用复制快照来进一步备份数据。
出于数据安全性考虑,您不能选择使用自己创建的OSS Bucket来存储快照数据。
有关对象存储OSS支持同城冗余的地域信息,请参见存储冗余概述和创建同城冗余存储Bucket。
使用快照创建云盘或回滚云盘后,需要把快照数据从OSS加载到云盘中,云盘被读取的数据会优先加载。这个过程的持续时间受快照数据量的影响,需要几分钟到几小时。在快照数据被全部加载到云盘之前,云盘的读访问时延将会增加。一旦快照的所有数据块都被加载到云盘中,后续的读访问将会恢复到正常的性能水平。
示例说明
假设ECS实例的某块云盘分别在10:00和11:00有新的业务数据写入,那么该云盘快照的原理说明如下:
9:00时,云盘的数据块为A、B和C,此时创建第一份快照1,快照1中就备份了数据块A、B和C。快照1为全量快照,备份了该云盘上在创建快照1时的所有数据。
云盘继续写入数据,修改数据块A为A1、修改数据块B为B1、新增数据块D。在10:00时创建第二份快照2,快照2仅备份有变化的数据块A1、B1和D,快照2为增量快照。快照2的元信息中会记录云盘全量的数据块A1、B1、C和D,其中数据块C来源于快照1。
云盘继续写入数据,修改数据块C为C1、新增数据块E,在11:00时创建第三份快照3,快照3仅备份有变化的数据块C1和E,快照3为增量快照。快照3的元信息中会记录云盘全量的数据块A1、B1、C1、D和E,其中数据块A1、B1和D来源于快照2。
以此类推。
删除快照原理
原理说明
与创建快照相反,在删除快照时,需要根据快照包含的数据块以及数据块的引用关系来进行空间的释放。当云盘的第一个快照删除后,全量快照的属性会顺延到后面的第一个增量快照。如果此时云盘没有创建快照,在云盘下次创建新快照时也为全量快照,会备份云盘创建以来所有写入的数据块。
示例说明
假设ECS实例的某块云盘创建了快照1、快照2和快照3,各快照包含的数据块示例如下:
快照1:包含数据块A、B和C。
快照2:包含数据块A1(数据块A修改为A1)、B1(数据块B修改为B1)、C(数据块C无变化)和D(新增数据块),其中数据块C来源于快照1。
快照3:包含数据块A1(数据块A1无变化)、B1(数据块B1无变化)、C1(数据块C修改为C1)、D(数据块D无变化)和E(新增数据块),其中数据块A1、B1和D来源于快照2。
那么删除该云盘快照的原理说明如下:
假设14:00时删除快照1,快照1包含的数据块A和B无引用关系会直接删除,由于数据块C被快照2引用,因此会保留。此时快照2变为全量快照,快照2包含数据块A1、B1、C、D,快照3仍为增量快照。
15:00时删除快照2,快照2包含的数据块C无引用关系会直接删除,由于数据块A1、B1、D均被快照3引用,因此会保留。此时快照3变为全量快照,包含了数据块A1、B1、C1、D和E。
16:00删除快照3,此时数据块无引用关系,快照中的所有数据块均会被删除。
快照容量计算原理
原理说明
云盘的快照总容量以快照链(一块云盘中所有快照组成的关系链)为粒度进行统计,统计当前云盘所有快照的数据块占用的存储空间。快照容量涉及的概念说明如下:
快照全量大小:单个快照所有数据块占用的存储空间大小。
快照增量大小:当前快照与同一快照链中上一份快照之间不同的数据块占用的存储空间大小。
快照总容量:第一份快照(即全量快照)的全量大小与后续所有增量快照的增量大小之和。
说明快照不保存在云盘中,不会占用云盘空间,会按照快照容量收取快照存储费用(分地域计费)。更多信息,请参见快照计费。
您可以在ECS控制台上通过快照链查看快照容量的大小。具体操作,请参见根据快照链查看快照容量。
示例说明
假设ECS实例的某块云盘分别在10:00和11:00有新的业务数据写入,那么该快照容量计算示例说明如下:
假设云盘的数据块为A(2 MB)、数据块B(2 MB)和数据块C(2 MB),在9:00时创建第一份快照1,快照1中就会备份数据块A、数据块B和数据块C。快照1为全量快照。
快照1容量=数据块A容量+数据块B容量+数据块C容量=6 MB
云盘继续写入数据块A1(2 MB)、B1(2 MB)和D(2 MB),在10:00时创建第二份快照2,快照2仅备份自快照1以来有变化的数据块A1、数据块B1和数据块D。快照2为增量快照。
快照2容量=数据块A1容量+数据块B1容量+数据块D容量=6 MB
云盘继续写入数据块C1(2 MB)和数据块E(2 MB),在11:00时创建第三份快照3,快照3仅备份自快照2以来有变化的数据块C1和数据块E。快照3为增量快照。
快照3容量=数据块C1容量+数据块E容量=4 MB
该云盘的3个快照总容量=快照1容量+快照2容量+快照3容量=16 MB
快照容量与云盘容量的关系
云盘的单个快照容量不会超过云盘容量,但是随着快照的增加,云盘容量可能会小于所有快照的总容量。
假设您创建了一个40 GB的云盘,第一次写入了20 GB的数据,那么此时创建的快照容量是20 GB。然后继续写入10 GB数据,云盘容量仍然是40 GB,但此时快照总容量就是30 GB,以此类推。您可以通过快照链查看快照容量的大小。具体操作,请参见根据快照链查看快照容量。
如下图所示,①是云盘容量大小,②是当前云盘包含的所有快照容量大小。
快照容量与系统容量的差异
快照容量会以固定大小的数据块(Block)作为快照数据备份的最小粒度,以此来计算快照容量大小。
当用户在云盘内进行删除文件操作时,系统显示的容量会减少,但通常对于操作系统的文件系统来说,删除文件仅是标记文件为删除,并不会真正地物理删除该文件对应的数据。因此,对于云盘来说,删除文件也是一个写入操作,并不会减少云盘真正的数据占用空间,相应地如果此时创建快照,快照依然会包含该删除文件对应的数据块。除非操作系统内的文件系统真正执行了文件删除,您可以详细了解文件系统的TRIM机制。
用户无主动写入系统盘的行为,但快照容量依然可能增长。操作系统在运行时会产生系统文件,同样会写入云盘,并备份在快照中。
一份快照的容量大小可能略大于云盘写入数据的大小。因为文件系统的一些元数据信息会占用云盘空间,快照的数据块会包含该元数据信息及用户写入的真实数据信息。例如,用户只在云盘中创建1 MB的文本文件,快照备份的数据大小因为有文件系统元数据的存在会略大于文本文件的大小,即快照容量会大于1 MB。