上接(一)

硬盘构造及恢复方法

2.1 硬盘的结构
2.1.1 硬盘的物理结构
硬盘主要由盘片、磁头及定位驱动系统、主轴系统和控制电路四部分组成。
盘片:盘片由较轻质的金属或玻璃制成,表面再涂上一层磁性材料,它拥有最高精度的光滑表面。为了防止磁头和盘片刮伤,在盘片的表面覆盖了由真空沉积工艺生成的氧化铬或钴。盘片的光洁度极高,硬盘都是密封的,内部非常干净,哪怕是一丝肉眼看不见的灰尘也会给盘面带来致命的损伤。现在的盘片使用垂直记录技术,在一定的面积内比水平记录技术存储的数据多很多。目前的商用硬盘技术已经达到了单碟1TB,以希捷、日立、西部数据三巨头为主导。
磁头及定位驱动系统:磁头顾名思义就是对盘片数据进行读写,每个盘片有正反两面,每个面有一个磁头负责,磁头是硬盘中最昂贵最精密的部分。磁头安装在磁头支架上,它们像梳子的齿一样伸进各自负责的盘片间隔中。磁头支架在定位电机驱动下,可以使磁头在盘片上不同的地方来回移动。盘片在高速旋转时会带动盘表面的空气,空气作用在磁头上产生一个浮力使磁头与盘面保持一个极微小的距离,这样既可有效进行读写,也不会磨损盘面。
主轴系统:主轴系统就是主轴电机,由电机组成,驱动盘片高速旋转。主流磁盘转速有5400rpm、7200rpm。盘片转的越快,读取速度越快,但是更容易损坏,使用过程中尽量避免碰撞。
控制电路:在硬盘上的电路板及元件。主要控制数据的读写,磁头的定位等。

2.1.2 硬盘的逻辑结构
硬盘的盘片在逻辑上由柱面、磁道、扇区组成。
磁道(Track):硬盘在出厂前,厂家都会对硬盘进行低级格式化。低格就是在盘片上划分许多同心圆,这些同心圆叫做磁道,信息就存储在磁道,磁道之间是有间隔的。每个盘片有成千上万个磁道,为了便于管理,每个磁道都有一个编号,从外到内自0开始顺序编号。
扇区(Sector):每个磁道上又划分为很多段,每一段是一个扇区,像扇子一样的圆弧。一般每个磁道包含63个扇区。每个扇区也有自己的编号,从1到63。
柱面(Cylinder):指各个盘面上编号相同的磁道构成的整体。如有三个盘片,每个盘面上0号磁道构成的整体叫一个柱面。
盘片有编号,磁头也有逻辑编号,逻辑上按照从上到下自0开始依次编号。

2.1.3 硬盘的逻辑C/H/S 
硬盘是通过磁头、柱面、扇区进行寻址的,就是所谓的C/H/S。要从磁盘上定位一个数据,就要为这个数据编号,磁头号负责定位哪个盘面,柱面定位磁道,扇区定位对应的扇区,这样就可以唯一确定地址了。由于系统的限制,逻辑C/H/S的起始值为0/0/1,最大取值为1023/254/63,所以逻辑C/H/S能够管理的柱面、磁头、扇区分别为1024、255、63,这样就可以算出逻辑C/H/S能管理的扇区总数为1024*255*63=16450560,大约为8GB,这也是逻辑C/H/S能管理的最大空间。后文分析FAT32及NTFS文件系统会遇到C/H/S参数,但现在的系统对C/H/S参数已经是忽略了。

2.1.4 硬盘的LBA
LBA(Logic Block Address)即扇区逻辑块地址。由于C/H/S的限制,引入了LBA的概念。LBA把所有的物理扇区都按照某种规则看做是一线性编号的扇区,即从0到最大值,形成一条直线,这样使用唯一的编号就可以确定数据的物理扇区。LBA最初定义的是28位地址,只能管理137GB的硬盘,然而由于硬盘的容量增长到28位已经不能满足需求。T13组织提出的48位标准,使逻辑扇区地址达到了281474976710655,即144PB(1PB=1000 000GB)。现在的硬盘都是以LBA编址。

2.2 数据恢复方法
数据可能在多种情况下丢失,比如物理硬盘的故障、无可抗拒的自然灾害、病毒的损坏、黑客入侵、误操作等。根据不同的情况分为两种方法。

