विस्तारित विशेषताएँ कैसे संग्रहीत और संरक्षित की जाती हैं?


11

विस्तारित फ़ाइल विशेषताओं के बारे में मेरा एक छोटा सा सवाल है। मान लें कि मैं अपनी फ़ाइलों को मेटाडेटा में विस्तारित विशेषताओं के साथ लेबल करता हूं (जैसे अखंडता के लिए खाता है - लेकिन यह मेरे प्रश्न के लिए कोई फर्क नहीं पड़ता)। अब जो सवाल उठते हैं:

  • ये विशेषताएँ कहाँ संग्रहीत हैं? निश्चित रूप से मैं इनकोड में नहीं लगता, लेकिन किस स्थान पर - या बेहतर: संरचना?
  • ये विशेषताएँ किसी फ़ाइल से कैसे जुड़ी हैं? क्या इनोडेशन में विशेषता संरचना से लिंक है या नहीं?
  • क्या होता है जब नकल / फ़ाइलों के आसपास घूम रहा है? मैंने अभी इसका परीक्षण किया है, जब कोई फ़ाइल चलती है, तो फ़ाइल इसकी विशेषताएँ बनी रहती है। इसे कॉपी करते समय, कॉपी में विशेषताएं नहीं होती हैं। तो मुझे लगता है कि यह सीडी को जलाने या फ़ाइल को ईमेल करने के लिए, यह अपनी विशेषताओं को भी खो देगा?

जवाबों:


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

"कैसे विशेषताएँ जुड़े हुए हैं" प्रश्न के संबंध में, लिंक दूसरे तरीके से है, इनोड में क्रमशः विस्तारित विशेषताओं को देखें, देखें EXT3_XATTR_NEXTऔर ext3_xattr_list_entriesxattr.h और xattr.c में लिंक करें।

पुनर्कथन करने के लिए, विशेषताओं को इनोड से जोड़ा जाता है और fs निर्भर होते हैं, इसलिए हां, आप सीडी रोम को जलाने या किसी फ़ाइल को ईमेल करते समय विशेषताओं को खो देंगे।


6
एक छोटा विवरण जो यहां उत्तर नहीं दिया गया है: आप कॉपी करते समय विशेषताओं को संरक्षित कर सकते हैं (बेशक आपको xattr समर्थन के साथ एक फाइल सिस्टम पर कॉपी करना होगा)। cp का एक विकल्प है "--preserve = xattr"
Marcel Stimberg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.