一般来说,原则就是快照时锁定物理单元内容(不让修改了),并记录本次快照和上一次快照的所对应的物理地址(或者是上一层逻辑地址)的差异。
上面例子中,快照完成后,物理地址0-3的数据是不可改动的。如果改写后再做第2次快照,则物理地址8-9也会锁定,同时第二次快照会记录下逻辑地址0所对应的物理地址从0改为8。
因为快照仅仅记录逻辑地址和物理地址的对应关系,因此快照的速度非常快
一句话总结: 生成快照的时候,锁定物理单元的内容,不让修改;然后快照记录 逻辑地址和物理地址的对应关系;根据这个关系去读取物理单元的内容去;
备份又分全量备份和增量备份,就是将内容重新生生一份;
快照和备份的不同在于:
- 备份的数据安全性更好:如果原始数据损坏(例如物理介质损坏,或者绕开了快照所在层的管理机制对锁定数据进行了改写),快照回滚是无法恢复出正确的数据的,而备份可以。
- 快照的速度比备份快得多:生成快照的速度比备份速度快的多。也因为这个原因,为了回避因为备份时间带来的各种问题(例如IO占用、数据一致性等)很多备份软件是先生成快照,然后按照快照所记录的对应关系去读取底层数据来生成备份。
- 占用空间不同:备份会占用双倍的存储空间,而快照所占用的存储空间则取决于快照的数量以及数据变动情况。极端情况下,快照可能会只占用1%不到的存储空间,也可能会占用数十倍的存储空间。(PS:不过如果同一份数据,同时做相同数量的快照和增量备份的话,备份还是会比快照占用的存储空间多得多。)—一句话:快照快,底层大多数时间会非常节省空间的;极端场景下,可能会锁定非常多的屋里数据单元,造成空间的浪费;但是速度还是很快;(他只是锁定了,没有重新复制内容)
备份是一种行为,快照一种技术手段