摘要
数据库快照、虚拟机快照、系统还原快照的快照机制在数据恢复方面给人们带来了极大便利,这么神奇的操作是如何实现的呢?在使用中我们会发现拍摄一个快照时并不会占用太多的空间,系统运行一段时间发生错误后可以通过快照恢复到原来正常的状态。本文主要阐述了快照的定义,稀疏文件特性以及写入时复制的机制,来对快照的原理有个初步的认识。
关键词:快照,稀疏文件,写入时复制
一、快照
在计算机领域,快照(英语snapshot)是整个系统在某个时间点上的状态,快照中的数据是只读的。
- 生成快照:数据A生成一个快照A1。逻辑上生成一个数据的一个副本,只能对这个副本进行读操作。
- 快照恢复:数据A修改成为数据B,又修改为数据C,执行快照A1恢复操作后数据C变回了数据A。原数据修改过后,可以通过快照还原回到生成快照时的状态。
二、稀疏文件
稀疏文件(英语Sparse File)是一种文件,采用了NTFS文件系统的一项特性,能尝试在文件内容大多为空时更有效率地使用文件系统的空间。
- 真实的数据块将占用真实的磁盘空间。
- 大量的空数据块将用简短的信息表示而不占用太多的磁盘空间。
三、写入时复制
写入时复制(英语Copy-On-Write)是当且仅当写入而使数据发生更改时创建数据物理副本的过程。当复制一个对象的时候,不分配新的存储空间,新对象与原对象共用存储空间,并没有真正复制,当写入操作发生时才复制。
- 在Java中执行String2=String1的赋值操作时,String2并没有新的地址,而是与String1共用一个地址和存储空间。
- 当修改String1时会给String1分配一个新的地址和存储空间来保存修改后的数据,String2的地址保持不变。
四、数据库快照的生成原理
生成一个数据库快照时会生成一个稀疏文件,稀疏文件一开始并不会占用整个数据库大小的磁盘空间。当源数据库发生写操作时,就把修改前的原数据块复制且只复制一次到稀疏文件中,之后相同位置的数据无论怎么修改都不会再写入稀疏文件了(保存原始状态)。进行读快照操作时,一部分数据来自稀疏文件,一部分来自源数据库中未经修改的部分。进行快照恢复时就根据稀疏文件恢复源数据库。
五、参考链接
数据库快照:https://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html
java字符串:https://blog.csdn.net/ljb825802164/article/details/88528726
六、写在最后
新手文,学习过程中自己整理的一些资料总结,有理解不到的地方欢迎指出。