2.2.1 物理恢复
在硬盘出现物理故障情况,如磁头的损坏、磁组变形、盘片划伤、硬盘产生坏道、电机损坏、控制电路损坏、磁盘异响等情况下应该立即停止使用,防止数据的进一步丢失,这种情况下要对硬盘维修后再进行数据恢复。一般是进行开盘数据恢复,开盘就是在洁净度有保障的环境下打开硬盘外壳,对其盘腔内部进行操作。物理恢复对环境和技术的要求非常高,专业数据恢复公司都有洁净间,恢复的几率也比较大,但是费用昂贵。

2.2.2 逻辑恢复

逻辑恢复就是在没有出现物理故障,仅仅是数据的丢失。逻辑恢复可以通过软件的方式进行数据修复,整个过程不涉及硬件的维修。而导致数据丢失的原因往往是误删除,误格式化,误分区,病毒感染,黑客攻击恶意删除等。硬盘出现逻辑故障一般表现为:文件丢失、分区丢失、无法进入操作系统、无法读取文件等。造成逻辑数据丢失的原因是十分复杂的,一般的数据恢复软件只针对特定情况设计算法,所以恢复的效果是非常差的,要真正恢复只有人工分析数据。一般情况下,只要数据区没有被覆盖,数据的恢复效果是很理想的。

2.3 恢复前的准备工作
在恢复数据之前,对硬盘情况的了解是十分必要的,如果盲目操作只会造成数据彻底丢失。首先要了解检查是否有物理故障,然后对物理故障进行修复。之后要对源数据硬盘进行备份到另外一个硬盘上进行恢复,不在源盘上进行操作,防止数据的进一步丢失。恢复之前也可以进行硬盘的坏道检测,因为坏道很容易造成数据丢失。

2.4 坏道检测
硬盘坏道可以分为逻辑坏道和物理坏道。逻辑坏道是由于软件或使用不当造成文件系统的损坏,这种情况下重新格式化分区就可以解决问题。物理坏道是硬盘盘片磁介质出问题,造成某些扇区无法读写,这种坏道不能修复,只能使用软件屏蔽掉坏道。出现坏道的症状一般有系统无故死机、蓝屏,无法启动,读取文件时间久或者根本无法读取文件。
针对硬盘的坏道,编程实现了坏道检测。坏道检测原理根据扇区的读取时间判断,一般扇区读取时间是在3ms以内,一直到150ms都是正常情况,大于150ms就很危险了,很容易形成坏道,如果扇区读取失败就说明是坏道。只要一个扇区出现问题,整个磁道都不能使用了,所以叫坏道。
在windows系统中,有API函数读取文件 -- ReadFile,系统可以把物理硬盘当做一个文件来读取,所以能检测整个硬盘。算法为:使用CreateFile函数打开要检测的物理磁盘,然后获取当前的系统时间,使用ReadFile函数读取一个扇区,如果ReadFile 的返回值是错误,则可以判断整个扇区是出现坏道的,读取完后再获取当前系统时间,用后面的时间减去前面的时间得到读取整个扇区的时间,最后根据时间判断扇区的情况。关键代码如下:

2.5 磁盘克隆
为了防止进一步的数据丢失,首先要把数据复制到另外一个硬盘上再操作。磁盘克隆是基于整个硬盘的数据复制,把01比特按原样照搬,而不理会数据的意义。这区别于文件级的数据复制,文件的复制是基于有意义的文件系统数据,不会对MBR,DBR和一些隐藏的文件进行复制,所以磁盘的克隆是很有必要的。
磁盘克隆的原理也很简单。要复制的硬盘叫源盘,存放复制的数据是目的盘。算法:

首先使用ReadFile打开源盘和目的盘,源盘从0扇区开始读取,每读取一个扇区就按照扇区序号写入目的盘,读取源盘的同时也获取计算读取时间,发现读取失败的说明源盘有坏道,这时在目的盘的对应扇区使用全1数据填充,这样就可以最大程度保留源盘的数据,造成数据丢失的也是这个扇区而已,对其他扇区不会有影响。关键代码如下:

累了,更多详情,请看下回分解

