【问题标题】:How does one map physical sectors of a disk to the files that contain them on an HFS+ volume on Mac OS X如何将磁盘的物理扇区映射到 Mac OS X 上 HFS+ 卷上包含它们的文件
【发布时间】:2010-11-25 22:43:51
【问题描述】:

我一直在使用dd_rescue 恢复硬盘,它为我提供了由于硬件错误而无法复制的所有设备扇区的列表。

我想获取该列表,并编写一个工具来提供包含这些坏扇区的所有文件,以便我可以删除它们。我不确定我可以使用哪些 API 来执行此操作 - 基本上我想获取磁盘上所有文件的列表以及每个文件在磁盘上占用的扇区范围的列表。

我的第一个猜测是我将遍历磁盘上的每个目录条目并检查文件是否与这些坏扇区中的一个重叠。也许有更好的方法。

【问题讨论】:

    标签: macos filesystems disk hard-drive hfs


    【解决方案1】:

    如果要将文件的数据位置映射到物理块(扇区),可以使用带有 F_LOG2PHYS 命令的 fcntl(2) 调用。并非所有文件系统都支持此命令,但 HFS+ 支持。只需使用 lseek 选择文件偏移量,您就可以从 F_LOG2PHYS 取回磁盘偏移量(它在 l2p_devoffset 字段的 struct log2phys 中返回)。有关详细信息,请参阅 fcntl.h。

    【讨论】:

      【解决方案2】:

      没有公开用于通过 HFS+ 文件系统进行 grubbing 的 API,但 Apple 提供了 source for the filesystem 作为 XNU 内核的一部分。另请查看hfsdebug 工具,它可能有助于理解 fs。

      【讨论】:

      • 感谢您的回复,格雷厄姆。我发现了 hfsdebug 的一个特性,它不仅可以帮助我理解文件系统,还可以帮助实现这个问题的解决方案。可以为 hfsdebug 编写一个 (osxbook.com/blog/2008/07/23/extending-hfsdebug "Filter")。它几乎是一种回调机制,将在 hfsdebug 迭代每个目录节点时被调用。我可以将文件范围占用的块与有问题的块进行比较。
      【解决方案3】:

      这是一个老问题,但由于它在搜索该主题时仍然是热门话题之一,因此对所有搜索过的人来说:

      由于 Mac OS X 10.6 fsck_hfs(8) 可以将物理扇区映射到文件(请参阅选项 -B)。使用注意事项:只有在实际执行了目录检查时,匹配才会成功。因此,您可能必须使用选项 -l 或 -f 强制检查。

      顺便说一句,hfsdebug 作为 PPC 二进制文件依赖于 Rosetta,因此不会在 Lion 或更高版本上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 2015-04-19
        • 1970-01-01
        • 2011-12-05
        相关资源
        最近更新 更多