Làm thế nào được mở rộng thuộc tính được lưu trữ và bảo quản?


11

Tôi có một câu hỏi nhỏ về các thuộc tính tệp mở rộng. Giả sử tôi gắn nhãn các tệp của mình bằng siêu dữ liệu trong các thuộc tính mở rộng (ví dụ: để tính toàn vẹn - nhưng điều này không quan trọng đối với câu hỏi của tôi). Các câu hỏi phát sinh bây giờ:

  • Những thuộc tính này được lưu trữ ở đâu? Chắc chắn không phải trong inode tôi đoán, nhưng ở vị trí nào - hoặc tốt hơn: cấu trúc?
  • Làm thế nào những thuộc tính này được kết nối với một tập tin? Có một liên kết từ cấu trúc thuộc tính đến inode hay không?
  • Điều gì xảy ra khi sao chép / di chuyển xung quanh các tập tin? Tôi vừa kiểm tra nó, khi di chuyển một tập tin, tập tin vẫn là thuộc tính của nó. Khi sao chép nó, bản sao không có thuộc tính. Vì vậy, tôi giả sử khi ghi nó vào đĩa CD hoặc gửi email tập tin, nó cũng sẽ mất thuộc tính?

Câu trả lời:


10

Câu trả lời cho câu hỏi của bạn là hệ thống tập tin cụ thể. Ví dụ, đối với ext3, hãy xem fs / ext3 / xattr.c , nó chứa mô tả sau:

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

Liên quan đến câu hỏi "làm thế nào các thuộc tính được kết nối", liên kết theo cách khác, inode có một liên kết đến các thuộc tính mở rộng, xem EXT3_XATTR_NEXText3_xattr_list_entriestrong xattr.h và xattr.c tương ứng.

Để tóm tắt lại, các thuộc tính được liên kết với inode và phụ thuộc vào fs, vì vậy, bạn sẽ mất các thuộc tính khi ghi rom CD hoặc gửi email một tệp.


6
Một chi tiết nhỏ không được trả lời ở đây: Bạn có thể bảo toàn các thuộc tính khi sao chép (tất nhiên bạn phải sao chép vào hệ thống tệp có hỗ trợ xattr). cp có một tùy chọn "--preserve = xattr"
Marcel Promotionberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.