【存储学习笔记】4:快照(Snapshot)技术的实现方式

news2025/1/12 8:43:38

1 快照

1.1 动机

在上一篇《备份》里提到,热备份就是在执行操作时,服务器需要正常处理来自用户或应用对数据的更新,这样能够保证数据7*24小时可用(在很多服务里这是必要的)。

而热备份的困难就是如何保证数据的一致性,比如有两个数据块,在第一个时刻,他们是 A 1 B 1 A_1B_1 A1B1,此时备份了数据块 A 1 A_1 A1,在下一个时刻,它们被修改成了下一个版本 A 2 B 2 A_2B_2 A2B2,此时备份了下一个数据块 B 2 B_2 B2,得到的备份数据就是 A 1 B 2 A_1B_2 A1B2,并不能组成一个一致的数据。

解决备份时的数据一致问题有几个方向:

  1. 备份时不允许服务更新数据:不满足7*24小时可用
  2. 跳过打开文件:服务正在访问的文件通常也是很重要的需要备份的,不应该跳过的
  3. 区别对待备份IO和应用程序的正常访问IO:通过拆分成不同的IO路径来让它们互不影响,从而解决一致性问题

快照(Snapshot) 就是出于动机3被引入的,通过对一个数据对象进行逻辑复制,形成完全可用的数据副本,进而拆分应用程序的正常IO可以写到之前的上去,不影响逻辑复制出来的快照卷。

1.2 操作

  1. 准备快照:为了解决快照一致性,基本都需要停IO+刷新缓存
  2. 创建快照(create snapshot):形成此时此刻源卷的数据映像
  3. 删除快照(delete snapshot):删除某个数据映像
  4. 恢复(restore):用快照的数据恢复源卷数据

2 写前复制(Copy-on-Write)

2.1 原理

也叫写时复制首写复制(Copy on First Write),第一次对源卷进行写入操作时,把数据搬到快照卷里,然后再修改源卷的数据。

此后,更新操作都会直接更新源卷里的数据。读源卷时从源卷读,读快照卷时,如果快照卷里那个位置有被copy过来的数据就直接读快照卷,否则就fallback回源卷读取。

为了解决“怎么知道快照卷里对应位置的数据是不是copy过来了”这件事,可以引入一个快照映射表,所有on first write的copy动作都记录在这个表里,只要查表miss了就回源卷读取。
在这里插入图片描述
删除快照:直接删除快照卷和快照映射表

数据回滚:扫一遍快照映射表,把快照卷中的数据写回到源卷里去,就能将源卷恢复到该快照所记录的状态了

2.2 优缺点

优点:不影响源卷,删除快照卷很简单

缺点:首次写入时需要先拷贝数据再写源卷,需要一次read两次write

3 写时转向(Redirect-on-Write)

3.1 原理

也叫写时重定向,相比于CoW是在首写的时候copy数据到快照卷,源卷的数据还是在源卷的位置上。RoW则是相反,快照一旦生成这些数据块就放在那不动了,如果有对数据的修改,那么就把修改的数据写到新的位置上去,然后让源卷指向这个新的数据位置。

3.2 优缺点

优点:首写只需要一次重定向write

缺点:因为源卷指向的数据和快照卷的数据交错,所以删除快照时候,需要把数据(链接)调整回源卷,因此删除快照操作相对更复杂一点

3.3 案例

WAFL(Write Anywhere File Layout)文件系统就是用了RoW的典型例子,在打快照时只要建一个新的逻辑根指向源卷的数据,在对源卷有更改时就把写入操作redirect到新的位置,不动快照指向的那些数据。由于WAFL是多级链接结构,真正的数据块在最下面,所以每次write redirect都会递归地建立这条path上的所有node:
在这里插入图片描述
另一个用RoW做快照的经典例子是Hyper-V的differencing vhdx,也是写时转向到新的vhdx文件里:
在这里插入图片描述

4 拆分镜像(Split-Mirror)

4.1 原理

类似于RAID1的镜像盘,持续维护完整的两份源卷数据,对源卷的写入会复制给镜像卷,保证镜像卷的数据和源卷相同。当快照操作来临时,只要停止镜像复制操作,镜像卷就立即成为了此时刻的快照卷。

删除快照:快照卷完成数据备份后要删除快照,只要直接与源卷同步数据,同步好之后可以继续作为镜像卷使用

数据回滚:直接拿快照卷作为服务的底层数据即可

4.2 优缺点

