Genişletilmiş öznitelikler nasıl saklanır ve korunur?


11

Genişletilmiş dosya öznitelikleri hakkında küçük bir sorum var. Dosyalarımı genişletilmiş özniteliklerde meta verilerle etiketlediğimi varsayalım (örneğin bütünlüğü hesaba katmak - ama bu benim sorum için önemli değil). Şimdi ortaya çıkan sorular:

  • Bu özellikler nerede saklanıyor? Kesinlikle inode değil sanırım, ama hangi konumda - ya da daha iyi: yapı?
  • Bu öznitelikler bir dosyaya nasıl bağlanır? Özellik yapısından inode'a kadar bir bağlantı var mı?
  • Dosyaları kopyalarken / dolaşırken ne olur? Az önce test ettim, bir dosyayı taşırken dosya özniteliklerini koruyor. Kopyalarken, kopyanın nitelikleri yoktur. Bu yüzden CD'ye yazarken veya dosyayı e-postayla gönderirken, özniteliklerini de kaybeder?

Yanıtlar:


10

Sorunuzun cevabı dosya sistemine özgüdür. Örneğin ext3 için fs / ext3 / xattr.c dosyasına bir göz atın , aşağıdaki açıklamayı içerir:

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

"Nasıl nitelikler bağlanır" sorusuna gelince, bağlantı inode bkz genişletilmiş nitelikler bir bağlantı vardır, başka bir yol turda olduğu EXT3_XATTR_NEXTve ext3_xattr_list_entriessırasıyla xattr.h ve xattr.c içinde.

Özetlemek gerekirse, öznitelikler inode ile bağlantılıdır ve fs bağımlıdır, bu nedenle evet, bir CD'yi yazarken veya bir dosyayı e-postayla gönderirken özniteliklerini kaybedersiniz.


6
Burada yanıtlanmayan küçük bir ayrıntı: Kopyalama sırasında nitelikleri koruyabilirsiniz (elbette xattr desteğiyle bir dosya sistemine kopyalamanız gerekir). cp bir seçenek vardır "--preserve = xattr"
Marcel Stimberg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.