عقدة

العقدة ( inode ) هي بنية بيانات في نظام ملفات يونكس، تصف كائنًا في نظام الملفات، مثل ملف أو مجلد . تخزن كل عقدة سمات ومواقع كتل القرص لبيانات الكائن. [ 1 ] قد تتضمن سمات كائن نظام الملفات بيانات وصفية (أوقات آخر تغيير، [ 2 ] الوصول، التعديل)، بالإضافة إلى بيانات المالك والأذونات . [ 3 ]

الدليل عبارة عن قائمة بـ inodes مع أسمائها المخصصة. تتضمن القائمة مدخلاً خاصاً بالدليل نفسه، ومدخلاً خاصاً بالدليل الأصل، ومدخلاً خاصاً بكل من الأدلة الفرعية التابعة له.

أصل الكلمة

كان هناك غموض في قائمة بريد نواة لينكس حول سبب وجود حرف "i" في كلمة "inode". في عام 2002، طُرح السؤال على رائد يونكس دينيس ريتشي ، الذي أجاب: [ 4 ]

في الحقيقة، لا أعرف أنا أيضاً. لقد كان مجرد مصطلح بدأنا باستخدامه. أرجّح أنه "فهرس"، نظراً لبنية نظام الملفات غير المألوفة نوعاً ما، حيث كانت تُخزّن معلومات الوصول إلى الملفات كمصفوفة مسطحة على القرص، بينما تُخزّن معلومات الدليل الهرمي بشكل منفصل. بالتالي، يُمثّل الرقم i فهرساً في هذه المصفوفة، بينما تُمثّل العقدة i العنصر المُختار منها. (استُخدمت علامة "i-" في دليل الإصدار الأول، ثم حُذفت الواصلة تدريجياً).

تدعم ورقة بحثية نُشرت عام 1978 من قِبل ريتشي وكين تومسون فكرة أن كلمة "index" هي الأصل الاشتقاقي لكلمة inodes. وقد كتبا: [ 5 ]

يحتوي مدخل الدليل على اسم الملف المرتبط به ومؤشر إليه . هذا المؤشر هو عدد صحيح يُسمى رقم الفهرس ( i-number ). عند الوصول إلى الملف، يُستخدم رقم الفهرس (i -number) كمؤشر في جدول النظام (قائمة الفهرس ) المخزن في جزء معروف من الجهاز الذي يوجد عليه الدليل. يحتوي المدخل الذي تم العثور عليه ( عقدة الفهرس للملف ) على وصف الملف.

بالإضافة إلى ذلك، كتب موريس ج. باخ أن كلمة inode "هي اختصار لمصطلح index node وتستخدم بشكل شائع في الأدبيات المتعلقة بنظام UNIX". [ 6 ]

تفاصيل

واصفات الملفات ، وجدول الملفات، وجدول العقد في نظام يونكس [ 7 ]

يعتمد نظام الملفات على هياكل بيانات خاصة بالملفات، وليس على محتوياتها. تُسمى هذه الهياكل بالبيانات الوصفية (metadata )، وهي بيانات تصف البيانات. يرتبط كل ملف برقم تعريف (inode) ، والذي يُحدد بواسطة عدد صحيح، يُشار إليه غالبًا برقم i أو رقم inode .

تخزن عقد البيانات (Inodes) معلومات حول الملفات والمجلدات، مثل ملكية الملف، ونمط الوصول (صلاحيات القراءة والكتابة والتنفيذ)، ونوع الملف. وقد تُسمى هذه البيانات بيانات الحالة، نسبةً إلى statاستدعاء النظام الذي يوفر هذه البيانات للبرامج.

يشير رقم العقدة (inode) إلى جدول العقد في نظام الملفات. ومن خلال هذا الرقم، يستطيع برنامج تشغيل نظام الملفات في النواة الوصول إلى محتويات العقدة، بما في ذلك موقع الملف، مما يتيح الوصول إليه. يمكن العثور على رقم عقدة الملف باستخدام الأمر ls -iالذي يطبع رقم العقدة في العمود الأول من مخرجاته.

