2013-12-16 38 views
6

这是一个简单的问题,但我已经做了一些研究,找不到任何答案...所以有人知道,当我们通过xattr定义扩展属性时,这些属性存储在 - 作为文件的一部分'的内容(在最后?),或者如果inode有一个特殊区域来存储这些内容?哪里扩展属性存储?

顺便说一句,我读过ext4中的“每个扩展属性限于文件系统块(例如4 KiB)”。如果我想将7个扩展属性存储到文件系统中的每个文件,我无法判断这是否足够。这是真的吗?

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

+0

既然你还没有投票赞成,我假设我没有完全回答你的问题。你能再澄清一点吗? – aleatha

回答

5

如果查看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,那么你运气不好。

+0

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