如何在 Linux 上访问 hfs+ 文件系统的资源分支

如何在 Linux 上访问 hfs+ 文件系统的资源分支

我有一个从故障的 Mac 硬盘中恢复的 HFS+ 文件系统映像,并且可以将其回送安装到我的 Linux 机器上。我如何从 Linux 机器访问此文件系统中文件的资源分支?

(我没有容量可存储如此大图像的 Mac。)

答案1

添加/..namedfork/rsrc到文件名末尾以访问资源分支。'/rsrc' 在较旧的内核上有效。我不知道在哪里记录了这一点。

编辑:只是为了澄清我指的是命令行用法;例如cp somefile/rsrc destfile将 somefile 的资源分支复制到名为 destfile 的文件中。所有命令行函数都以这种方式工作。我还没有用任何图形化的东西测试过它。

'/rsrc' 机制存在于 2.xx 内核中,但后来被删除或更改。请参阅 https://evilpiepirate.org/git/linux-bcache.git/plain/fs/hfsplus/inode.c

*hfsplus_file_lookup 包含以下内容:

if (HFSPLUS_IS_RSRC(dir) || strcmp(dentry->d_name.name, "rsrc"))
        goto out;

它从未被记录下来,可能不适用于所有系统。自 OS X 以来,苹果已停止创建新的资源分支,但少数特定情况除外。不能保证这两种机制将来都会存在。

答案2

fs/hfsplus我认为使用默认内核驱动程序(在内核源中)不可能做到这一点。

我在 Linux 中安装了一个 HFS+ 卷,并且文件具有资源分叉。我尝试了常用的特殊文件名语法FILENAME/rsrcFILENAME/..namedfork/rsrc。前者曾经在 Mac OS 上工作,后者现在在 Mac OS 上工作,但都不适用于 Linux。它们返回错误ENOTDIR“不是目录”。我尝试对具有资源分叉但没有数据分叉的文件以及同时具有这两种文件进行此操作。

我查看了驱动程序源代码,没有发现任何迹象表明可以使用特殊文件名语法或调用显式访问资源分叉ioctl。驱动程序确实关注资源分叉,但目的只是为了在文件移动时将它们与文件的其余部分保持在一起,并在文件删除时删除它们。

我很想证明这一点是错误的,但我无法找到任何相反的信息。

答案3

这现在对你没有帮助,但为了以后参考,Apple 开发人员工具中有一个名为的实用程序,SplitForks它可以将带有资源分支的单个文件转换为两个文件。第二个隐藏文件已添加到原始文件名的前面。它采用 AppleDouble 格式,还包含 Finder 元数据,例如文件类型和创建者代码。这是用于以和等存档格式存储 Mac 特定数据以及使用进行传输的._相同格式。ziptarrsync

SplitForks可以对整个目录树进行分层处理,然后可以将其传输到非 Mac 文件系统而不会丢失数据。还有一个配套实用程序,称为,FixupResourceForks如果目录树稍后移动到另一台 Mac,它可以将拆分的文件重新组合在一起。

答案4

以下是一种方法:

  1. 使用以下命令从 MacBinary 或 BinHex 格式的磁盘映像中提取文件hfsutils

    1. 用于hmount <path to disk image> [partition number]附加到磁盘。
    2. 使用hlshcd <folder name>hcopy <file name> .获取文件。
    3. 用于humount从磁盘映像分离。
  2. 使用macunpack来自macutils(MacBinary)、hexbin来自macutils(BinHex)或unar(任一)将数据和资源分支分离为单独的文件。

至于从资源分支文件中获取单个资源,Debian 不再打包它,但似乎有一个名为的工具可以做到这一点源码您可以从源代码进行构建。

相关内容