في العديد من أنظمة الملفات القديمة، تُخزَّن العقد (inodes) في منطقة واحدة أو أكثر ذات حجم ثابت يتم تحديده عند إنشاء نظام الملفات، وبالتالي يكون الحد الأقصى لعدد العقد ثابتًا عند إنشاء النظام، مما يحد من الحد الأقصى لعدد الملفات التي يمكن أن يحتويها. وتتمثل إحدى الطرق الشائعة لتخصيص العقد في نظام الملفات في عقدة واحدة لكل 2 كيلوبايت موجودة في النظام. [ 8 ]

تستغني بعض أنظمة الملفات الشبيهة بنظام يونكس، مثل JFS و XFS و ZFS و OpenZFS و ReiserFS و btrfs و APFS ، عن جدول inode ذي الحجم الثابت، ولكنها تخزن بيانات مكافئة لتوفير إمكانيات مماثلة. ومن البدائل الشائعة لجدول inode ذي الحجم الثابت أشجار B وأشجار B+ المشتقة منها .

أسماء الملفات وتأثيرها على الدليل:

  • لا تحتوي ملفات Inodes على أسماء الروابط الثابتة الخاصة بها ، بل تحتوي فقط على بيانات تعريف الملفات الأخرى.
  • تُعتبر أدلة يونكس عبارة عن قوائم من هياكل الارتباط، يحتوي كل منها على اسم ملف واحد ورقم عقدة واحد.
  • يجب على برنامج تشغيل نظام الملفات البحث في دليل عن اسم ملف معين ثم تحويل اسم الملف إلى رقم inode الصحيح المقابل.

يُطلق على تمثيل نواة نظام التشغيل لهذه البيانات في الذاكرة اسم struct inodeفي لينكس . أما الأنظمة المشتقة من بي إس دي فتستخدم المصطلح (يشير الحرف "v" إلى طبقة نظام الملفات الافتراضيvnode للنواة ).

وصف عقدة POSIX

يُلزم معيار POSIX بسلوك نظام الملفات الذي يتأثر بشدة بأنظمة ملفات UNIX التقليدية . يُشار إلى عقدة البيانات (inode) بعبارة "الرقم التسلسلي للملف"، وهو مُعرِّف فريد لكل ملف في نظام الملفات . [ 9 ] يُحدد هذا الرقم التسلسلي للملف، بالإضافة إلى مُعرِّف الجهاز الذي يحتوي على الملف، الملف بشكل فريد داخل النظام بأكمله. [ 10 ]

في نظام POSIX، يحتوي الملف على السمات التالية [ 10 ] والتي يمكن استردادها بواسطة statاستدعاء النظام:

  • معرف الجهاز (هذا يحدد الجهاز الذي يحتوي على الملف؛ أي نطاق تفرد الرقم التسلسلي).
  • أرقام الملفات التسلسلية.
  • نمط الملف ، الذي يحدد نوع الملف وكيفية وصول مالك الملف والمستخدمين الأعضاء في مجموعة الملف والمستخدمين الذين ليسوا مالكين ولا أعضاء في مجموعة الملف إلى الملف.
  • عدد الروابط يوضح عدد الروابط الصلبة التي تشير إلى عقدة البيانات (inode).
  • معرف المستخدم الخاص بمالك الملف.
  • معرّف المجموعة الخاص بالملف.
  • معرف الجهاز الخاص بالملف إذا كان ملف جهاز .
  • حجم الملف بالبايت .
  • الطوابع الزمنية التي توضح متى تم تعديل العقدة نفسها آخر مرة ( ctime ، وقت تغيير العقدة )، ومحتوى الملف الذي تم تعديله آخر مرة ( mtime ، وقت التعديل )، وآخر مرة تم الوصول إليه ( atime ، وقت الوصول ).
  • حجم كتلة الإدخال/الإخراج المفضل .
  • عدد الكتل المخصصة لهذا الملف.

تداعيات

ستتمتع أنظمة الملفات المصممة باستخدام inodes بالخصائص الإدارية التالية:

