Windows系统下磁盘结构的恢复方法-阿里云开发者社区

开发者社区> 江冉> 正文

Windows系统下磁盘结构的恢复方法

简介: Windows系统下磁盘结构层面的数据恢复是一类很有趣的问题,处理这类问题的效果是非常明显,往往会给用户比较神奇的感觉。这次我们就结合实例来谈谈这类问题的处理方法与技巧。首先我们来了解一下磁盘分区的大致结构:   上图是磁盘大致的分区结构。
+关注继续查看

Windows系统下磁盘结构层面的数据恢复是一类很有趣的问题,处理这类问题的效果是非常明显,往往会给用户比较神奇的感觉。这次我们就结合实例来谈谈这类问题的处理方法与技巧。首先我们来了解一下磁盘分区的大致结构:

 

上图是磁盘大致的分区结构。在一块磁盘的扇区0 - 即第一个扇区会包含主引导记录(MBR - Master Boot Record),实际就是嵌入磁盘的一段代码,主要负责在启动过程引导系统找到正确的分区继续启动流程,紧接着主引导记录就是分区表,其中包含了每个分区的起始位置和长度信息,以及其他类似文件系统类型的信息。分区表指明了每个分区在磁盘上的位置,因此系统在我们挂载磁盘之后可以通过分区表来找到每一个分区,并且通过文件系统的类型在加载每一个分区。

当然实际的分区表结构可能会更加复杂一些,比如会有扩展分区的类型,以此来支持多于四个分区的情况。另外Windows系统还支持动态磁盘的类型,有别于以上讨论的基本磁盘,动态磁盘将分区表的信息存放在磁盘尾部大约1MB的空间之上,这些我们会在以后慢慢讨论,本文将主要针对基本磁盘和少于四个分区的情况。

然后是需要给大家介绍一下分区恢复的工具dskprobe,该工具包含在Windows Support Tools当中,大家可以从微软官网上下载并解压:https://www.microsoft.com/en-us/download/details.aspx?id=18546。 该工具可以帮我们显示并修改磁盘扇区中的原始数据。当然也可以有一些简单的解析功能方便我们识别分区结构的信息。

接下去就是磁盘结构恢复的具体方法了,掌握这类问题处理方法的最好方式就是实战,因此我们来举一个实例案例,给大家一个直观印象。首先问题现象自然是:用户发现磁盘分区丢失,数据无法访问。我们的任务就是尝试将分区恢复回来。

我们首先来查看磁盘扇区0的信息,因为其中包含了分区表信息,是磁盘结构的关键信息。方法是打开dskprobe,选择Drives->Physical Drive,会列出所有的磁盘,双击出现问题的磁盘,选择Set Active单击OK即可打开对应的磁盘,注意此时我们可以保留Read Only的选项,因为在这个阶段我们需要首先查看磁盘的损坏情况,确定修复方案之后我们才会真正需要修改磁盘信息。

打开磁盘之后我们选择Sectors->Read,输出需要读取的扇区号和需要读取的长度即可,这里由于我们需要查看扇区0的信息,自然输入0和1(长度)即可。此时显示的是原数据,可以选择View->Partition Table,可以将分区表的信息解析出来:

我们可以观察一下这些信息,除了一些通用信息外,关键信息有如下几条:

  1. Relative Sector - 分区开始的位置
  2. Total Sector - 分区的长度,以扇区为单位
  3. System ID - 分区的文件系统类型

此时如果我们点击Relative Sector旁边的Go,dskprobe会帮助我们直接跳转到对应的扇区,这个扇区就是分区的第一个扇区,我们称之为分区的引导扇区(Boot Sector),其中会包含关于本分区的文件系统层面的类型,当然不同的文件系统引导扇区的结构也是不同的,所幸的是Windows系统上90%是NTFS,我们可以选择View->NTFS BootSector来解析NTFS的引导扇区,我们可以发现主要数据如下:

  1. Total Sectors - 分区长度,以扇区为单位
  2. Clusters to MFT - 文件系统元数据的存在位置
  3. Clusters to MFT mirr - 文件系统元数据镜像的存在位置
  4. Bytes per sector - 每个扇区的大小,以字节为单位
  5. Sectors per cluster - 每个簇的大小,以扇区为单位

