2013-12-16 101 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