يمكن أن تحمل الملفات أسماءً متعددة. إذا ارتبطت عدة أسماء ارتباطًا مباشرًا بنفس رقم العقدة (inode)، فإن الأسماء تكون متكافئة؛ أي أن الاسم الأول الذي يتم إنشاؤه لا يتمتع بأي وضع خاص. وهذا يختلف عن الروابط الرمزية ، التي تعتمد على الاسم الأصلي، وليس على رقم العقدة (inode).

استمرارية عقدة البيانات والملفات غير المرتبطة

قد لا يحتوي ملف inode على أي روابط. يُمثل ملف inode بدون روابط ملفًا لا توجد له أي إدخالات دليل أو مسارات تؤدي إليه في نظام الملفات. يُطلق على الملف الذي تم حذفه أو الذي يفتقر إلى إدخالات دليل تشير إليه اسم ملف "غير مرتبط".

تُزال هذه الملفات من نظام الملفات، مما يُحرر مساحة القرص المُستخدمة لإعادة استخدامها. ويبقى ملف inode بدون روابط في نظام الملفات حتى يتم تحرير الموارد (مساحة القرص والكتل) التي حررها الملف غير المرتبط أو حتى يتم تعديل نظام الملفات.

على الرغم من أن الملف غير المرتبط يصبح غير مرئي في نظام الملفات، إلا أن حذفه يتم تأجيله حتى تنتهي جميع العمليات التي لديها حق الوصول إلى الملف من استخدامه، بما في ذلك الملفات القابلة للتنفيذ التي يتم الاحتفاظ بها ضمنيًا مفتوحة بواسطة العمليات التي تقوم بتنفيذها.

تحويل رقم inode واسترجاع مسار دليل الملف

لا يمكن عادةً الربط بين ملف مفتوح واسم الملف الذي استُخدم لفتحه. فعندما يفتح برنامج ملفًا، يحوّل نظام التشغيل اسم الملف إلى رقم inode ثم يتجاهله. ونتيجةً لذلك، لا تستطيع دوال مثل getcwd() و getwd()، التي تسترجع دليل العمل الحالي للعملية، الوصول مباشرةً إلى اسم الملف.

تبدأ هذه الدوال بالبحث في المجلد الحالي، وصولاً إلى المجلد الأصل ، ثم إلى المجلد الأصل للمجلد الأصل، وهكذا، حتى تصل إلى المجلد الجذر . في كل مستوى، تبحث الدالة عن مدخل في المجلد يتطابق رقم تعريفه (inode) مع رقم تعريف المجلد الذي انتقلت منه للتو. ولأن رقم تعريف المجلد الفرعي لا يزال موجودًا كمدخل في المجلد الأصل ، فإن ذلك يسمح للدالة بإعادة بناء المسار المطلق لمجلد العمل الحالي .

تحتفظ بعض أنظمة التشغيل بمعلومات إضافية لتسريع هذه العملية. على سبيل المثال، في نظام الملفات الافتراضي (VFS) في لينكس ، [ 11 ] تُعرف ذاكرة التخزين المؤقت لإدخالات الدليل، [ 12 ] والمعروفة أيضًا باسم dentry أو dcache، بأنها إدخالات ذاكرة تخزين مؤقت يستخدمها النواة لتسريع عمليات نظام الملفات عن طريق تخزين معلومات حول روابط الدليل في ذاكرة الوصول العشوائي (RAM) .

إمكانية الربط الصلب للدليل تاريخياً

تاريخيًا، كان من الممكن إنشاء روابط صلبة بين المجلدات. هذا جعل بنية المجلدات عبارة عن رسم بياني موجه عشوائي ، على عكس الرسم البياني الموجه غير الدوري . بل كان من الممكن أن يكون المجلد هو المجلد الأصل لنفسه. تمنع الأنظمة الحديثة عمومًا هذه الحالة المُربكة، باستثناء أن المجلد الأصل للمجلد الجذر لا يزال يُعرَّف على أنه المجلد الجذر. الاستثناء الأبرز لهذا الحظر موجود في نظام التشغيل Mac OS X (الإصدارات 10.5 وما فوق)، والذي يسمح بإنشاء روابط صلبة بين المجلدات على أنظمة ملفات HFS+ بواسطة المستخدم المتميز. [ 13 ]

استقرار عدد العقد (inode) وأنظمة الملفات غير التابعة لنظام يونكس

