【问题标题】:where are extended attributes stored?扩展属性存储在哪里?
【发布时间】:2017-04-06 12:56:50
【问题描述】:

这是一个简单的问题,但我做了一些研究,但找不到任何答案......所以有谁知道当我们通过 xattr 定义扩展属性时,这些属性是否存储在 - 作为 - 的一部分file'c​​ontents(在biggining中,到底是什么?),或者如果inode有一个特殊的区域来存储这些?

顺便说一句,我在 ext4 中读到“每个扩展属性都限于一个文件系统块(例如 4 KiB)”。如果我想为文件系统中的每个文件存储 7 个扩展属性,我不知道这是否足够。这是现实的吗?

我的最后一个问题是,如果文件移动到具有不同文件系统的其他机器上,这些扩展属性是否可移植,这些属性会发生什么变化?

【问题讨论】:

  • 既然你还没有投票,我假设我没有完全回答你的问题。你能把这个问题再澄清一点吗?

标签: filesystems metadata ext4 xattr


【解决方案1】:

如果您查看 inode 规范,您会发现 inode 末尾有少量空间来容纳扩展属性。如果你溢出了那个区域,ext4 允许你为额外的扩展属性分配另一个块(基本上就像一个资源叉)。 4KB 限制是每个属性、每个文件,因此您当然可以为每个文件存储 7 个扩展属性,除非该属性是大于 4KB 的 BLOB。但是,如果您超出了 inode 末尾的空间,您将分配块给元数据而不是数据,从而减少文件系统的可用大小。

来源:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes

为了回答您关于可移植性的问题,默认情况下不会复制扩展属性,即使在单个文件系统中也是如此,并且不能在文件系统之间移植。

请参阅:https://unix.stackexchange.com/questions/44253/how-to-clone-copy-all-file-directory-attributes-onto-different-file-directory 以了解有关此问题的进一步讨论。 Rysnc 可以为复制扩展属性做很多事情,但如果目标文件系统不支持 xattrs,那你就倒霉了。

【讨论】:

  • [回答您关于可移植性的问题,默认情况下不会复制扩展属性] macOS Sierra 和至少 OS X El Capitan 默认会复制 xattr