확장 파일 속성에 관해 작은 질문이 있습니다. 확장된 속성의 메타데이터로 내 파일에 태그를 지정한다고 가정해 보겠습니다(예: 완전성을 고려하기 위한 것이지만 내 문제에서는 중요하지 않습니다). 지금 문제는:
- 이러한 속성은 어디에 저장됩니까? 나는 그것이 분명히 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을 굽거나 이메일을 통해 파일을 보낼 때 이러한 속성이 손실됩니다.