عندما يتم نقل ملف إلى دليل مختلف على نفس نظام الملفات، أو عندما يؤدي إلغاء تجزئة القرص إلى تغيير موقعه الفعلي، يظل رقم inode الخاص بالملف دون تغيير.

تسمح هذه الخاصية الفريدة بنقل الملف أو إعادة تسميته حتى أثناء عمليات القراءة أو الكتابة، مما يضمن الوصول المستمر دون انقطاعات.

لا يمكن محاكاة هذه الميزة - وهي بقاء بيانات تعريف الملف ومواقع كتل البيانات في بنية بيانات مركزية ، بغض النظر عن إعادة تسمية الملف أو نقله - بشكل كامل في العديد من أنظمة الملفات غير التابعة لنظام يونكس، مثل FAT ومشتقاته، لأنها تفتقر إلى آلية للحفاظ على هذه الخاصية الثابتة عند نقل كل من مدخل الدليل الخاص بالملف وبياناته في آن واحد. في هذه الأنظمة، قد يؤدي نقل الملف أو إعادة تسميته إلى تغييرات جوهرية في بنية البيانات التي تمثله، ولا يحتفظ النظام بسجل مركزي منفصل لمواقع كتل البيانات وبيانات تعريف الملف ، كما هو الحال في أنظمة يونكس التي تعتمد على عقد البيانات (inodes).

تبسيط تثبيت المكتبة باستخدام أنظمة ملفات inode

تسمح أنظمة ملفات inode لعملية قيد التشغيل بمواصلة الوصول إلى ملف مكتبة حتى عندما تقوم عملية أخرى باستبدال نفس الملف.

يجب تنفيذ هذه العملية بشكل ذري ، مما يعني أنه يجب أن تظهر كعملية واحدة إما مكتملة تمامًا أو غير مكتملة على الإطلاق، دون وجود حالة وسيطة مرئية للعمليات الأخرى.

أثناء عملية الاستبدال ، يتم إنشاء عقدة بيانات جديدة لملف المكتبة الجديد ، مما يؤدي إلى إنشاء ربط جديد تمامًا. بعد ذلك، ستسترجع طلبات الوصول المستقبلية لتلك المكتبة الإصدار المُثبَّت حديثًا.

عندما يقوم نظام التشغيل باستبدال الملف (وإنشاء عقدة بيانات جديدة)، فإنه يضع قفلًا [ 14 ] على عقدة البيانات [ 15 ] وربما على الدليل الذي يحتويها. [ 16 ] يمنع هذا العمليات الأخرى من القراءة أو الكتابة إلى الملف (عقدة البيانات) [ 17 ] أثناء عملية التحديث، وبالتالي تجنب عدم اتساق البيانات أو تلفها. [ 18 ]

بمجرد اكتمال عملية التحديث، يتم تحرير القفل. أي وصول لاحق إلى الملف (عبر رقم تعريف الملف) من قِبل أي عملية سيشير الآن إلى الإصدار الجديد من المكتبة. وبالتالي، يصبح من الممكن إجراء التحديثات حتى عندما تكون المكتبة قيد الاستخدام من قِبل عملية أخرى.

تتمثل إحدى المزايا الهامة لهذه الآلية في أنها تلغي الحاجة إلى إعادة تشغيل النظام لاستبدال المكتبات المستخدمة حاليًا. وبالتالي، يمكن للأنظمة تحديث أو ترقية مكتبات البرامج بسلاسة دون مقاطعة العمليات الجارية.

احتمالية استنفاد العقدة وحلولها

عند إنشاء نظام ملفات، تُخصص بعض أنظمة الملفات عددًا ثابتًا من العقد (inodes). [ 19 ] وهذا يعني أنه من الممكن استنفاد عدد العقد المتاحة في نظام الملفات، حتى مع وجود مساحة فارغة متبقية. غالبًا ما تحدث هذه المشكلة في حالات استخدام تتضمن العديد من الملفات الصغيرة، كما هو الحال في خادم تخزين رسائل البريد الإلكتروني، لأن كل ملف، مهما كان صغيرًا، يتطلب عقدة خاصة به.

