APFS 实际上支持命名分叉还是仅支持资源分叉和扩展属性?

hip*_*ail 7 filesystems macos alternate-data-stream apfs file-forks

从版本 8.1 到 Mountain Lion (10.8),操作系统支持一个名为“ Named Forks ”的概念。命名分叉相当于 Windows 中的“备用数据流”。

现在,互联网上对命名分叉资源分叉以及命名分叉扩展属性之间存在大量混淆。这是显示它们都是独立概念的时间表:

  • 1984 1.0:MFS:数据分叉+资源分叉
  • 1985 2.1:HFS:仍然只有数据+资源分叉
  • 1988 8.1:HFS+:添加了对命名叉的支持
  • 2005 10.4 Tiger:HFS+:添加扩展属性
  • 2013 10.9 Mavericks:HFS+:已弃用 Named Forks
  • 2017 10.13 High Sierra:APFS
  1. 所有操作系统版本和所有 Apple 文件系统上始终存在数据分叉和资源分叉。如今,操作系统似乎唯一使用资源分叉的地方是为文件夹提供自定义图标。这将创建一个名为 的文件,该文件Icon\r带有零长度数据分叉和资源分叉中的图像数据。文件名包含实际的回车符!

  2. 在引入扩展属性之前,命名分叉已得到支持 7 年。

  3. HFS+ 绝对支持命名分叉和扩展属性 8 年,尽管我不知道一个文件是否可以同时拥有这两种属性,或者它们是否与 Mavericks 之前的命名分叉和 Mavericks 之后的扩展属性相同。

  4. 命名分叉在 APFS 推出前 4 年就已被弃用。

命名叉子从来没有被广泛使用过。我编写了代码来尝试调用FSCreateFork文件和目录。无论是在 HFS+ 还是 APFS 卷上,无论我在 Big Sur 还是 Sierra 下运行它,它总是会失败并出现错误 -1402“Fork name 参数错误”。我无法访问其他操作系统版本。

所以由于我找不到测试的方法,而且网上的信息也很混乱,所以我无法谷歌它。

这里有专家知道 APFS 是否支持命名分叉吗?

Mic*_*rke 7

快速测试表明,资源分叉可以与 APFS 上的 Big Sur 一起使用,但任意命名的分叉似乎不能:

$; echo "数据叉" > test.txt
$; echo "资源叉" > test.txt/..namedfork/rsrc
$; cat test.txt
数据 fork
$; cat test.txt/..namedfork/rsrc
资源 fork
$; echo "resource fork" > test.txt/..namedfork/other
-bash: test.txt/..namedfork/other: 不是目录
$;

更重要的是,Apple 文件系统参考描述了 APFS 的内部结构,并详细介绍了两个 inode 标志INODE_HAS_RSRC_FORKINODE_NO_RSRC_FORK。没有提及任何其他类型的分叉或分叉的命名,因此我认为我们可以相当有把握地说 APFS 上不存在命名分叉。