Linux 搜索整个硬盘十六进制字节中的字节字符串并列出数据所属的所有文件?

Linux 搜索整个硬盘十六进制字节中的字节字符串并列出数据所属的所有文件?

抱歉,标题不对。具体来说,我记得去年我试图修复硬盘损坏的数据时读过这篇文章。

我的 Windows XP 硬盘发生磁头损坏,导致某些文件出现无法恢复的坏扇区。我正在将该硬盘克隆到副本硬盘,并使用很久以前的备份替换损坏的文件。

我已经做的是...我从 Ultimate Boot CD 启动 Parted Magic,并使用 Linux 的 ddrescue 工具将损坏的驱动器克隆到磁盘映像中,然后使用 logfile.txt 将 DEADBEEF 写入它无法读取/克隆到磁盘映像文件的所有扇区并制作完整的映像。然后,我相信我使用了 Linux grep 命令之一,尝试在整个文件系统中搜索字符串 DEADBEEF 并列出包含该字符串的所有文件,但由于一些奇怪的错误,它在搜索几个小时后退出时遇到了一些麻烦。

我还手动修复了 $MFT(主文件表)的错误,除了不重要的单个图片文件的数据之外的所有错误,以便我可以正确扫描整个文件系统并查看所有文件(有些文件由于损坏而未显示)。

我需要做的是这样的:

我想彻底扫描整个驱动器直至字节级别(就像在十六进制编辑器中查看磁盘映像一样),每个扇区,查找字符串 DEADBEEF,然后让它根据文件系统列出用 DEADBEEF 覆盖的坏扇区所属的每个文件。我记得在某个地方读到过这个,能够扫描驱动器,一旦找到字符串,它就会列出 DEADBEEF 字符串的偏移量/位置/扇区以及哪个文件拥有该扇区中的数据。或者每个坏扇区并列出坏扇区所属的文件。

ddrescue 日志文件列出了被检测为不可读的每个扇区(大约 1000 个 200 字节扇区),其中写入了 DEADBEEF。如果我知道哪些文件拥有这些坏扇区,我可以使用我的旧备份替换它们。

在你问之前,我不能只使用旧备份,因为它已经有 3 年的历史了。旧备份实际上是这台电脑的原始驱动器,我将其克隆到我试图挽救的驱动器上。硬盘崩溃造成的大多数坏扇区都位于驱动器的一部分,该部分仅包含原始驱动器中的文件。我可以轻松地将这些文件从原始驱动器复制到新驱动器以修复所有 DEADBEEF 坏扇区,但我需要知道这些坏扇区所属的每个文件是什么。

再次,我记得读过一些关于扫描驱动器的所有扇区并列出某个扇区所属的任何文件的内容。那么我该如何从 Parted Magic 执行此操作?我必须将其安装在那里,以便将其安装为只读。

答案1

你可以像钢铁司机说并使用ddrutility

它似乎不在 Ubuntu 存储库中,但它的主页是https://sourceforge.net/projects/ddruility/
具体使用它的工具ddru_findbad
这是它的一个剪辑维基页面

ddru_findbad
它是一个 bash 脚本,会尝试查找 ddrescue 日志文件中与坏扇区相关的文件。
它的功能依赖于第三方实用程序。它可能无法在所有系统上运行。它可能会很慢,如果列表中有很多坏扇区,它可能会非常慢甚至无法使用(它在错误大小较大的情况下无法正常工作)。


我很想忘记扇区号,只需挂载克隆的映像并在 Ubuntu(或 Xubuntu、Lubuntu 或 Debian,大多数 Linux)中使用 find、xargs 和 grep 在所有文件中搜索“DEADBEEF”。

无论尝试是否更容易或更快ddru_findbad可能取决于您的磁盘映像有多大和多快。

find /mnt/x -type f -print0 | xargs -0 grep --files-with-matches "DEADBEEF" >> list

映像安装到的位置/mnt/x。然后文件列表包含所有匹配的文件名。任何具有 DEADBEEF 的可用空间都将被忽略。

相关内容