¿Cómo se almacenan y conservan los atributos extendidos?


11

Tengo una pequeña pregunta sobre los atributos de archivo extendido. Suponga que etiqueto mis archivos con metadatos en atributos extendidos (por ejemplo, para tener en cuenta la integridad, pero esto no importa para mi pregunta). Las preguntas que surgen ahora:

  • ¿Dónde se almacenan estos atributos? Seguramente no en el inodo, supongo, sino en qué ubicación, o mejor: ¿estructura?
  • ¿Cómo se conectan estos atributos a un archivo? ¿Hay un enlace desde la estructura de atributos al inodo más o menos?
  • ¿Qué sucede al copiar / mover archivos? Lo acabo de probar, cuando muevo un archivo, el archivo sigue siendo sus atributos. Al copiarlo, la copia no tiene atributos. Entonces, ¿supongo que al grabarlo en un CD o enviar el archivo por correo electrónico, también perderá sus atributos?

Respuestas:


10

La respuesta a su pregunta es específica del sistema de archivos. Para ext3, por ejemplo, eche un vistazo a fs / ext3 / xattr.c , contiene la siguiente descripción:

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

Con respecto a la pregunta "cómo se conectan los atributos", el enlace es al revés, el inodo tiene un enlace a los atributos extendidos, ver EXT3_XATTR_NEXTy ext3_xattr_list_entriesen xattr.h y xattr.c respectivamente.

En resumen, los atributos están vinculados al inodo y dependen de fs, por lo que sí, perderá los atributos al grabar un CD rom o al enviar un archivo por correo electrónico.


66
Un detalle menor que no se responde aquí: puede conservar los atributos al copiar (por supuesto, debe copiar a un sistema de archivos con soporte xattr). cp tiene una opción "--preserve = xattr"
Marcel Stimberg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.