Volume Shadow Copy Service(VSS)如何工作
VSS卷影拷贝服务其实不是一项新技术了,在2003年前后发布的Windows 2003和Windows XP SP1都提供了对VSS的支持。最近几年微软的一线产品对VSS支持的越来越多,包括Exchange,SQL,AD,DPM等等。在Windows 2008中甚至系统的自带的备份工具也换成了VSS版本的。查一查VSS的资料,发现名词不少,snapshot、writer、requestor等等。这几天翻阅了一些资料,仔细阅读了几遍,终于拨云见日,理清了头绪。
VSS解决的问题
任何一个新东西和新技术的出现总是为了解决现有的问题。在IT领域,很多的资源被放在对各个系统的备份和恢复上。为了99.9XXX%中那n个9,每多一个9都要付出巨大的代价。
在备份领域,传统的备份方案一般有全备份,增量备份和差量备份等。我觉得主要的问题有:
- 增量和差量需要备份软件支持,备份程序需要对被备份的数据有足够了解,备份程序和应用程序协作保证数据的恢复完整一致性,工作量比较大。比如Exchange的数据库,Exchange自己要暴露出API接口,供NTBackup之类的应用程序调用。
- 备份和恢复的时间漫长。每次做全备都需要若干小时。恢复差量和增量的数据的时候,要先恢复全备份再恢复增量、差量的数据。步骤冗长,容易出错。
- 缺乏与硬件的紧密结合。很多存储的硬件都有snapshot的方案,但是这些硬件是做卷级别的镜像,和应用无关,做出来的东西也不能保证在应用级别是完整的。
VSS的出现,就是为了解决这些问题。
卷影的方法分类
- Clone (Full Copy/Split Mirror)全拷贝、镜像拷贝。可以通过软件或者硬件的方式做源卷和目标卷的同步。在同步连接切断之前2边的数据是一致的,在同步连接中断之后目标卷的数据和源数据保持独立,并且是只读的。
- Copy-on-Write (Differential Copy)差量拷贝。这种方法也可以用软件或者硬件的方法实现。当有写操作发生在需要被复制的卷时,被写的那个block会先被复制到另一个存放差量数据地方,同时这个操作会被索引和记录下来。使用源卷里数据和差量数据,这样在逻辑上我们就有一个在之前某个时间点的源卷。这种方法的好处是额外需要的存储空间小,缺点是
- 对源卷有额外的读写操作。
- 在做数据恢复的时候源卷的数据必须还在。
基于以上这2种最底层的卷影的方法,可以实现多种基于软件和硬件的备份应用和方案。微软的应用方案有:
- Data Protection Manager(DPM)
- Windows Backup Service(in Windows 2008)
VSS服务架构
组件
描述
Volume Shadow Copy Service
核心服务,和各个其他组件交互。
Requestor
提出开始做卷影复制的程序,一般是备份程序。
Writer
首先他是应用程序的一部分,用以确保在做卷影复制的时候应用层面的数据是完整一致的。数据库级别的应用一般会有自己的Writer,比如Exchange,SQL,AD等。
Provider
创建和维护卷影复制的组件。可以是操作系统、硬件或者软件自己实现。
Source volume
含有需要被备份的数据卷。
Storage volume
为provider提供存放copy-on-write文件的数据卷
卷影复制的组件
Requestors: 发起卷影复制的程序,一般是备份程序。
Writers: 防止数据不一致,不完整。
- 当备份的应用发起备份请求的时候,系统的VSS服务把这个消息通知给各个writer。Writer在收到这个消息之后,开始为备份做准备,以确保硬盘上的数据的一致性。比如Exchange的writer,会把内存的buff写回到硬盘里,确保硬盘上的数据库和log是完整的。
- Writer也提供其他一些信息,比如应用的名字、图标、包含和排除的文件、恢复策略等等。
- Writer和一个或者多个组件相关联。一个组件是一群文件的集合。比如,Exchange的文件集合包括数据库文件和日志文件等等。这些文件集合是一个整体,必须被同时备份和同时恢复。Writer也提供有关如何按组件恢复数据的信息。
- 如果一个应用没有提供writer,那么只有硬盘上的数据被备份,而内存里面的cache等数据会丢失。这样恢复出来的数据类似于机器突然断电的状态,数据有可能会不一致。相对于非VSS的备份方法,VSS的好处是即使文件正在被打开也可以备份。传统的备份方法被打开的文件是无法再次被备份程序读打开的。
- 在这种设计下,维护数据一致性的工作被从备份程序转移到了应用程序,而应用程序的开发人员对应用程序的数据更加了解,他们知道如何编写Writer来优化卷影复制。
Providers:用以创建和维护卷影复制。主要有三类实现:
- 硬件实现
- 软件实现
- 操作系统实现。Windows 2003自带了一个基于软件的Provider。
卷影复制创建流程
- Requestor,一般是备份程序,要求VSS枚举writers和他们的metadata,为卷影复制做准备工作。
- Writer创建一个XML的备份组件的描述,并定义他们如何被恢复。VSS通知应用程序的Writer为卷影复制做准备。
- Writer开始做准备,比如把内存中的内容写到数据库,把日志中的内容写到数据库等等。做完之后通知VSS。
- VSS发起commit。
- VSS把writer和requestor暂停写操作几秒种,以用来创建一个卷影复制。这个时间不能超过60秒。在此期间,VSS把文件系统在内存中的buff写到硬盘以确保硬盘中文件的一致性。
- VSS告诉requestor花最多10秒的时间来创建卷影复制。
- VSS解冻文件系统。当卷影复制创建好之后,VSS释放处于未激活状态的writer,所有在队列中的读写IO操作被完成。
- VSS确认在卷影复制被创建过程中的IO是成功的,如果失败的话意味着卷影复制是不一致的,VSS通知requestor并且删除卷影复制。Requestor可以选择重试或者通知管理员等操作。
- VSS开始复制卷影复制的数据,在复制完成之后把位置信息返回给Requestor。这一步才是耗时最长的备份数据的过程。
参考资料
How Volume Shadow Copy Service Works
Volume Shadow Copy Service(VSS)如何工作的更多相关文章
- 关于VSS(Volume Shadow Copy Service)一
在开发windows VSS应用程序时 我们应该先下载相关SDK,微软描述如下 When developing your own VSS application, you should observe ...
- Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)
好久没有更新博客了,经历了不少事情,好在最近回归了一点正轨,决定继续Unity Shader的学习之路.作为回归的第一篇,来玩一个比较酷炫的效果(当然废话也比较多),一般称之为GodRay(圣光),也 ...
- Kubernetes里的Service是如何工作的
Service是Kubernetes接入层的一种抽象资源,它为我们提供了一种固定的.统一的访问接口地址和负载均衡能力,这时可能会想到,当时使用docker-compose的时候,不存在Service概 ...
- Web Service CXF的工作流程
我们一起走进系统的内部,跟随每一个调用,去透视系统的每一个层面. 一.我们定义整个目录都在CXFServlet的监控之下 <servlet> <servlet-name>CXF ...
- (vshadow)Volume Shadow在渗透测试中的利用
本文根据嘶吼学习总结出文中几种方式Vshadow包含在window SDK中,由微软签名. Vshadow包括执行脚本和调用支持卷影快照管理的命令的功能,这些功能可能会被滥用于特权级的防御规避,权限持 ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- Oracle数据库的版本变迁功能对比
Oracle数据库自发布至今,也经历了一个从不稳定到稳定,从功能简单至强大的过程.从第二版开始,Oracle的每一次版本变迁,都具有里程碑意义. 1979年的夏季,RSI(Oracle公司的前身,Re ...
- Windows下Oracle服务介绍
如图,截取的是11gR2下RAC其中一个节点的Oracle服务列表. oracle在处理一般事务时并不需要全部启动其后台的所有服务由于oracle服务所占用系统资源比较大,一般情况下,对于单实例的OR ...
- DG动态性能视图详解
V$LOG 显示CONTROLFILE记录的LOG FILE信息. 列名 描述 GROUP# 日志组号 THREAD# 日志线程号 SEQUENCE# ...
随机推荐
- 程序员必须知道的HTML常用代码有哪些?
HTML即超文本标记语言,是目前应用最为广泛的语言之一,是组成一个网页的主要语言.在现今这个HTML5华丽丽地占领了整个互联网的时候,如果想要通过网页抓住浏览者的眼球光靠因循守旧是不行的,程序猿们需要 ...
- 将应用升级到了 Spring 4.1.0+quartz-2.2.1 还是很给力一样的兼容
应用采用了集群3个tomcat,一个weblogic12c 后台数据应用
- Ubuntu 查找文件的方法
1. whereis+文件名 用于程序名的搜索,搜索结果只限于二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息. 2. find / -name ...
- ORM(Object-Relational Mapping 对象关系映射)如何实现(转)
原文链接:http://blog.163.com/hzd_love/blog/static/13199988120107891854473/ 1.什么是ORM ORM的全称是Object Relati ...
- 《UNIX环境高级编程》笔记--环境变量
ISO C定义了一个函数getenv,可以用其取环境变量值. #include <stdlib.h> char* getenv(const char* name); //返回与name关联 ...
- libxml2 使用教程【转】
https://blog.csdn.net/zhoudaxia/article/details/8565731# 本文整理自官方使用教程http://xmlsoft.org/tutorial/inde ...
- cesium js学习一加载三维模型【转】
http://blog.csdn.net/tangyajun_168/article/details/50936698 最近项目中用到室外三维模型与室内三维地图交互,室外三维模型的加载我们采用了ces ...
- JQuery之ContextMenu(右键菜单)
插件下载地址:http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextmenu.r2.js压缩版:http://www.tre ...
- C# 6.0 的那些事
这两天期中考试没时间去看Connect();直播,挺可惜的,考完后补看了Connect(); 把C#6.0的新东西总结一下. 自动属性初始化 (Initializers for auto-proper ...
- javascript学习笔记——怎样改动<a href="#">url name</a>
0.前言 使用了一段时间javascript,再花了点时间学习了jquery.可是总是感觉自己非常"迷糊",比如<a href="#">ur ...