如何根据扇区列表生成文件列表?

如何根据扇区列表生成文件列表?

我曾经遇到过硬盘故障,并设法使用 GNU 的 从磁盘(1TB)中恢复了一些数据ddrescue。磁盘的最后 800GB 完好无损,没有任何错误,但在前 200GB 中,整个区域分布着近 14000 个错误(坏块)。ddrescue创建一个描述坏块位置的日志文件。

ddrescue命令行参数:

ddrescue /dev/sdb /dev/sdd /mnt/sdc1/sdb.log -r -1 -f -d -v

日志文件如下所示:

#      pos        size  status
0x00000000  0x1C08CE00  +
0x1C08CE00  0x00000200  -
0x1C08D000  0x011E6800  +
0x1D273800  0x00000200  -
0x1D273A00  0x005EC000  +
0x1D85FA00  0x00000200  -
...         ...         ...

加号 (+) 表示连续的良好空间,减号 (-) 表示不可读空间;位置和大小以十六进制表示。删除以“+”结尾的行后,我有一个包含坏块位置的列表,但我需要一种方法将这些坏块与文件系统(顺便说一下,是 NTFS)上的文件关联起来。

我知道我可以用类似磁盘资源管理器手动执行此操作,但这将是地狱有 14000 个扇区。那么,有没有一种或多或少自动化且优雅的方式来做到这一点?

答案1

自从这个问题大获成功以来,我一直没有答案,如果有的话。但我继续研究,发现了一个微软实用程序,可以追溯到 1999 年,名为 nfi.exe,它是用于 Windows NT 4 和 2000 的 OEM 支持工具第 3 阶段服务版本 2。该实用程序完全满足了我的需求,接收一个扇区并返回一个文件。但它对单个扇区执行此操作,因此我必须创建一个脚本来自动化该过程。这是一个 Python (2.7+) 脚本,其工作方式如下:

它接收 ddrescue 日志文件作为输入,对其进行解析,为文件中的每个扇区调用 nfi.exe,并按字母顺序生成文件列表。

>sector_correlator.py -h

usage: sector_correlator.py [-h] [-v] [-n \path\to\nfi.exe] [-V] [-L]
                        logfile nt-device-path output file

Receives a list of sectors and returns a list of files which resides in them.

positional arguments:
  logfile              path to ddrescue's logfile.
  nt-device-path       NT-style path to physical device, like
                       \device\harddisk1\dr1
  output file          filelist output file name

optional arguments:
  -h, --help           show this help message and exit
  -v, --version        show program's version number and exit
  -n \path\to\nfi.exe  nfi.exe's path, if not speciified, assumes's it is in
                       the same path as the script
  -V                   enables verbose mode
  -L                   save nfi.exe's output log to nfi_raw.log

例子:

sector_correlator.py sdb.log \devices\harddisk0\dr0 filelist.txt

其中:sdb.log 是 ddrescue 的日志,

\device\harddisk0\dr0 是硬盘的 NT 样式路径(您可以使用名为程序运行对象和磁盘管理实用程序)WinObj 显示物理设备列表 在此处输入图片描述

filelist.txt 是您想要的文件列表。它看起来如下:

\Documents\Downloads\Evernote_4.5.1.5432.exe
\Documents\Downloads\Programs\Apophysis207SE.exe
\Documents\Downloads\Programs\GetGnuWin32-0.6.21.exe
\Documents\Downloads\Programs\mbam-setup.exe
\Documents\Downloads\Programs\msnbackup133.exe
\Documents\Downloads\Programs\x64Components_v254.exe

脚本上的其他参数是可选的,当您使用 -h 运行它时会对其进行解释。默认情况下,脚本假定 nfi.exe 位于同一目录中,如果不是,请使用 -n pathtonfi.exe。

最后,这里是脚本的链接:扇区相关器.py

它非常简陋并且没有错误处理功能,但是可以完成工作。

答案2

这更像是对答案 (#1) 的补充,基于我尝试检查故障驱动器。1) 您仍然可以获取 nfi.exe 并使用它(至少在 winxp 上)。您可以下载上面答案 #1 中链接的 MS 页面中列出的文件 oem3sr2.zip。

我发现,使用当前版本的 nfi.exe,您不需要挖掘驱动器路径。一个简单的驱动器号就可以了……例如“K:”

python sector_correlator.py badsectors.log k: badfiles.txt

但是(我擅长 perl,所以不要对我的 python 理解抱有太大期望),在我看来,该脚本每行仅检查一个与 '-' 匹配的块。因此,如果日志文件报告了 200 个连续的坏块(日志文件行的第二个数字),则该脚本尚未检查最后 199 个块是否存在不同的文件关联。

在 Linux 中你可以使用ddrescuelog -l- badsectors.log展开以显示所有坏块。不幸的是,我不明白为什么,Ubuntu 的 ddrescue 实现不包括 ddrescuelog(但从 debian 获取最新版本并编译和安装它相当容易,这是我见过的最简单的)。

答案3

我现在正在恢复一个坏磁盘,并将尝试以下操作:

http://sourceforge.net/projects/ddrutility/

...(从 2.1 版开始)包括 ddru_ntfsfindbad:

Ddru_ntfsfindbad 是一个用于 NTFS 分区的实用程序,用于查找 ddrescue 日志文件中哪些文件与坏扇区相关。

安装意味着从源代码进行编译,但是有了 Ubuntu 机器(VM),提供的说明使这一切变得简单。

相关内容