Wie werden erweiterte Attribute gespeichert und beibehalten?

11

Ich habe eine kleine Frage zu erweiterten Dateiattributen. Angenommen, ich beschrifte meine Dateien mit Metadaten in erweiterten Attributen (z. B. um die Integrität zu berücksichtigen - dies spielt jedoch für meine Frage keine Rolle). Die Fragen, die sich jetzt stellen:

  • Wo sind diese Attribute gespeichert? Sicher nicht in der Inode, aber an welchem ​​Ort - oder besser: Struktur?
  • Wie sind diese Attribute mit einer Datei verbunden? Gibt es einen Link von der Attributstruktur zum Inode oder so?
  • Was passiert beim Kopieren / Verschieben von Dateien? Ich habe es gerade getestet. Beim Verschieben einer Datei bleiben die Attribute der Datei erhalten. Beim Kopieren hat die Kopie keine Attribute. Ich gehe also davon aus, dass beim Brennen auf CD oder beim Versenden der Datei per E-Mail auch die Attribute verloren gehen.
Chris
quelle

Antworten:

10

Die Antwort auf Ihre Frage ist dateisystemspezifisch. Schauen Sie sich für ext3 beispielsweise fs / ext3 / xattr.c an , es enthält die folgende Beschreibung:

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

In Bezug auf die Frage "Wie werden Attribute verbunden ?" Ist der Link umgekehrt. Der Inode hat einen Link zu den erweiterten Attributen, siehe EXT3_XATTR_NEXTund ext3_xattr_list_entriesin xattr.h bzw. xattr.c.

Zusammenfassend sind die Attribute mit dem Inode verknüpft und fs-abhängig. Ja, Sie verlieren die Attribute, wenn Sie eine CD-ROM brennen oder eine Datei per E-Mail versenden.

Frederik Deweerdt
quelle
6
Ein kleines Detail, das hier nicht beantwortet wird: Sie können die Attribute beim Kopieren beibehalten (natürlich müssen Sie in ein Dateisystem mit xattr-Unterstützung kopieren). CP hat eine Option "--preserve = xattr"
Marcel Stimberg