陈一璋王丹陈渝
摘要:当计算机系统遇到到用户错误操作、硬件故障、被黑客或病毒攻击,造成数据丢失或系统损坏时,通过数据恢复技术可将用户数据恢复正常或者使系统正常运行,从而减小用户损失。提出基于Android-x86的Windows恢复系统设计,通过双系统启动的方式实现系统恢复功能,从而有效与问题源进行隔离,且在恢复过程中不需借助其它媒介。测试表明,该方法能够有效恢复Windows系统。
关键词:Andorid-x86;Windows;数据恢复;恢复系统;Wimlib
DOIDOI:10.11907/rjdk.161639
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2016)009006504
作者简介作者简介:陈一璋(1991-),男,北京人,北京工业大学计算机学院硕士研究生,研究方向为操作系统、计算机信息安全;王丹(1969-),女,辽宁沈阳人,博士,北京工业大学计算机学院教授、博士生导师,研究方向为操作系统、可信计算;陈渝(1972-),男,广东湛江人,博士,清华大学计算机科学与技术系副教授,研究方向为操作系统、计算机信息安全。
0引言
随着信息技术的快速发展,信息安全问题越来越受到广泛关注。据IDC统计,当前数据存储量正以每年超过50%的速度增长[12]。当遇错误操作、硬件故障、被黑客或病毒攻击等情况时,面临数据丢失的风险。
数据恢复在国外已经30余年的实践,仅北美地区拥有的数据修复公司便超过400家,其中包括Ontrack、CBL等知名公司。目前,中国数据恢复产业还处于发展阶段。据相关数据统计,中国电脑用户已经超过2亿,数据恢复市场潜力巨大。
针对Windows系统,目前已有一些数据恢复工具,如EasyRecover、Recover、Disk Recover、Wimlib等,其不足之处在于无法通过系统本身进行数据恢复,需要借助光盘、USB等相关存储工具。本文开发基于Android-x86平台的Windows恢复系统,可恢复用户备份的磁盘数据,将不能启动的操作系统恢复到正常状态。相关恢复镜像可以保存在andorid-x86系统中或者通过网络进行下载,Android-x86系统作为一个辅助系统,方便用户使用。
1国内外相关工作
数据恢复可分为硬件恢复和软件恢复两大类[3],如图1所示。
硬件恢复分为以下3种方式:固件修复、盘片读取以及硬件替代[4]。软件恢复包括系统级恢复和文件级恢复。系统级恢复指系统无法正常启动时,通过软件对系统进行修复,从而使系统恢复正常,恢复数据。文件级恢复只是恢复某个损坏的文件。本文恢复系统是一个系统级恢复软件。
常见的数据或系统恢复软件主要有:
(1)EasyRecovery[5]。EasyRecovery是由Ontrack公司研发的一款数据恢复工具,它通过模式识别的方式找回硬盘上不同位置的文件碎片,并进行整合。在内存中建立虚拟文件系统,列出所有文件目录。即使硬盘分区以及相关维护信息非常少,也可以高效恢复。
(2)FinalData[6]。FinalData可以运行在不同系统平台上,如Windows、Linux。其可以对数据、MBR、引导扇区等进行恢复,恢复完全删除的数据文件以及目录,还能对引导扇区中的内容以及通过快速格式化删除的数据内容进行恢复。
(3)WinHex[7]。WinHex是一款针对数据恢复的磁盘编辑器工具,可以修改Hex和ASCII码,还能对磁盘磁区进行编辑,对文件进行分析对比,可以作为一个手工修复数据的工具,在ZDNet Software Library上获得了五星的最高评价。
(4)DISM。DISM的全称是Deployment Image Service and Management Tool,是一款在Windows7和Windows Server 2008R2引入的工具,能够完成系统安装。它的特点在于可对镜像进行加载和卸载,在镜像中搜索已安装的设备驱动。
(5)ImageX。ImageX是一个命令行工具,通过它可以创建、修改以及使用Windows磁盘镜像(WIM格式)[8],它是一个免费的Windows自动安装集合。从Windows Vista开始,可以用来完成Windows安装,对磁盘分区进行映像捕获,并修改和使用磁盘映像,以快速部署Windows系统。它还支持一些新功能,如分离镜像文件以及通过最新的LZX压缩算法[9]完成WIM文件捕获。
总体来讲,上述这些工具都可以对数据或者系统进行恢复,但不足之处在于当系统无法正常启动时不能使用,需借助光盘、USB等存储工具。
双系统目前逐渐被人们所接受,即在一台计算机上安装不同的操作系统,当一个系统不能正常运行时,可以启动另一个系统。本文开发一个基于Android-x86的Windows恢复系统。Android是一个开放源代码的操作系统,而Android-x86是一个开源项目,在x86平台上可以使用Android操作系统。该操作系统基于安卓开源项目[10](Android Open Source Project ),并且修改一些组件来允许Android运行在x86的架构上,比如kernel和HALs层。目前,Andorid-x86已成为一个较为稳定的桌面操作系统。相关工具和技术如下:
(1)rEFInd。随着基于EFI或UEFI的电脑用户的增多,配置EFI boot loader的需求也越来越大,特别是在有多个操作系统的设备上,如何启动操作系统成为关键。EFI电脑的启动方式不同于传统的BIOS启动,启动方式更加灵活,并且从理论上要比BIOS启动容易配置。不足之处在于目前针对EFI的文档并不多,大多数文档还是以BIOS为主,使得启动基于EFI的系统相对较复杂。
rEFInd[11]是一个针对EFI或者UEFI启动平台的启动管理工具。当计算机第一次启动时,为用户呈现菜单选项选择操作系统。然而,rEFInd不是一个boot loader,也不作为程序加载操作系统内核,不影响它们的控制过程。目前,许多启动管理器同样是boot loader,使用户容易混淆。所有兼容EFI模式的操作系统都拥有自身的boot loader,所以rEFInd对用户没有太多限制。与传统的Grub不同,rEFInd将自动搜索磁盘上所有可启动的操作系统,而EFI的Grub程序只包含Fedora和Ubuntu,所以rEFInd比Grub更加灵活。此外,rEFInd本身更加美观,用户可以通过修改配置文件以及添加文件来定制化启动界面,通过图形化的方式选择需要启动的操作系统,如Windows、ubuntu、Android-x86等。
(2)wimlib。Windows Imaging Format(WIM)是微软开发的一种基于文件的磁盘镜像格式,被用于Windows Vista及后续版本Windows操作系统。和其它磁盘镜像文件格式一样,WIM文件中包含一组文件和附属的文件系统元数据。然而,与基于扇区格式不同(比如ISO或者VHD),在一个WIM文件中可以存储多个映像,并且通过压缩和单一实例的方法大大压缩了映像文件大小,被广泛使用在Windows系统上。
本文恢复系统使用wim文件作为恢复镜像,并且采用wimlib[12]恢复工具完成恢复。wimlib是一个开源并且跨平台的库,通过它可以对WIM文件进行创建、提取和修改。Wimlib采用XPRESS、LZX和LZMS压缩算法来创建WIM文件。Wimlib还能用来处理ESD文件,ESD文件使用solid模式LZMS压缩的WIM文件,通常比常规WIM文件更小。
wimlib为用户提供以下帮助:①在Windows或者UNIX-like系统上操作wim文件,从而实现诸如备份及使用wim文件;②允许用户在非Windows系统上对WIM文件进行读写操作;③开发人员可在非Windows操作系统,比如Linux上完成Windows操作系统开发;④备份、安装或者保存Windows操作系统。
恢复系统主要通过wimlib来实现对目标磁盘分区的恢复,采用wimapply命令来实现。由于Andorid-x86的库文件并不支持wimlib,本文采用静态编译方式,将所有库的内容以静态库的方式编译到wimlib-imagex中。
本文基于Android-x86系统的Windows恢复系统可以恢复用户备份的硬盘数据,恢复操作系统正常启动。相关恢复镜像可以保存在Andorid-x86系统中或者通过网络进行下载,Android-x86系统也可作为一个辅助系统,方便用户使用。本系统创新之处如下:
(1)将Android-x86与Windows在UEFI下进行双系统启动。使Android-x86系统与Windows系统分离,相关错误不会影响恢复系统的正常运行。
(2)针对Windows系统的恢复功能,可以在默认恢复系统盘或者其它数据硬盘准确恢复内容,有多个恢复镜像,供用户选择。
(3)提出了基于URL可配置的下载方案,实现相关功能。可以实现从OEM网站上获得指定镜像文件,实现镜像的网络获取,方便用户使用。
(4)提供基于镜像文件的验证方案。通过验证SHA1码对恢复文件的完整性和正确性进行验证。
2Windows恢复系统设计
结合对Windows恢复系统的需求分析,本文系统主要考虑以下几个要求:多系统启动模式、易操作性、安全性、完整性和可靠性。
2.1系统架构
本文系统总体框架如图2所示。通过启动管理器选择Android-x86进行启动,将该Android应用运行在Android-x86上。目的在于使恢复系统与Windows系统隔离,互不影响。在恢复系统中可以读出挂载的Windows硬盘信息,用户可明确选择内容。当没有可用的恢复镜像时,可以通过网络下载。当系统拥有镜像后进行SHA1码比对,从而保证镜像正确与安全。最后由恢复系统进行Windows系统硬盘恢复,提醒用户重启,完成系统恢复。
2.2恢复系统模块设计
2.2.1验证模块
验证模块主要验证wim文件完整性、正确性。通过一个配置文件完成比对,配置文件由url下载地址、目标wim恢复文件的位置、名称以及SHA1验证码组成。应用初始启动后,检查配置文件,若存在则继续后续操作,若不存在则自动生成指定内容。SHA1码校验亦称安全哈希算法,主要用于校验数据的完整性。在SHA1算法中,通过补位、补长度、常量、函数计算验证码。主要步骤如下:
(1)开启校验线程。
(2)从配置文件中获取信息,将wim恢复文件名以及SHA1码传到验证线程中。
(3)计算SHA1码并与配置文件中的SHA1进行比较,将结果送至主线程,由handler进行处理。
(4)校验正确,则继续进入恢复模块。
(5)若检验错误,则重新下载。
(6)校验模块结束。
由于SHA1计算工作量大,可开启新线程来完成验证功能,主要由SHA1函数完成恢复文件计算,验证完成后由handler处理结果,如成功则继续用户选择,若失败则重新下载。
2.2.2下载模块
本模块主要负责在没有恢复镜像的情况下,从配置的url中下载恢复镜像,并显示下载进度。下载url保存在配置文件中,下载由两个线程来完成,其中一个负责进度条处理,另一个负责下载过程处理,下载步骤如下:
(1)主线程检查是否成功连接网络,若顺利则继续,否则提示网络异常。
(2)启动更新UI线程。
(3)获取配置文件中的url以及目标文件名等信息。
(4)启动下载线程,完成目标url连接。
(5)循环将缓存区所有内容以每次1024字节写到文件中,并更新UI线程中的进度条。
(6)下载成功则继续,若失败则显示下载超时并取消下载,删除下载文件。
(7)下载结束,用户选择后续操作。
用户点击下载后,首先检查网络是否连接成功。本模块分为两个线程启动,首先启动更新UI线程,获取配置文件信息,并且启动一个新的下载线程完成下载。更新UI线程主要负责UI进度条更新以及将下载线程结果返回至UI线程。
2.2.3恢复模块
本模块主要通过恢复文件(WIM文件)对指定的磁盘分区进行恢复,执行磁盘分区、恢复镜像。恢复模块主要由以下3个部分组成:
(1)选择恢复镜像。验证完恢复文件的完整性后选择恢复镜像,本文通过wimlib中的info命令来完成相关操作,可以获取恢复文件的全部镜像信息,通过执行命令行语句,得到输出信息供用户选择。wimlib-imagex info命令主要用于显示WIM文件的镜像内容,系统提取其中镜像的个数、大小以及描述符等供用户选择。
(2)选择恢复分区。由于不需要对恢复分区进行挂载,只需要了解分区名、分区类型以及分区大小等信息,本文通过fidisk的Android-x86中现有命令来获取信息。
Android-x86自带fdisk命令,通过fdisk命令可以得到磁盘大小、设备号和盘符信息。在应用中调用shell命令完成操作,返回信息供用户进行磁盘分区选择。
用户只可选Windows系统分区,防止用户将重要分区进行误操作。
(3)完成恢复功能。选择恢复分区及恢复镜像后,提醒用户格式化磁盘,使用mkntfs命令将需要恢复的分区快速格式化。
利用wimlib中的apply实现恢复功能,首先给程序root权限,使用静态编译的wimlib,根据用户提供的设备号以及选择的恢复镜像实现系统恢复功能。
由于恢复时间较长,且任务比较复杂,本文使用异步类实现恢复。AsyncTask是Android提供的轻量级异步类,对线程间通讯作包装,后台线程与UI线程可以进行简易通讯。创建一个继承AsyncTask的MyTask类完成恢复,可以实现异步操作,执行过程不影响UI线程,通过接口及时获取进度,并将执行结果返给UI主线程。与一般handler相比较,其简单快捷,过程可控,更加轻量,不阻塞主线程(UI线程)。AsnycTask作为封装后的后台任务方便Android开发。在AsnycTask使用过程中,通过表1方法进行重写和使用。
恢复模块主要步骤如下:
step1:将WIM文件中的镜像信息提供给用户,包括镜像描述文件、镜像号等信息,供用户选择。
step2:用户选择指定镜像恢复。
step3:得到磁盘设备分区信息,并提供给用户,包括分区大小、描述符等信息。
step4:用户选择恢复分区,如选择符合要求则继续,如果出现异常则提示用户。
step5:提示用户格式化恢复磁盘分区,用户确认后将磁盘分区格式化。
step6:开始执行恢复功能。
step7:恢复功能完成,提示用户是否重启。
使用wimlib-imagex apply实现恢复功能,通过继承异步类完成核心恢复任务。
3系统测试
3.1测试环境
测试环境如表2所示。
3.2测试结果
通过在win7、win8、win10三个系统中进行测试,恢复测试结果如表3所示。
针对上述3个Windows系统,在目标测试机上使用Windows恢复系统进行恢复。结果表明,Windows恢复系统能够在此三个系统Windows系统上正常使用,并启动正常。运行系统如图3所示。
4结语
本文设计并实现的Windows恢复系统与传统恢复工
具的不同之处在于它是基于andorid-x86的Android应用来实现恢复功能,通过双系统启动的方式完成系统恢复。其可与Windows系统隔离,因而Windows系统上的故障不影响恢复系统。同时,Android-x86系统可作为一个辅助操作系统,在占用较少资源的情况下完成恢复,不需要其它媒介便可以直接恢复,用户使用较为方便。此外,恢复镜像制作简单,可以在网上下载恢复镜像,通过SHA1码进行分析,保证其完整性与可靠性。在Windows恢复系统中,目前主要针对整个磁盘分区进行恢复,后续研究可以指定目录文件进行恢复,使得恢复系统的功能更加强大。
图3开始恢复示意图
参考文献参考文献:
[1]王强.Windows平台下磁盘数据恢复技术的研究与实现[D].成都:四川师范大学,2008.
[2]周渝, 唯奕.大数据——企业运营中的新资本[J].信息与电脑, 2012(11):1921.
[3]文光斌.数据恢复技术的发展前景、技术层次及常用方法[J].网络安全技术与应用, 2005(5):7476.
[4]LIANG Z H, LUO J Z, LIANG Z Q.System Recovery Testing of Hardware Firewall[J].Procedia Engineering,2011,15:45744578.
[5]李军.计算机数据恢复技术应用探究[J].电子测试, 2014(16):7071.
[6]赵明.巧用FinalData恢复磁盘数据[J].Computer Knowledge and Technology,2010,6(17):48504851.
[7]SEY E.Tool review-WinHex[J].Digital Investigation, 2004, 1(2):114128.
[8]MILLER W.Inside the Windows Imaging Format[J].Technet Magazine, 2006(15):96102.
[9]RATHORE Y,AHIRWAR M K,PANDEY R.A Brief Study of Data Compression Algorithms[J].International Journal of Computer Science and Information Security,2013,11(10):86.
[10]THONGTANUNAM P,ANA E C C,YOSHIDA N, et al.Reviewer recommendation for peer review based on file path similarity:a case study of the android open source project[J].Technical Report of Ieice Kbse, 2013, 113:2529.
[11]HUEBNER E, BEM D, WEE C K.Data hiding in the NTFS file system[J].Digital Investigation, 2006, 3(4):211226.
责任编辑(责任编辑:陈福时)