优点:数据恢复、复制和归档简单。快照卷和源卷独立存在,所以一方的数据丢失,另一方仍然可用

缺点:

  • 想要支持几个快照就需要几倍的存储空间
  • 不能随时创建快照,比如如果没有创建镜像卷、或者镜像卷正处于数据同步过程中,都不能创建
  • 为了支持快照操作,需要持续的镜像复制操作,增大了系统开销

4.3 案例

EMC的TimeFinder引入了一种业务持续卷(Business Continuance Volume,BCV),和主存储设备绑定成BCV Pair之后就作为主存储设备的镜像卷,持续将主存储设备的数据复制过来。

需要打快照时,就分裂BCV Pair,分裂后BCV上的就是主存储设备的快照数据。

需要删除快照时,就重建BCV Pair,这会丢弃在分裂后对BCV的修改,并将分裂后对主存储设备的修改应用到BCV上,使BCV快速成为镜像卷。

需要restore时,也是重新绑定BCV Pair,但是将BCV的数据写入主存储设备即可。

参考阅读

《存储技术原理分析》1.2.2

What is Storage Snapshot Technology?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

判断点B是否在线段AC上?

问题 判断点B是否在线段AC上&#xff1f; 解决方法 1).使用矩阵的秩解决 矩阵的秩代码 #include <iostream> #include <vector> #include <cmath>class Matrix { public:std::vector<std::vector<double>> data;int rows, cols;Matrix(int r,…

电子合同如何在线签?9大协助工具软件

文章介绍了以下几个工具&#xff1a;e签宝、上上签、契约锁、法大大、合同管家、Concord、爱签、微签、PandaDoc。 在选择合适的电子签名工具时&#xff0c;很多企业面临着如何确保合规、提高效率以及优化用户体验的挑战。市场上的众多选项使得决策过程变得更加复杂。但是&…

【Kubernetes】虚拟 IP 与 Service 的代理模式

虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP&#xff0c;因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时&#xff0c;每个节点上运行的 kube-proxy 会自动…

百度地图SDK Android版开发 6 显示覆盖物

百度地图SDK Android版开发 6 显示覆盖物 前言地图类中覆盖物的接口覆盖物类Marker示例Polyline示例Polygon示例Arc示例Circle示例Text示例效果图 Marker的更多属性常用属性交互碰撞动画其它属性 折线的更多属性常用属性交互其它 多边形的更多属性常用属性交互其它 Arc的更多属…

keepalive原理详解及应用

目录 一、高可用集群 1.1 什么是keepalived 1.2 什么是VRRP协议 二、Keepalived 部署 2.1 keepalived 简介 2.2 keepalived 框架 2.3 实验环境搭建 2.4 Keepalived 安装 2.5 Keepalived 配置 2.5.1 虚拟路由配置 2.5.2 独立日志 2.5.3 独立子配置文件 三、Keepali…

Unity动画模块 之 3D Rig页签

​本文仅作笔记学习和分享&#xff0c;不用做任何商业用途本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 1.Rig页签 Rig 选项卡 - Unity 手册&#xff0c;rig是设置骨骼与替身系统的&#xff0c;工作流程如下 Avatar是什么…

【算法】弗洛伊德(Floyd)算法求最短路径

目录 1.弗洛伊德&#xff08;Floyd&#xff09;算法介绍 2.弗洛伊德算法图解分析 2.1思路&#xff1a; 2.2图和矩阵的准备 2.3弗洛伊德算法的步骤&#xff1a; 2.4疑问 3.弗洛伊德算法的代码实现 3.1创建图并显示距离表与前驱表 3.2完整代码 1.弗洛伊德&#xff08;Flo…

数据结构stack (笔记)

