最近碰到一个U盘的案例,发出来分享一下.
没有特殊说明,工具都使用DataExplore.
有个网友说他的U盘热拔后有个文件夹看不到了(FAT16,24M),我让他把这个U盘做成镜像文件,传过来后我用脚本搜索到U盘里分区的位置,然后用虚拟卷加载.加载后看不到文件夹,就做了卷分析,搜索到1000多个文件,导出的文件他说不正确,因此怀疑文件的簇链不连续,然后在程序里将文件的删除状态取消,导出时使用FAT就正确了.以下是操作的步骤和解析.
1. 将U盘做成镜像文件. 功能菜单->镜像. 在镜像对话框里 驱动器 hd1 ,开始扇区 0,扇区数目填了底下灰色的扇区总数窗口里的数字. 右边选镜像到文件,路径里填 c:\usb , 大小 640. 参数说明: hd1 表示磁盘1,在磁盘管理里面看到的,表示第2个磁盘; 开始扇区 0 表示从hd1驱动器的0扇区开始复制;扇区数目表示复制的数目; 大小 640 表示单个镜像文件640M,如果数据源大于这个数目,将分成多个文件(version>=1.77).
2.脚本搜索分区. 因为镜像时是以磁盘的方式进行的,分区在文件中的某个位置上,需要将它找到,这样可以用虚拟卷方式加载. 工具条上有个脚本按钮,点出来后在代码窗口里修改打开的磁盘b = DataExplore.OpenDisk("hd0");-->b = DataExplore.OpenDisk("c:\\usb"); 表示打开的是c盘根目录下的usb文件.注意要2个斜杠. 脚本修改好后按执行,得到输出信息是"开始扇区15, 55AA",表示15扇区可能是一个分区的开始扇区. 脚本是Javascript语言. 默认里的脚本是搜索0-100扇区里面是否有分区标志,分区标志55AA,并且每扇区字节数是512.
3.虚拟加载分区. 虚拟卷方式是指定程序在磁盘文件的某个扇区上以某个文件系统类型加载这个分区,用这种方式可以加载系统看不到的分区(比如分区表坏了,重分区多次等) .工具条上有个"数据"按钮,点出来后看到数据来源向导,选"虚拟卷",下一步后 驱动器 c:\usb, (这里是单个斜杠),开始扇区 15, 选FAT16,预读,得到的参数是正常的(每扇区字节数512,每簇扇区数4)然后按完成.
4.卷分析. 卷分析用来分析加载不上的文件,搜索残余的文件. 加载分区后在左树里看不到用户要的文件夹,所以需要做卷分析. 右键点中回收站节点,弹出菜单里有"卷分析"菜单.弹出的参数设置窗口使用默认的参数(搜索的开始簇号和结束簇号). 程序底下出现一个进度条,边上显示当前搜索到的文件数目(双击进度条可以停止分析)
5.导出文件. 卷分析后在回收站节点下有多个文件夹,点中文件夹在右边列表视图里显示当前在左树里点中的文件夹里的文件,其中有个 Folder 96 的文件夹里有用户需要恢复的文件,在列表视图里右键点中文件,弹出菜单里选导出,文件导出后打不开(DOC文件).分析用户丢失的情况后猜测是文件夹损坏,但文件不是删除的,在FAT里应该还是有簇链的,因为文件不能正常加载,故搜索到的文件都标志删除状态(打了红X),标志删除的文件在导出时是不读FAT的,当做文件连续存放处理,如果要把文件按FAT簇链导出,需要把文件的删除状态取消的.
6.修改文件的删除状态. 在列表视图里右键点中文件,弹出菜单里选属性,在属性窗口中勾掉"删除"前的勾勾,按确定,文件的删除状态就取消了,右键点中文件,导出,文件便恢复正确了.
此案例适用于FAT文件系统因文件夹损坏造成的文件丢失.文件的簇链其实还在FAT里的,只是因为父文件夹损坏了才无法正常使用.