元数据混乱 命名叉| 扩展属性| 资源叉— HFS +


10

我认为散布在网上的所有这四个项目之间的关系存在一些普遍的困惑。我想弄清楚这一点。

  1. 评为叉子一样的扩展属性?如果没有,扩展属性是什么?
  2. 资源派生仍然实现叉子或作为扩展属性?如果以其他方式实施,那又如何?
  3. 与文件一起存储的元数据(创建者,修改日期...)与所提到的其他三个之间在术语上是否存在任何关系或重叠。一个例子就是扩展属性,就是存储在文件中的额外元数据对(键+值)

任何能阐明所有这四个因素如何相互联系的答案,尤其是关于三个问题的答案,将不胜感激,并且有助于解决我认为在不同资源上发生的争议。


要了解HFS PlusfileXray用户指南和参考(PDF,1.8 MB,173页)非常有用。我是fileXray的用户。另外:技术说明TN1150:HFS Plus卷格式是Apple 淘汰的旧版,但对于许多用途仍然有用。
Graham Perrin 2012年

Answers:


5

这些概念之间的关系很复杂,并且随着时间的推移而发生了变化,这引起了混乱。在当前系统中,命名派生和扩展属性之间的区别在很大程度上是学术上的。

对于扩展属性,实际数据存储在属性数据记录中。

对于派生,存储的是包含数据的磁盘分配块的列表。资源派生仍然是派生。

基本文件系统元数据存储在文件系统记录本身的专用元素中,与属性和命名派生引用无关。


1
但是扩展属性实际上是作为其自己的分支存储的吗,还是存在扩展属性的分支?在最新版本的OSX中有什么关系?
rubixibuc 2012年

1
我不明白,当您说属性时,您的意思是“扩展属性”。如果是这样,属性记录保存在哪里。它是作为文件系统结构HFS +的一部分存储还是存储在某种数据库中?请尽可能回复第一条评论。
rubixibuc 2012年

2
抱歉。我来这里不是很频繁,也没有看到您的后续问题,直到我来这里寻找其他东西。扩展属性是命名的fork。我使用属性作为“扩展属性”的简写。属性记录保存在文件系统的私有部分(称为属性树)中。您可以将其视为数据库的一种形式。每个属性的数据可能在树中也可能不在树中,具体取决于它的大小。
GregW 2012年

“…… 文件系统元数据存储在文件系统记录的专用元素中……” –相反,我可能会说“…… 文件元数据存储在文件的记录的专用元素中……”
Graham Perrin

可能没有什么com.apple.FinderInfo可能显示为扩展属性,而扩展查找器信息(通常是date_addedextended_flags加上三个保留字段)不是扩展属性。
Graham Perrin

2

我不是这方面的专家,但是我已经阅读了一些尝试以了解发生了什么。

我会说:“混乱源于以下事实:

  • 这些概念之间的关系很复杂,
  • 随着时间的推移而改变,
  • 苹果公司已经实现了程序级别的API和诸如ls或cp之类的工具,从而隐藏了概念之间的许多差异。”

AIUI,HFS +目录文件包含目录文件记录(以及其他内容)。目录文件记录包含有关文件的常规信息,例如创建日期,访问日期等。目录文件记录还包含两个结构,这些结构提供有关数据分支和资源分支的位置和大小的信息。

AIUI,HFS +还具有(从Wikipedia HFS +复制而来的)“属性文件[它是HFS Plus中的新B树,在HFS中没有相应的结构。属性文件可以存储3种不同类型的4 KB记录:内联数据属性记录,Fork数据属性记录和扩展属性记录。内联数据属性记录存储可以容纳在记录本身内的小属性。ForkData Attribute记录最多包含八个扩展区的引用,这些扩展区可以容纳较大的属性。当已经使用了它的八个扩展区记录时,用于扩展Fork Data Attribute记录。”

AIUI,存储在属性文件中(或从中引用)的数据(无论是内联,分叉数据还是扩展属性)被称为扩展属性。

这些是数据结构,那么如何使用它们呢?

AIUI是操作系统的早期版本(可能是10.4 Tiger之前的版本,John Siracusa似乎表示在此方面进行了一些重大更改),它指向目录文件中的数据分支和资源分支。

AIUI,一旦我们到达10.4 Tiger,属性文件将被广泛用于存储各种数据。

可能(但我不知道)在10.4及之后的版本中,从属性文件中指向任何资源叉。即在回答您的第一个问题时,我想说命名​​叉是扩展属性,除非它们是资源叉,并且资源叉是从目录文件中引用的。

知道如何实现事物的问题是,为了保持向后兼容性,并且可能尤其是为了支持从一个版本的Mac OS到另一个版本对由一个版本的Mac OS编写的文件系统的访问,需要透明地支持不同的事物和事物的混合。

我们无法从普通的Terminal命令行工具中得知实际保存数据的位置。

因此,访问rsrc可能表明正在访问目录文件中的资源叉。

$ ls -l Icon^M/rsrc
-rwxr-xr-x  1 root  admin  486 23 Jul  2004 Icon?/rsrc

但是,我们知道尽管语法看起来像Icon^M正在访问目录下的文件,但实际上并非如此,因为

$ ls -lR Icon^M
-rwxr-xr-x@ 1 root  admin  0 23 Jul  2004 Icon?

因此,苹果为资源叉实施了特殊情况。

如果相反,我们会

$ ls -l@
-rwxr-xr-x@ 1 root  admin   0 23 Jul  2004 Icon?
    com.apple.FinderInfo    32 
    com.apple.ResourceFork  486 

这表明我们正在访问属性文件。但是同样,ls资源叉的实现可能会有特殊情况。

John Siracusa在指出,ACL列表存储为“扩展属性”,但被专门屏蔽掉,因此未在中显示xattr。因此,在xattr的实现中再次有特殊情况处理。

(请注意,这种特殊情况的处理可以在工具的代码中,或者在工具访问的基础API的代码中。)

GregW,如果您看到了这一点,那么就我是否是正确的路线,或者只是毫无希望地感到困惑,获得更专业的意见将是一件很好的事情。


还有一个讨论,在这里,但我不认为这是jonsview'是非常有帮助的。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.