Jonathan Gilbert Asked: 2024-12-07 21:08:40 +0800 CST2024-12-07 21:08:40 +0800 CST 2024-12-07 21:08:40 +0800 CST 列出与 exFAT 卷上的文件关联的扇区 772 我有一个设备出现故障。使用ddrescue,我已恢复了 83 个区域中除约 500 KB 之外的所有数据。映射文件告诉我每个丢失区域的原始偏移量和长度。我想找出受影响的文件。如何获取与 exFAT 卷上的文件关联的物理扇区偏移量列表? exfat 2 个回答 Voted Best Answer Jonathan Gilbert 2024-12-07T23:08:39+08:002024-12-07T23:08:39+08:00 我最终编写了自己的实用程序。我找不到任何预先存在的东西。它是用 C# 针对 .NET 8+ 编写的,源代码在这里: https://github.com/logiclrd/FindAffectedFilesExfat mkay 2024-12-10T05:57:18+08:002024-12-10T05:57:18+08:00 就付出的努力而言,我认为有比问题标题中建议的更好的方法来解决核心问题(列出卷的扇区并尝试确定每个扇区属于哪个文件)。核心问题似乎如下: 我的设备出现故障。 [...] 我想找出哪些文件受到了影响。 如果您只想获取受设备故障影响的文件列表,则无需收集设备上文件位置的扇区映射。由于您已将故障驱动器的内容映像到另一台设备或映像文件,并保留了在此ddrescue过程中生成的映射文件,因此您可以使用的填充模式ddrescue,用故障磁盘上任何文件中都没有出现的字符串标记映像上所有未恢复的扇区,然后将映像安装为文件系统并grep -r -l 'your_unique_marker_string'对其进行简单覆盖。这将为您提供损坏文件的干净列表,而不会提供任何其他内容;由于实际的文件搜索是在文件系统级别进行的,因此任何不对应于任何文件的未恢复扇区都会被方便地忽略,您无需付出任何努力。 要ddrescue在此模式下调用,您可以执行以下操作: ddrescue --fill-mode=l- marker_string.txt image_file.img map_file.map 其中marker_string.txt,文件包含要用来填充未恢复扇区的唯一字符串。请注意,您不能直接在命令行中指定字符串。 该--fill-mode选项将要填充的扇区的状态字符作为参数,如映射文件中所示。如果映射文件包含除+(成功读取)和-(已知坏扇区)以外的状态的块,您需要将这些块添加到填充模式列表中(当然不是+!)。 l该选项参数中的字母--fill-mode输出每个标记扇区的开头的位置数据(扇区号)。它是可选的,但几乎没有理由忽略它;例如,您可以使用位置数据构建域映射文件,以将进一步的救援尝试限制在包含文件数据的扇区中,如果故障驱动器有大量未使用的空间现在显示为坏扇区,这可能会很有用。 我发现这种方法最有效,并且已经多次使用,效果很好。它有一个显著的优势,即它独立于所使用的文件系统。它确实依赖于文件系统是否足够健康,能够被挂载(即,足够的文件系统结构已被挽救);我的经验来自 NTFS,我发现 Windows 的本机修复工具CHKDSK在将其修复为可挂载状态方面非常有效。我希望任何现代日志文件系统及其本机修复工具都能产生同样的结果。
我最终编写了自己的实用程序。我找不到任何预先存在的东西。它是用 C# 针对 .NET 8+ 编写的,源代码在这里:
https://github.com/logiclrd/FindAffectedFilesExfat
就付出的努力而言,我认为有比问题标题中建议的更好的方法来解决核心问题(列出卷的扇区并尝试确定每个扇区属于哪个文件)。核心问题似乎如下:
如果您只想获取受设备故障影响的文件列表,则无需收集设备上文件位置的扇区映射。由于您已将故障驱动器的内容映像到另一台设备或映像文件,并保留了在此
ddrescue
过程中生成的映射文件,因此您可以使用的填充模式ddrescue
,用故障磁盘上任何文件中都没有出现的字符串标记映像上所有未恢复的扇区,然后将映像安装为文件系统并grep -r -l 'your_unique_marker_string'
对其进行简单覆盖。这将为您提供损坏文件的干净列表,而不会提供任何其他内容;由于实际的文件搜索是在文件系统级别进行的,因此任何不对应于任何文件的未恢复扇区都会被方便地忽略,您无需付出任何努力。要
ddrescue
在此模式下调用,您可以执行以下操作:其中
marker_string.txt
,文件包含要用来填充未恢复扇区的唯一字符串。请注意,您不能直接在命令行中指定字符串。该
--fill-mode
选项将要填充的扇区的状态字符作为参数,如映射文件中所示。如果映射文件包含除+
(成功读取)和-
(已知坏扇区)以外的状态的块,您需要将这些块添加到填充模式列表中(当然不是+
!)。l
该选项参数中的字母--fill-mode
输出每个标记扇区的开头的位置数据(扇区号)。它是可选的,但几乎没有理由忽略它;例如,您可以使用位置数据构建域映射文件,以将进一步的救援尝试限制在包含文件数据的扇区中,如果故障驱动器有大量未使用的空间现在显示为坏扇区,这可能会很有用。我发现这种方法最有效,并且已经多次使用,效果很好。它有一个显著的优势,即它独立于所使用的文件系统。它确实依赖于文件系统是否足够健康,能够被挂载(即,足够的文件系统结构已被挽救);我的经验来自 NTFS,我发现 Windows 的本机修复工具
CHKDSK
在将其修复为可挂载状态方面非常有效。我希望任何现代日志文件系统及其本机修复工具都能产生同样的结果。