美文网首页
快照与备份的区别

快照与备份的区别

作者: ZMRWEGo | 来源:发表于2018-12-06 11:45 被阅读306次

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

    先说背景知识:我们现在电脑上的数据,记录方式都是地址->数据这样存放的。例如我们最熟悉的机械硬盘,最小存储单位是扇区,老式硬盘一个扇区512字节,新式硬盘一个扇区4096字节。每个扇区都有自己的地址,现在主流的LBA寻址方式,就是从0开始,0,1,2,3,……,N这样。

    image

    数据的物理存储

    当然,对于外部存储,我们一般不会这样直接存放数据,我们可能通过硬盘分区,并且格式化对应分区后存放数据,于是就变成这样的情况:

    image

    物理地址和逻辑地址

    例如上图,我们建立一张逻辑地址和物理地址的映射表,每个逻辑地址对应两个物理存储单元。当然,这是比较简单的情况:物理硬盘,上面有一个磁盘分区,格式化的时候一个分配单元(Windows叫“簇”)占两个扇区。复杂一点的,可能会有多层逻辑地址,例如分区上有一个虚拟磁盘文件,作为虚拟机的“物理”设备。而虚拟盘的每一个物理扇区号,其实只是虚拟磁盘文件的某个逻辑地址,又对应着文件系统的某个分配单元,同时又是物理磁盘的某个物理扇区号。也就是说可能存在多层逻辑地址,而每一层逻辑地址都会把上一层逻辑地址看做是物理地址对待,这个就不展开了。

    如果这个时候,我们做一个快照,快照的数据大概类似这么一个东西:

    image image

    如果我们要把保存的ABCD改成AACD,在没有快照的时候,是这么一个情况:

    <noscript> image image

    很显然,我们找不回ABCD这个数据了。而如果我们做了快照,快照地址0、1对应的物理地址[0-3]就被锁定不可更改了,结果会类似这么一个情况:

    这个时候,我们按照0-1-2-3这样的逻辑地址,读取出来的就是AACD,两个空单元。按照快照地址0-1读取数据,我们就能读取到原来的ABCD了。同时,我们可以看到,原来的逻辑地址4没有了,换句话说,我们的存储空间少了一个逻辑存储单元。

    当然,上面这是最简单的快照。事实上,我们要考虑将来,逻辑地址1可能要从CD改成EF;将来我们需要再做快照2、快照3,更复杂的,我们可能做了快照3之后,回滚到快照1,然后继续修改数据,之后再做一个快照4……又或者这是一个虚拟硬盘文件,放入一份原始数据之后,做了一个快照;然后我们在这个基础上创建了虚拟硬盘2、3、……、N,用于存放不同逻辑的数据处理结果。这些更复杂的情况就不展开说了。

    一般来说,原则就是就是快照时锁定物理单元内容,并记录本次快照和上一次快照的所对应的物理地址(或者是上一层逻辑地址)的差异。上面例子中,快照完成后,物理地址0-3的数据是不可改动的。如果改写后再做第2次快照,则物理地址8-9也会锁定,同时第二次快照会记录下逻辑地址0所对应的物理地址从0改为8。

    因为快照仅仅记录逻辑地址和物理地址的对应关系,因此快照的速度非常快。在上面例子中,一个逻辑地址对应2个物理扇区,按照现代硬盘一个扇区4KiB,就算按照ZFS的地址宽度128bit=16Byte算,加上物理地址宽度,做一次快照的写入的数据量可能只有整体数据量的0.5%不到。

    而备份,则是另外一份数据副本,例如这样的:

    同一物理设备上的备份<

    或者这样的:

    <noscript> image image

    不同物理设备上的备份

    另外,备份又分全量备份和增量备份,全量备份就是上面的情况了。增量备份则类似快照,但不同的地方在于两次快照之间只记录了两层地址之间的对应关系的差异,而增量备份则把这些差异中,新增地址所对应的底层数据也复制了一份出来。

    快照和备份的不同在于:

    • 备份的数据安全性更好:如果原始数据损坏(例如物理介质损坏,或者绕开了快照所在层的管理机制对锁定数据进行了改写),快照回滚是无法恢复出正确的数据的,而备份可以。
    • 快照的速度比备份快得多:生成快照的速度比备份速度快的多。也因为这个原因,为了回避因为备份时间带来的各种问题(例如IO占用、数据一致性等)很多备份软件是先生成快照,然后按照快照所记录的对应关系去读取底层数据来生成备份。
    • 占用空间不同:备份会占用双倍的存储空间,而快照所占用的存储空间则取决于快照的数量以及数据变动情况。极端情况下,快照可能会只占用1%不到的存储空间,也可能会占用数十倍的存储空间。(PS:不过如果同一份数据,同时做相同数量的快照和增量备份的话,备份还是会比快照占用的存储空间多得多。)

    最后,快照在很多地方都有使用,例如文件系统层面,ZFS、BtrFS、NTFS(MS管快照叫卷影复制,Volume Shadow copy Service,VSS)这些文件系统都提供快照功能;各种虚拟机有快照;很多关系数据库也有快照。

    转自知乎 www.zhihu.com

    相关文章

      网友评论

          本文标题:快照与备份的区别

          本文链接:https://www.haomeiwen.com/subject/pfjncqtx.html