تتجنب أنظمة الملفات الأخرى هذا القيد باستخدام تخصيص العقد الديناميكي. [ 20 ] يسمح تخصيص العقد الديناميكي لنظام الملفات بإنشاء المزيد من العقد حسب الحاجة بدلاً من الاعتماد على عدد ثابت يتم إنشاؤه عند إنشاء نظام الملفات. [ 21 ] يمكن لهذا أن "يُنمّي" نظام الملفات عن طريق زيادة عدد العقد المتاحة للملفات والمجلدات الجديدة، وبالتالي تجنب مشكلة نفاد العقد. [ 22 ]

التضمين

قد يكون من المنطقي تخزين الملفات الصغيرة جدًا في عقدة الملف نفسها لتوفير المساحة (لا حاجة لكتلة بيانات) وتقليل وقت البحث (لا حاجة للوصول إلى القرص). تُسمى هذه الخاصية في نظام الملفات "التضمين". وبالتالي، لم يعد من الممكن افتراض الفصل التام بين بيانات عقدة الملف وبيانات الملف عند استخدام أنظمة الملفات الحديثة.

إذا كانت بيانات الملف تتناسب مع المساحة المخصصة لمؤشرات البيانات، فيمكن استخدام هذه المساحة بسهولة. على سبيل المثال، يقوم نظام الملفات ext2 والإصدارات اللاحقة بتخزين بيانات الروابط الرمزية (عادةً أسماء الملفات) بهذه الطريقة إذا لم تتجاوز البيانات 60 بايت ("روابط رمزية سريعة"). [ 23 ]

يحتوي نظام الملفات Ext4 على خيار inline_dataيسمح له بتنفيذ عملية تضمين الملفات إذا تم تفعيله أثناء إنشاء نظام الملفات. ونظرًا لأن حجم عقدة الملف (inode) محدود، فإن هذا الخيار يعمل فقط مع الملفات الصغيرة جدًا. [ 24 ]

في الأنظمة غير يونكس

  • يحتوي نظام الملفات NTFS على جدول ملفات رئيسي (MFT) يخزن الملفات في شجرة B. لكل مدخل "معرف ملف" (fileID)، مشابه لرقم العقدة (inode)، يشير إلى هذا المدخل بشكل فريد. [ 25 ] تتضمن بيانات المدخل الطوابع الزمنية الثلاثة، ومعرف الجهاز، والخصائص، وعدد المراجع، وأحجام الملفات، ولكن على عكس نظام POSIX، تُحدد الأذونات من خلال واجهة برمجة تطبيقات مختلفة. [ 26 ] يتميز تخطيط الملفات على القرص بتعقيد أكبر. [ 27 ] لم تكن أنظمة ملفات FAT السابقة تحتوي على مثل هذا الجدول، ولم تكن قادرة على إنشاء روابط صلبة.
    • يحتوي نظام الملفات NTFS أيضًا على مفهوم تضمين الملفات الصغيرة في مدخل MFT. [ 28 ]
    • يحتوي نظام الملفات ReFS المشتق على جدول ملفات رئيسي متماثل. يحتوي ReFS على معرّف ملف بطول 128 بت؛ وقد تم نقل هذا الامتداد أيضًا إلى نظام الملفات NTFS، الذي كان يحتوي في الأصل على معرّف ملف بطول 64 بت. [ 26 ]
  • يمكن استخدام واجهة برمجة التطبيقات GetFileInformationByHandle المشابهة للإحصائيات على وحدات التخزين المشتركة في المجموعة ، لذا من المفترض أن يكون لها مفهوم مشابه لمعرف الملف. [ 26 ]

انظر أيضاً

