คุณลักษณะส่วนขยายถูกจัดเก็บและเก็บรักษาไว้อย่างไร


11

ฉันมีคำถามเล็กน้อยเกี่ยวกับคุณสมบัติไฟล์เพิ่มเติม สมมติว่าฉันติดป้ายกำกับไฟล์ของฉันด้วยข้อมูลเมตาในแอททริบิวต์แบบขยาย (เช่นเพื่อพิจารณาถึงความถูกต้อง - แต่สิ่งนี้ไม่สำคัญสำหรับคำถามของฉัน) คำถามที่เกิดขึ้นตอนนี้:

  • คุณลักษณะเหล่านี้เก็บอยู่ที่ไหน แน่นอนฉันไม่เดาว่า inode แต่อยู่ในตำแหน่งใด - หรือดีกว่า: โครงสร้าง?
  • คุณลักษณะเหล่านี้เชื่อมต่อกับไฟล์อย่างไร มีลิงค์จากโครงสร้างแอ็ตทริบิวต์ไปยัง inode หรือเปล่า?
  • จะเกิดอะไรขึ้นเมื่อคัดลอก / ย้ายไฟล์ต่าง ๆ ฉันเพิ่งทดสอบเมื่อย้ายไฟล์ไฟล์ยังคงคุณลักษณะของมัน เมื่อคัดลอกมันสำเนาไม่มีคุณสมบัติ ดังนั้นฉันคิดว่าเมื่อคุณเขียนลงซีดีหรือส่งไฟล์ทางอีเมลมันจะสูญเสียคุณสมบัติของมันหรือไม่

คำตอบ:


10

คำตอบสำหรับคุณคือระบบไฟล์ที่เฉพาะเจาะจง สำหรับ ext3 เช่นดูที่fs / ext3 / xattr.cมันมีคำอธิบายดังต่อไปนี้:

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

เกี่ยวกับคำถาม "วิธีเชื่อมต่อแอตทริบิวต์" ลิงก์อยู่ในอีกด้านหนึ่ง inode มีลิงก์ไปยังแอตทริบิวต์เพิ่มเติมให้ดูEXT3_XATTR_NEXTและext3_xattr_list_entriesใน xattr.h และ xattr.c ตามลำดับ

ในการสรุปคุณสมบัตินั้นเชื่อมโยงกับไอโหนดและขึ้นอยู่กับ fs ดังนั้นใช่คุณจะสูญเสียคุณสมบัติเมื่อเขียนซีดีรอมหรือส่งอีเมลไฟล์


6
รายละเอียดย่อยหนึ่งข้อที่ไม่ได้ตอบไว้ที่นี่: คุณสามารถเก็บรักษาแอตทริบิวต์เมื่อทำการคัดลอก (แน่นอนว่าคุณต้องคัดลอกไปยังระบบไฟล์ด้วยการรองรับ xattr) cp มีตัวเลือก "--preserve = xattr"
Marcel Stimberg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.