数据恢复软件设计与实现(二)相关推荐

  1. 数据恢复软件设计与实现(一)

    去年的毕业设计搞了个数据恢复软件,花了很多时间,藏着太浪费,所以拿出来和大家分享 先来个自我介绍:数据恢复软件的功能一般,可以扫描NTFS和FAT32分区格式的删除的文件,甚至格式化过的也可以恢复,还 ...

  2. 跨平台的网络云盘软件设计实现【二】

    在我们做好软件的用例分析.语言的选择和基本的一个功能活动图后,我们便可以开始大致软件的设计. 在用例图中,我们看到有两个用例:一个是用户的配置.一个是系统的监控.但用例图中中还隐藏着一个功能,那就是同 ...

  3. JAVA 10.4 工资管理软件设计 TUT实验二

    2.工资管理软件设计(第2次实验,6学时) 某公司由6人组成,他们分别是: 其中,Sam是经理,每月除得到基本工资外,还获得$500.00的红利:Peter和Mary是合同工,每月拿基本工资:Clif ...

  4. 软件设计原则(二)单一职责原则 -Single Responsibility Principle

    SRP,Single Responsibility Principle: There should never be more than one reason for a class to chang ...

  5. 十大硬盘数据恢复软件简评(转自华军)

    电脑突然死机或者断电,硬盘数据丢失?U盘重要文件不小心删掉了? 电脑中毒,文件丢失或无法读取? 系统突然崩溃,重要文件丢失?使用计算机最怕的就是象以上这些突如其来的灾难性故障导致重要数据的丢失,误操作 ...

  6. 面向对象软件设计原则(一) —— 引子

    "面向对象软件设计"这个术语及其相关话题对于很多开发人员来说已经是耳熟能详了,甚至听腻了.但是,对不住各位,为了吸引眼球和引起"异性" 注意,本座还是落入俗套选 ...

  7. 10款数据恢复软件测评对比

    硬盘数据丢失!脑突然死机或者断电!U盘重要文件不小心删掉了! 电脑中毒,文件丢失或无法读取! 系统突然崩溃,重要文件丢失! 相信大家在使用电脑或其他移动存储设备的时候最不愿意遇到的莫过于上述几项,然而 ...

  8. 软件工程(三):软件设计

    三.软件设计 目录 三.软件设计 一.软件工程开发方法与软件设计 (一)功能分解法--传统开发方法,面向过程 (二)结构化方法--传统开发方法,面向过程 (三)面向对象方法 (四)面向对象的几个基本概 ...

  9. 由学习《软件设计重构》所想到的代码review(二)

    前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高 ...

最新文章

  1. FFmpeg通过摄像头实现对视频流进行解码并显示测试代码(旧接口)
  2. SMS主站点配置详细图解:Sms2003系列之二
  3. java mybatis拦截配置_SpringMvc拦截器配置_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
  4. 信息系统项目管理师-项目需求管理知识点
  5. DockingManager的使用入门
  6. Music Notes(前缀和+二分)
  7. C语言 __VA_ARGS__ - C语言零基础入门教程
  8. 当async/await遇上forEach
  9. Spring定时任务并行(异步)处理
  10. 学习Linux tar 命令:最简单也最困难
  11. 摄影爱好者的照片,怎样才能变收入?
  12. Black Hat USA 2020 大会主议题大盘点(上)
  13. md5加密算法使用流程
  14. C++中set用法详解
  15. 动手实践感受下企业微信的网页授权登录、扫码授权登录
  16. 三国群英传服务器维护是几点,20191112维护公告
  17. 批量提取PPT里面包含的图片教程
  18. 因特网中的域名服务器系统负责全网IP,因特网中的域名服务器系统负责全网IP地址的解析工作,它的好处是()...
  19. 聊一聊 MySQL 中的事务及其实现原理
  20. Eclipse运行tomcat出现错误“An incompatible version [1.1.33] of the APR based。。。 ”问题的解决

热门文章

  1. leaflet波纹点(leaflet篇.14)
  2. 腾讯云tcp考试多久出结果?腾讯云tcp考试考点和复习介绍
  3. 让别人快乐地捐钱:英国人的慈善教育
  4. < 在Vue中 el-popover + el-tiptap 实现 富文本框输入,表格点击展示 (富文本HTML标签渲染) >
  5. 创业公司的薪酬激励设计
  6. 输入框校验-vue页面中校验
  7. 对话机器人(六)——RASA:Actions
  8. 前后端分离项目,vue+uni-app+php+mysql教室预约小程序系统 开题报告
  9. 口袋服务器最新版,我的世界口袋版
  10. Python自动登录淘宝