Bagaimana atribut diperluas disimpan dan dilestarikan?

11

Saya punya pertanyaan kecil tentang atribut file yang diperluas. Asumsikan saya memberi label file saya dengan metadata dalam atribut yang diperluas (misalnya untuk memperhitungkan integritas - tetapi ini tidak masalah untuk pertanyaan saya). Pertanyaan yang muncul sekarang:

  • Di mana atribut ini disimpan? Tentunya tidak di inode kurasa, tetapi di lokasi apa - atau lebih baik: struktur?
  • Bagaimana atribut ini terhubung ke file? Apakah ada tautan dari struktur atribut ke inode atau lebih?
  • Apa yang terjadi ketika menyalin / memindahkan file? Saya baru mengujinya, saat memindahkan file, atribut file tetap. Saat menyalinnya, salinannya tidak memiliki atribut. Jadi saya menganggap jika membakar ke CD atau mengirim email file, itu juga akan kehilangan atributnya?
Chris
sumber

Jawaban:

10

Jawaban untuk pertanyaan Anda adalah spesifik sistem file. Untuk ext3, misalnya, lihat fs / ext3 / xattr.c , ini berisi deskripsi berikut:

  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  */

Mengenai pertanyaan "bagaimana atribut terhubung", tautannya adalah sebaliknya, inode memiliki tautan ke atribut yang diperluas, lihat EXT3_XATTR_NEXTdan ext3_xattr_list_entriesmasing-masing dalam xattr.h dan xattr.c.

Untuk rekap, atribut dihubungkan ke inode dan tergantung fs, jadi ya, Anda akan kehilangan atribut saat membakar CD rom atau mengirim email file.

Frederik Deweerdt
sumber
6
Satu detail kecil yang tidak dijawab di sini: Anda dapat mempertahankan atribut saat menyalin (tentu saja Anda harus menyalin ke sistem file dengan dukungan xattr). cp memiliki opsi "--preserve = xattr"
Marcel Stimberg