확장 된 속성은 어떻게 저장되고 유지됩니까?


11

확장 파일 속성에 대한 작은 질문이 있습니다. 확장 된 속성의 메타 데이터로 파일에 레이블을 지정한다고 가정합니다 (예 : 무결성을 설명하기위한 것이지만 제 질문에는 중요하지 않습니다). 지금 발생하는 질문 :

  • 이러한 속성은 어디에 저장됩니까? 확실히 아이 노드가 아니라 어떤 위치에서-또는 더 나은가 : 구조?
  • 이러한 속성은 파일에 어떻게 연결되어 있습니까? 속성 구조체에서 inode로 연결되는 링크가 있습니까?
  • 파일을 복사 / 이동할 때 어떻게됩니까? 방금 파일을 테스트 할 때 파일을 속성으로 유지했습니다. 복사 할 때 사본에는 속성이 없습니다. 그래서 CD로 굽거나 파일을 전자 메일로 보낼 때 그 속성도 잃을 것이라고 생각합니까?

답변:


10

귀하의 질문에 대한 답변은 파일 시스템에 따라 다릅니다. 예를 들어 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  */

은 "어떻게 속성이 연결되어"질문에 대해서는, 링크는 아이 노드는 참조 확장 된 속성에 대한 링크를 가지고, 다른 방법으로 라운드에 EXT3_XATTR_NEXText3_xattr_list_entries각각 xattr.h 및 xattr.c에.

요약하면, 속성은 inode에 연결되어 있으며 fs에 따라 달라집니다. 따라서 CD ROM을 굽거나 파일을 전자 메일로 보낼 때 속성이 손실됩니다.


6
여기에 대답하지 않은 사소한 세부 사항 : 복사 할 때 속성을 유지할 수 있습니다 (물론 xattr 지원 파일 시스템에 복사해야 함). CP는 옵션 "--preserve =에서 xattr"이
마르셀 Stimberg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.