拡張ファイルのプロパティについて小さな質問があります。拡張属性のメタデータでファイルにタグを付けるとしましょう(例:完全性を考慮するためのものですが、私の問題では重要ではありません)。今問題は:
- これらのプロパティはどこに保存されますか?私はそれが明らかにinodeにあるのではなく、どこかにあると思います。またはより良いまだ構造ですか?
- これらのプロパティはファイルにどのように関連付けられますか?属性構造からinodeなどへのリンクはありますか?
- ファイルをコピー/移動するとどうなりますか?ちょうどファイルを移動したときにファイルのプロパティが保持されているかどうかをテストしました。コピーすると、コピーには属性がありません。そうであれば、CDに書き込むか、電子メールでファイルを送信すると、その属性も失われると仮定しています。
答え1
あなたの質問に対する答えはファイルシステムによって異なります。たとえば、ext3の場合は、次を参照してください。fs/ext3/xattr.c、以下の説明が含まれています。
16 /*
17 * Extended attributes are stored directly in inodes (on file systems with
18 * inodes bigger than 128 bytes) and on additional disk blocks. The i_file_acl
19
* field contains the block number if an inode uses an additional block. All
20 * attributes must fit in the inode and one additional block. Blocks that
21 * contain the identical set of attributes may be shared among several inodes.
22 * Identical blocks are detected by keeping a cache of blocks that have
23 * recently been accessed.
24 *
25 * The attributes in inodes and on blocks have a different header; the entries
26 * are stored in the same format:
27 *
28 * +------------------+
29 * | header |
30 * | entry 1 | |
31 * | entry 2 | | growing downwards
32 * | entry 3 | v
33 * | four null bytes |
34 * | . . . |
35 * | value 1 | ^
36 * | value 3 | | growing upwards
37 * | value 2 | |
38 * +------------------+
39 *
40 * The header is followed by multiple entry descriptors. In disk blocks, the
41 * entry descriptors are kept sorted. In inodes, they are unsorted. The
42 * attribute values are aligned to the end of the block in no specific order.
43 *
44 * Locking strategy
45 * ----------------
46 * EXT3_I(inode)->i_file_acl is protected by EXT3_I(inode)->xattr_sem.
47 * EA blocks are only changed if they are exclusive to an inode, so
48 * holding xattr_sem also means that nothing but the EA block's reference
49 * count can change. Multiple writers to the same block are synchronized
50 * by the buffer lock.
51 */
「属性がどのようにつながるか」に関する質問に関して、リンクは反転されます。 inodeには拡張属性へのリンクがあります。それぞれxattr.hとxattr.cを参照してくださいEXT3_XATTR_NEXT
。ext3_xattr_list_entries
要約すると、これらの属性は inode に接続され、ファイルシステムによって異なるため、CD ROM を焼くときや電子メールでファイルを送信すると、これらの属性が失われます。