当前位置:网站首页>快照和备份
快照和备份
2022-06-30 15:44:00 【qq_42533216】
一句话答案:快照是数据存储的某一时刻的状态记录;备份则是数据存储的某一个时刻的副本。这是两种完全不同的概念。
先说背景知识:我们现在电脑上的数据,记录方式都是地址->数据这样存放的。例如我们最熟悉的机械硬盘,最小存储单位是扇区,老式硬盘一个扇区512字节,新式硬盘一个扇区4096字节。每个扇区都有自己的地址,现在主流的LBA寻址方式,就是从0开始,0,1,2,3,……,N这样。

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

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

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

很显然,我们找不回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%不到。
而备份,则是另外一份数据副本,例如这样的:

同一物理设备上的备份
或者这样的:

不同物理设备上的备份
另外,备份又分全量备份和增量备份,全量备份就是上面的情况了。增量备份则类似快照,但不同的地方在于两次快照之间只记录了两层地址之间的对应关系的差异,而增量备份则把这些差异中,新增地址所对应的底层数据也复制了一份出来。
快照和备份的不同在于:
- 备份的数据安全性更好:如果原始数据损坏(例如物理介质损坏,或者绕开了快照所在层的管理机制对锁定数据进行了改写),快照回滚是无法恢复出正确的数据的,而备份可以。
- 快照的速度比备份快得多:生成快照的速度比备份速度快的多。也因为这个原因,为了回避因为备份时间带来的各种问题(例如IO占用、数据一致性等)很多备份软件是先生成快照,然后按照快照所记录的对应关系去读取底层数据来生成备份。
- 占用空间不同:备份会占用双倍的存储空间,而快照所占用的存储空间则取决于快照的数量以及数据变动情况。极端情况下,快照可能会只占用1%不到的存储空间,也可能会占用数十倍的存储空间。(PS:不过如果同一份数据,同时做相同数量的快照和增量备份的话,备份还是会比快照占用的存储空间多得多。)
最后,快照在很多地方都有使用,例如文件系统层面,ZFS、BtrFS、NTFS(MS管快照叫卷影复制,Volume Shadow copy Service,VSS)这些文件系统都提供快照功能;各种虚拟机有快照;很多关系数据库也有快照。
快照如果只是记录数据在存储单元上某个时间段的地址,是否最初数据不存在了,快照是无法进行恢复的?
理论上,某个地址的数据发生变化前做过快照的话,发生变化时会锁定物理单元不能改写。所以你说的“最初数据不存在了”,意味着要么没做过快照,要么快照机制已经被破坏了,自然就无法恢复了。,比如我有一个文件夹里面有10个文件,此时我做了一次快照,后来我删除了部分文件,那我通过这个快照能恢复我删除的文件吗?
能,不过你删文件的时候,原来存储这些文件的扇区并不会释放出来,依然是被占用的。
边栏推荐
- 【子矩阵数量统计】CF1181C Flag子矩阵数量统计
- MySQL proxy middleware atlas installation and configuration
- ASP. Net core Middleware
- KDD 2022 | 我们离通用预训练推荐模型还有多远?推荐系统的通用序列表示学习模型 UniSRec
- Create a new MySQL database under Linux and import SQL files
- Imeta | Ye Mao / Shi Yu reviewed the dynamic shuttle and ecological function of intracellular and extracellular genes in the environmental microbiome
- 互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践
- Interesting research on mouse pointer interaction
- Unsupported major. minor version 52.0
- Data governance Market: Yixin Huachen faces left, Huaao data faces right
猜你喜欢

Simulation of two-color ball system to judge the winning situation

Create a new MySQL database under Linux and import SQL files
![[download attached] installation and use of penetration test artifact Nessus](/img/ef/b6a37497010a8320cf5a49a01c2dff.png)
[download attached] installation and use of penetration test artifact Nessus

边缘计算平台如何助力物联网发展

构建适合组织的云原生可观测性能力

Build cloud native observability capability suitable for organizations

优惠券种类那么多,先区分清楚再薅羊毛!

电子烟强制性国家标准GB 41700-2022发布 2022年10月1日起实施

Go zero micro Service Practice Series (VIII. How to handle tens of thousands of order requests per second)

几百行代码实现一个 JSON 解析器
随机推荐
[unity ugui] scrollrect dynamically scales the grid size and automatically locates the middle grid
Mysql事务/锁/日志总结
What is XR extended reality and what are the XR cloud streaming platforms
Mysql8.0 method and steps for enabling remote connection permission
MySQL8.0开启远程连接权限的方法步骤
How to get the preferential activities for stock account opening? Is online account opening safe?
'<', hexadecimal value 0x3C, is an invalid 问题解决
超 Nice 的表格响应式布局小技巧
互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践
[cve-2019-0193] - Apache Solr dataimport remote command execution analysis
互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践
halcon变量窗口的图像变量不显示,重启软件和电脑都没用
招标公告:深圳市财政局数据库异地灾备项目
Types of waveguides
Google play index table
'<', Hexadecimal value 0x3c, is an invalid problem solving
Policy Center-User Data
[附下载]渗透测试神器Nessus安装及使用
15年做糊21款硬件,谷歌到底栽在哪儿?
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例