系统还原技术分析及应用

2012-05-12 08:31刘飞飞
中国新技术新产品 2012年18期
关键词:改动拷贝磁盘

刘飞飞

(国家信息中心,北京 100045)

1 系统还原技术原理

所谓还原技术,就是指记录下以前某个时刻计算机系统的状态,并提供一种“回滚”手段使得计算机系统又能够回到那个时刻的状态,其间任何对系统的改动,如文件修改,注册表修改等全部消失,这样只要计算机用户能保证系统在之前的状态是“干净”的、可信赖的,利用这种“回滚”机制整个系统就可以一直保持“干净”状态。这里面最核心的技术是记录原先的状态和截获并存储新的改动,这就涉及到对操作系统I/O流程的干预。

图1 计算机操作系统存储栈

图1是计算机操作系统中存储栈(storage stack)关键组件的层次图,应用程序打开文件进行读写,I/O子系统则负责把用户的文件读写请求发给文件系统驱动,然后文件系统驱动把文件读写请求转化成块 (block)读写请求,并把块读写请求转发给卷(例如:在Windows操作系统中卷指的是C盘、D盘、E盘等)驱动程序,卷驱动修正一下块的偏移位置然后转发给磁盘(Windows磁盘管理中磁盘0、磁盘1、磁盘2等)驱动,磁盘驱动最后把该请求发到真实磁盘硬件上进行真正的处理(主要是中断处理、读写寄存器等)。所有的I/O(最终体现为对硬盘数据块内容的修改)都在这个存储栈上流动,因此尽管不同的还原软件有不同的实现方法,但是一定位于这个存储栈上的某个位置以监视数据块的改变。以WindowsXP自带的系统还原为例,其还原功能的核心组件实际上就是一个卷过滤驱动程序(又称卷影拷贝,volsnap.sys),位于文件系统驱动与卷驱动之间,这样,在卷一级数据块的修改会先被卷过滤驱动程序截获,卷过滤驱动然后就可以做些处理使得日后能够还原。图2描述了基于卷过滤驱动的还原软件的详细处理流程。

图2 卷过滤驱动还原原理

如图2所示,假设用户文件对应卷上的三个数据块a、b和c,然后用户启动了系统还原功能建立了一个还原点,那么卷影拷贝驱动就开始工作,接着用户修改了这个文件,导致对应的b数据块遭到修改,由于卷影拷贝驱动在卷驱动上方,对b数据块的修改被卷影拷贝驱动先截获,卷影拷贝驱动把改动写入其内部维护的“改动存储池”(用b'数据块代表),接着登记一个映射记录,然后返回成功给应用程序。假设以后应用程序需要读取数据块b的内容了,读取请求又被卷影拷贝驱动先于卷驱动前截获,卷影拷贝驱动查找映射记录表,获知b块对应着改动存储池中的b'块,于是卷影拷贝驱动直接读取b'块的内容返回给上层应用程序;如果应用程序读取的不是b块而是c块,同样块读取请求被卷影拷贝驱动先得到,这次卷影拷贝驱动在映射记录表中查找不到跟c块对应的记录,于是卷影拷贝驱动直接下发请求到下层卷驱动去读取c块内容;同理,卷影拷贝驱动也是这样处理对其他文件数据块的改变;如果之后用户想还原整个卷了,系统还原程序只需要丢弃整个“改动存储池”,删除映射记录表就可以了。类似的,基于磁盘的还原软件也有同样的实现原理,只不过稍微底层一些,它们把自己做成一个磁盘过滤驱动,位于卷驱动和磁盘驱动之间,只捕获磁盘级别的数据块修改;用户创建还原点后,任何对磁盘数据块的修改都会被重定向到内部“改动存储池”中,并且建立起数据块的映射关系;用户执行还原操作后,也是删除映射记录表,撤销“改动存储池”。

2 改动存储池的实现

以上描述的是各类还原软件如何在I/O路径上截获数据块的修改;对于“改动存储池”的实现,不同的还原软件也有不同的设计,最简单的莫过于在原来磁盘上划分出一块区域来作为独立存储改动后的数据块,比如可以把硬盘的最末尾一段未分配的存储空间拿出来作为存储池,这样的设计好处是实现简单,缺点是局限性比较大,比如存储池大小缺乏伸缩性,划分出来的硬盘区域容量决定了最大可以容纳多少变化的数据块;又比如无法适用于用户的硬盘已经被完全分区过了的情况;复杂一点的设计是把一个或若干文件作为“改动存储池”,缺点是实现变得复杂了,但存储池伸缩性很大,可动态适应各种需求,其原理是还原软件在创立一个还原点的时候也创建一个大文件来对应这个还原点,并且通过文件系统接口获知了这个大文件在卷(基于卷的还原技术)或者磁盘(基于磁盘的还原技术)上的分配位置,以Windows平台上的NTFS文件系统为例,NTFS文件系统提供了一些反碎片化(defragment)的接口,比如FSCTL_GET_VOLUME_BITMAP,FSCTL_GET_RETRIEVAL_POINTERS以及FSCTL_MOVE_FILE等等,这些接口原本是设计给碎片整理程序用的,让它们获得卷上的文件系统位图、文件数据块的分配位置及进行数据的搬迁功能等等(详见微软MSDN帮助);还原软件也可以受益于这些接口,而且其中最重要的接口就是 FSCTL_GET_RETRIEVAL_POINTERS,还原软件通过该接口可以获得之前创建的大文件在卷上的分配信息,从而获得有效的存储空间对变化的数据块进行存储;举例来讲,假设用户的D盘由0到99总共100个块组成,还原软件以30个块的大小创建了大文件,并且调用FSCTL_GET_RETRIEVAL_POINTERS接口从文件系统那里知道了<3-5>,<11-15><50-71>是对应这个大文件的数据块,还原软件就以这三个区间构成了“改动存储池”。假设上层应用改动了数据块8,还原驱动截获了这个改动,从“改动存储池”取出一个未使用的块,比如块3,把改动体现在块3上,添加映射项<8-3>,返回给上层应用;同理上层应用改动了数据块19,还原软件从“改动存储池”取得未使用的块4进行对应,<19-4>,上层应用读取块8时,还原软件返回块3内容,读取块19时,返回块4内容,其他没有修改的数据块则返回原来的块内容;当大文件的30个块都使用完后,如果文件系统还有剩余空间,还原软件可以适当进行文件大小调整,比如增长到40个块大小,同样通过FSCTL_GET_RETRIEVAL_POINTERS把新增10个块纳入“改动存储池”实现动态“扩容”;以后当用户进行还原的时候,只需要把大文件和映射表删除就回到了原来创建还原点的状态。

结语

本文从操作系统层面对当前的还原软件进行了剖析并给出了详细的原理阐述;另外笔者还根据文中所述的还原原理开发了一个还原软件原型,在Windows平台上测试通过,充分证明了其可行性。

[1]David A.Solomon,Mark E.Russinovich.Microsoft Windows 2000技术内幕(第3版)(影印版)[J].北京大学出版社,2001.

猜你喜欢
改动拷贝磁盘
修改磁盘属性
唐氏综合征是因为“拷贝”走样了
磁盘组群组及iSCSI Target设置
创建VSAN群集
鸵鸟
爆炒米花(节选)
咪咪(节选)
Windows系统下强化容错拷贝命令的实现
基于硬盘还原卡的数据传送技术在高校网络机房中的应用
漫话拷贝