手工恢复U盘(闪存)数据一例

[复制链接]

该用户从未签到

40

主题

175

回帖

501

积分

[INTOHARD]连长

Rank: 4

积分
501
发表于 2007-7-26 22:10:34 | 显示全部楼层 |阅读模式
u盘(128M,实际上是125M)在热拔插的时候数据丢失,无奈之下,就把u盘重新格式化了,然后用数据恢复工具(我不记得他用什么工具了)恢复以后却发现没有一个文件可以用。

    u盘以前和现在都是fat16格式的,重点恢复的是里边的word文档。他用硬盘26传给我一个数据恢复软件恢复后的文件,我看了一下。大小上了M单位。用winhex打开文件一看,数据杂乱无章,而且,好多word文档应该有的标志都没有。我的第一感觉是,他的word文档可能比较大,可能文档中夹带图片、大表格等占空间的东西,以至于保存文件是文件并未联系存储。而格式化后,很自然的,分区fat表丢失了。这时候的数据恢复是很艰难的。

    原来我的计划是针对簇链的丢失来制定的。必须面对整个分区,所以我让他把整个U盘的数据用winhex备份后传给我。我们的网速都有限,也感谢这位网友的信任。花了可能1个左右小时数据才过来。
  数据过来后,我大体看了一下数据偏移在一扇区的dbr数据,现在的分区结构是fat16,簇大小是2kB,容量125M,fat表所占扇区数目为250个,1个保留扇区,两份FAT表。这些数据都一切正常。如下图

1.gif

  接着我在u盘的数据文件中用winhex查找“.”和“..”目录项,以此计算格式化前的u盘的参数。不到一秒就在文件的前边找到了一个目录项。目录项中的“.”所在的位置清楚地写明了他自身所处的簇的顺序号。如下图:

2.gif

  这里的“.”目录所占的簇号位2(fat16分区通常的第一个簇)。
  继续搜索下一个目录簇。找到了,如下图:

3.gif

  这里的偏移是1C8000H,簇的编号是0x48簇,而上边第2簇的偏移是44000H,计算一下:
  1. (1C8000H-44000H)/(48H-2H)=4000H
复制代码
天!他格式化之前簇的大小竟然是4000H=16kb.接下来我又验证了几个目录项,的确原来簇的大小是16k,怪不得他格式化以后用数据恢复软件找回的数据那么大,原来是数据恢复软件搞错了簇的大小。

  知道了就好办了,我在我的磁盘上分了一个fat16的分区,分的时候用win2003的磁盘管理器分成了簇大小为16K,以便于对应。其实分多大簇的分区,或者分成fat32都可以,只要简单的改动就可以移植我们的数据的。但终究不如直接分出来方便。

  分好区以后,找到新分区的第2簇地址。将网友传过来的数据文件从偏移44000H处开始选到结束,复制到新分区的第2簇地址,然后用数据恢复软件,数据就都出来了,毕竟word文档对于16k的簇大小,大多数还是连续的。

   后记:可能有的数据恢复软件不设置一下直接就可以恢复的(我不知道,但这是个很容易实现的功能)。但手动作毕竟不同,心里踏实、放心得很,工具只不过是利用它的运算快,而不是他的智能。当然也希望能有我们自己的工具来配合修复工作。努力中。。。
  • TA的每日心情
    开心
    2012-4-25 18:36
  • 签到天数: 1 天

    [LV.1]布衣百姓

    200

    主题

    862

    回帖

    2601

    积分

    Intohard Team

    づ甜甜橙子ぜ

    Rank: 7Rank: 7Rank: 7

    积分
    2601
    发表于 2007-7-26 22:50:40 | 显示全部楼层
    tbsh07您在教程区的发的第一篇文章
    我来支持你 有事情还是pm沟通

    该用户从未签到

    0

    主题

    11

    回帖

    19

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    19
    发表于 2007-7-27 17:13:05 | 显示全部楼层
    高人,思路明了了。

    该用户从未签到

    45

    主题

    602

    回帖

    1271

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1271
    发表于 2007-7-28 08:16:32 | 显示全部楼层
    高手在这啊..支持 [s:205]
  • TA的每日心情
    奋斗
    2012-4-26 09:09
  • 签到天数: 1 天

    [LV.1]布衣百姓

    63

    主题

    1842

    回帖

    2339

    积分

    [INTOHARD]营长

    金牌会员

    Rank: 6Rank: 6

    积分
    2339
    QQ
    发表于 2007-7-28 13:31:43 | 显示全部楼层
    经验就是精华呀.................... [s:189] [s:189]

    该用户从未签到

    6

    主题

    47

    回帖

    37

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    37
    发表于 2007-7-29 09:44:57 | 显示全部楼层
    造成数据错误的主要原因就是现在的错误DBR在作怪。
    直接在DBR中把簇大小直接改成16k,然后用数据恢复软件扫描就可以出来。
    或者直接把DBR清掉,用软件扫描也可以。

    该用户从未签到

    0

    主题

    92

    回帖

    65

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    65
    发表于 2007-7-29 10:01:56 | 显示全部楼层
    支持一下,思路很清晰 [s:208]

    该用户从未签到

    0

    主题

    52

    回帖

    87

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    87
    发表于 2007-7-29 22:40:50 | 显示全部楼层
    虽然看过一遍,记不住也不太懂,但我会仔细研究的

    该用户从未签到

    6

    主题

    97

    回帖

    174

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    174
    发表于 2007-7-30 19:16:00 | 显示全部楼层
    高人,思路明了了

    该用户从未签到

    0

    主题

    18

    回帖

    25

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    25
    发表于 2007-7-31 17:05:16 | 显示全部楼层
    不错,,
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表