存储扩展属性的位置?

时间:2013-12-16 18:48:44

标签: filesystems metadata ext4 xattr

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

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

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

1 个答案:

答案 0 :(得分:6)

如果查看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,那你就不走运了。