我们发现这些关键性信息在这块磁盘上基本为0,因此可以判断该问题是由于引导扇区损坏导致的。那么怎样恢复引导扇区呢?理论上所有这些信息都是可以重构的,但是我们有一个相对简单的方法:在分区的底部一般会存有一个引导扇区的备份,因此我们可以利用这个备份来做恢复。方法如下:

注意:在做如下操作之前,强烈建议首先做一个磁盘快照,确保数据可以复原。

1. 首先我们搜索分区底部,寻找NTFS引导扇区:选择菜单Tools->Search Sectors,在offset里面填入3,在Enter characters to search for中填入NTFS进行搜索,这个动作的含义是在所有的扇区中判断是否在偏移量为3的位置有一个NTFS的字符串,如果是很有可能这个扇区就是引导扇区。当然大家也可以调整搜索的起始位置来提高搜索的效率。

2. 找到对应的扇区后就可以再次解析原始数据,再这个例子中我们可以看到备份的引导扇区在扇区是81922047,通过选择View->NTFS BootSector可以看所有的信息都在:

3. 此时我们需要选择File->Save As将其存成文件。

4. 选择Drives->Physical Drive,取消Read Only的勾选,点击Set Active,此时我们已经可以对磁盘进行写操作了。

5. 关键步骤: 我们选择File->Open打开刚才存取的文件,选择Sectors->Write,在Starting sector to write data输入2048 (就是损坏的引导扇区的位置),选择write it写入。注意在操作之前还是建议通过File->Save在备份一下被覆盖的扇区,以防万一。

此时我们回到磁盘管理器,可以发现分区已经恢复,如果分区其他部分没有损坏的话,我们就可以看到分区里的数据了。


这里我们需要注意:分区恢复的操作设计到数据,所以快照备份是必要的。另外操作时务必小心。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[20170105]关于使用datafilecopy恢复.txt
[20170105]关于使用datafilecopy恢复.txt --如果指定恢复数据文件是从datafilecopy,必须加括号,写一个例子说明: 1.环境: SYS@book> @ &r/ver1 PORT_STRING             ...
781 0
win9x_win2k下对物理磁盘的操作
<br>void CReadSectorDlg::OnReadButton() <br>{<br><span style="white-space:pre"> </span>UpdateData (TRUE) ;<br><span style="white-space:pre"> </span>CFile m_Sector_file ;<br><span style="white-space:
853 0
MySQL · TokuDB · 日志子系统和崩溃恢复过程
TokuDB日志子系统 MySQL重启后自动加载InnoDB和其他的动态plugin,包括TokuDB。每一plugin在注册的时候指定init和deinit回调函数。TokuDB的init/deinit函数分别是tokudb_init_func和tokudb_done_func。 MySQL重
1449 0
如何恢复windows的exe文件的默认打开方式
事情由来: 有一次在用一个播放器选择打开视频文件的时候,意外的手贱点击打来了 exe 文件,之后戏剧性的恶心开始了,首先当然是打开失败,接着整个桌面的 exe 文件全部被替换成那个播放器的图标,然后所有的 exe 程序全部打不开了,全部被关连成用播放器打开的模式。
1048 0
原win7系统迁移到SSD固态硬盘
应用场景 原先使用的电脑,用起来越来越慢,跟不上速度,买了一块120G的SSD固态硬盘,把原系统迁移到固态硬盘上,提升效率,加快开机速度等。
1141 0
[20161220]rman恢复时间点的疑问.txt
[20161220]rman恢复时间点的疑问.txt --昨天在恢复时遇到缺少归档的问题,自己开始感觉奇怪,做一点分析记录. RMAN> list backupset summary ; List of Backups =============== ...
842 0
+关注
江冉
本人在阿里云技术中台工作,有多年的系统和应用调试的经验。希望能和大家多多分享源码和汇编调试的技巧。
9
文章
0
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载