文章目录 1. 概念理解易混淆内容 2. 时间复杂度3. 实现方式4. 应用5. 内容出处 1. 概念理解 stack(中文名&#xff1a;堆栈、栈)&#xff1a;虽然它叫堆栈&#xff0c;但是它其实指的是栈&#xff0c;跟堆没啥关系。 栈的特性&#xff1a;先进后出、后进先出(这个过程就…

【STL】红黑树(插入、删除底层实现)

目录 红黑树简介 红黑树框架构建 构造函数 析构函数 四种旋转逻辑&#xff08;左单旋&#xff0c;右单旋&#xff0c;左右双旋&#xff0c;右左双旋&#xff09; 左右双旋与右左双旋 左单旋 右单旋 红黑树的插入 Insert 插入节点的颜色 红黑树插入的三种情况 代码…

Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向 task03笔记

Datawhale官方的Task3链接&#xff1a;Task03 往期Task1、Task2链接&#xff1a;Task01&#xff0c; Task02 【学习者手册】&#xff1a;链接直达 【QA文档】&#xff1a;链接直达 【赛事官网】&#xff1a;链接直达 ComfyUI ComfyUI是一个基于深度学习的图像生成软件&…

鸿萌数据恢复服务:SQL Server 中的“PFS 可用空间信息不正确”错误

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份、网络及终端数据安全等解决方案与服务。 同时&#xff0c;鸿萌是国际主流数据恢复软件(Stellar、UFS、R-Studio、ReclaiMe Pro 等)的授权代理商&#xff0c;为专…

【教学类-58-10】黑白三角拼图08(参考图+操作卡+黑白块,适合个别化)

背景需求&#xff1a; 前期做了一套适合集体操作的绘画“黑白三角” 【教学类-58-09】黑白三角拼图07&#xff08;1页3张黑白的白点卡片&#xff0c;一种宫格36张&#xff0c;适合一个班级一次操作&#xff09;-CSDN博客文章浏览阅读1k次&#xff0c;点赞30次&#xff0c;收藏…

面向自动驾驶保证车辆转向稳定性的模型预测控制

摘 要 车辆智能化是当前和未来汽车发展的主要方向和核心技术之一。随着车辆智能化水 平的提高&#xff0c;自动驾驶等级从无自动驾驶向完全自动驾驶提升。在自动驾驶的人机协同控制 和完全自动驾驶阶段&#xff0c;由于人类驾驶员在动态驾驶任务中的参与程度不同&#xff0c;…

23. 机盒通信

1. 概述 耳机和充电盒,采用机盒通信的方式,完成通信和充电。受限于耳机上的触电,机盒通信采用单线模式。 注:耳机只做应答,不主动发起通信 2. 硬件连接 由于bes2700外置SY5501的电源管理芯片,实际上串口通信,通过SY5501进行转发。 充电盒 -> SY5501 -> bes27…

windows安装boost后没有b2.exe(无法执行b2)

原因&#xff1a;如果你是在官网下载的.exe文件进行的boost安装&#xff0c;那么就不需要再执行bootstrap.bat&#xff0c;也因此不会有b2.exe 链接&#xff1a;官方网址下载 通过.exe安装boost并配置环境变量之后就可以直接使用了 如果你仍希望有b2.exe&#xff0c;那么双击执…

2024“钉耙编程”中国大学生算法设计超级联赛(9)hdu7529 树异或价值(树形dp+贪心)

题目 t(t<20)组h里&#xff0c;每次给定一棵n(n<2e5)个点的&#xff0c;点1为根的有根树&#xff0c; 定义树的价值为&#xff0c; 其中&#xff0c;&#xff0c;dep为深度&#xff0c;1号点的深度为0 而a数组待确定&#xff0c;对于所有的种方案&#xff0c;你要使树…

Leetcode每日刷题之118.杨辉三角

1.题目解析 杨辉三角作为一个经典的数学模型&#xff0c;其基本原理相信大家已经耳熟能详&#xff0c;这里主要是在学习了vector之后&#xff0c;对于本题有了新的解法&#xff0c;更加简便。关于vector的基本使用详见 面向对象程序设计(C)之 vector&#xff08;初阶&#xff0…

Selenium + Python 自动化测试17(数据驱动-文本操作)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 之前有一篇我们讨论了使用模块化测试来优化我们的测试脚本&#xff0c;今天我们试着进一步深入学习数据驱动。 本篇文章我们讨论一下数据驱动思想&#xff0c;如何将数据和脚本…

Zookeeper的在Ubuntu20.04上的集群部署

安装资源 官方安装包下载地址&#xff1a;https://zookeeper.apache.org/releases.html 懒得找版本的可以移步下载zookeeper3.84稳定版本&#xff1a; https://download.csdn.net/download/qq_43439214/89646735 安装方法 创建安装路径&&解压安装包 # 创建路径 m…

机器学习之ROC曲线

机器学习之ROC曲线 1.TPR与FPR计算2.TPR、FPR与分类阈值的关系3.生成ROC曲线4.AUC计算参考文献本博客主要参考了https://www.evidentlyai.com/classification-metrics/explain-roc-curve。 1.TPR与FPR计算 真阳率TPR(True Positive rate),又称召回率recall rate。 假阳率F…