مراجع

  1. تانينباوم، أندرو س. أنظمة التشغيل الحديثة (  الطبعة الثالثة). ص  279.
  2. JVSANTEN. "الفرق بين mtime و ctime و atime - أدلة وأسئلة شائعة حول لينكس" . أدلة وأسئلة شائعة حول لينكس . مؤرشف من الأصل بتاريخ 20-11-2016.
  3. "تشريح مفتاح نظام الملفات الافتراضي لنظام لينكس" . ibm.com .
  4. لاندلي، روب (20 يوليو 2002). "إعادة توجيه: ردًا على: ماذا يرمز الحرف "i" في inode؟ دينيس ريتشي لا يعرف أيضًا" . قائمة بريدية لنواة لينكس . تم الاطلاع بتاريخ 12 يناير 2011 .
  5. ريتشي، دينيس م.؛ طومسون، كين (1978). " نظام المشاركة الزمنية في يونكس" . المجلة التقنية لنظام بيل . 57 (6): 1913-1914 . تاريخ الاسترجاع: 19 ديسمبر 2015 .
  6. موريس ج. باخ (1986). تصميم نظام التشغيل يونكس . برنتيس هول. ISBN 978-0132017992.
  7. باخ، موريس ج. (1986). تصميم نظام التشغيل يونكس . برنتيس هول. ص 94. Bibcode : 1986duos.book.....B . 
  8. "linfo" . مشروع معلومات لينكس . تم الاطلاع عليه بتاريخ 11 مارس 2020 .
  9. "التعريفات - 3.176 رقم تسلسل الملف" . مجموعة أوبن . تم الاطلاع عليه بتاريخ 10 يناير 2018 .
  10. 1 2 "<sys/stat.h>" . مجموعة Open Group . تم الاطلاع عليه بتاريخ 15 يناير 2018 .
  11. غوتش، ريتشارد. إنبرغ، بيكا (محرران). "نظرة عامة على نظام الملفات الافتراضي في لينكس" . kernel.org . تم الاطلاع عليه بتاريخ 20 مايو 2023 .
  12. ريتشارد غوتش. إنبرغ، بيكا (محرر). "ذاكرة التخزين المؤقت لإدخالات الدليل (dcache)" . kernel.org . تم الاطلاع عليه بتاريخ 20 مايو 2023 .
  13. "ما هو أمر يونكس لإنشاء رابط ثابت إلى مجلد في نظام التشغيل ماك؟" . ستاك أوفرفلو . ١٦ يناير ٢٠١١. مؤرشف من الأصل في ٥ يناير ٢٠٢٠. تم الاطلاع عليه في ٥ يناير ٢٠٢٠ .
  14. مجتمع تطوير نواة النظام. "القفل" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  15. غوتش، ريتشارد. إنبرغ، بيكا (محرران). "struct inode_operations" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  16. مجتمع تطوير نواة النظام. "قفل الدليل" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  17. مجتمع تطوير نواة النظام. "أنواع الأقفال وقواعدها" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  18. فان دي فين، أ.، مولنار، إ. "مدقق صحة القفل أثناء التشغيل" . kernel.org . تم الاسترجاع في 21 مايو 2023 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  19. مجتمع تطوير نواة النظام. "2. التصميم عالي المستوى" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  20. مجتمع تطوير نواة لينكس. "بيانات تعريفية ذاتية الوصف لنظام ملفات XFS" . kernel.org . مؤرشف من الأصل بتاريخ 21 مايو 2023. تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  21. مجتمع تطوير نواة النظام. "2.7. سياسة تخصيص الكتل والعقد" . kernel.org . تم الاطلاع عليه بتاريخ 21 مايو 2023 .
  22. فادالا، ديريك (2002). "6. أنظمة الملفات". إدارة RAID على لينكس . دار نشر أورايلي ميديا. رقم ISBN 9781565927308.
  23. "نواة لينكس: أنظمة الملفات" . tue.nl .
  24. "تخطيط القرص Ext4" . kernel.org . تم الاطلاع عليه بتاريخ 18 أغسطس 2013 .
  25. "هل يستخدم نظام ويندوز أرقام Inode مثل نظام لينكس؟" . Stack Overflow .
  26. 1 2 3 "دالة GetFileInformationByHandle (fileapi.h) - تطبيقات Win32" . docs.microsoft.com . 27 يوليو 2022.
  27. " [ MS-FSCC ] : أنواع سمات NTFS" . docs.microsoft.com . 20 سبتمبر 2023.
  28. "Windows - الحد الأقصى لحجم الملف الذي يمكن تخزينه بالكامل في جدول الملفات الرئيسي لنظام الملفات NTFS (MFT)" .