أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

أهلاً بكم! نستمر في إطلاق تدفقات جديدة للدورات التي أحببتها بالفعل ونحن الآن في عجلة من أمرنا للإعلان عن بدء مجموعة جديدة من الدورات "مسؤول Linux"التي ستطلق في نهاية أبريل. سيتم تأريخ منشور جديد لهذا الحدث. باستخدام المادة الأصلية ، يمكنك ذلك قرأت هنا.

تعمل أنظمة الملفات الافتراضية كنوع من التجريد السحري الذي يسمح لفلسفة لينكس أن تقول "كل شيء هو ملف".

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

ما هو نظام الملفات؟ بناء على كلمات أحد المساهمين الأوائل في لينكس ومؤلفيها روبرتا لافا، "نظام الملفات هو تخزين هرمي للبيانات التي يتم تجميعها وفقًا لهيكل معين." مهما كان الأمر ، فإن هذا التعريف مناسب تمامًا لـ VFAT (جدول تخصيص الملفات الافتراضي) و Git و كاساندرا (قاعدة بيانات NoSQL). إذن ما الذي يعرف بالضبط شيئًا مثل "نظام الملفات"؟

أساسيات نظام الملفات

نواة Linux لها متطلبات معينة لكيان يمكن اعتباره نظام ملفات. يجب أن تنفذ الأساليب open(), read() и write() للكائنات الثابتة التي لها أسماء. من وجهة نظر وجوه المنحى برمجة، تُعرّف النواة نظام ملفات عام كواجهة مجردة ، وتعتبر هذه الوظائف الثلاثة الكبيرة "افتراضية" وليس لها تعريف ملموس. وفقًا لذلك ، يُطلق على تطبيق نظام الملفات الافتراضي اسم نظام الملفات الافتراضي (VFS).

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

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

الأنظمة المألوفة مثل ext4 و NFS و / proc لها ثلاث وظائف مهمة في بنية بيانات C تسمى ملف_العمليات. بالإضافة إلى ذلك ، تعمل أنظمة ملفات معينة على توسيع وإعادة تعريف وظائف VFS بطريقة مألوفة موجهة للكائنات. كما يشير روبرت لوف ، فإن تجريد VFS يسمح لمستخدمي Linux بنسخ الملفات بلا مبالاة إلى أو من أنظمة تشغيل تابعة لجهات خارجية أو كيانات مجردة مثل الأنابيب دون القلق بشأن تنسيق بياناتهم الداخلي. من جانب المستخدم (مساحة المستخدمين) ، باستخدام استدعاء النظام ، يمكن لعملية نسخ من ملف إلى هياكل بيانات kernel باستخدام الطريقة read() نظام ملف واحد ثم استخدم الطريقة write () نظام ملفات آخر لإخراج البيانات.

توجد تعريفات الوظائف التي تنتمي إلى أنواع VFS الأساسية في الملفات خ /. ج كود مصدر kernel ، بينما الدلائل الفرعية fs/ تحتوي على أنظمة ملفات معينة. يحتوي النواة أيضًا على كيانات مثل cgroups, /dev и tmpfs، والتي تكون مطلوبة أثناء عملية التمهيد وبالتالي يتم تعريفها في دليل kernel الفرعي init/. لاحظ أن cgroups, /dev и tmpfs لا تستدعي وظائف "الثلاثة الكبار" file_operations، ولكن القراءة والكتابة مباشرة في الذاكرة.
يوضح الرسم البياني أدناه كيف تصل مساحة المستخدمين إلى الأنواع المختلفة لأنظمة الملفات المثبتة بشكل شائع على أنظمة Linux. الهياكل غير معروضة pipes, dmesg и POSIX clocks، والتي تقوم أيضًا بتنفيذ الهيكل file_operations، يتم الوصول إليها من خلال طبقة VFS.

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

VFS هي "طبقة مجمعة" بين استدعاءات النظام وتطبيقات معينة file_operationsمثل ext4 и procfs. المهام file_operations يمكن أن تتفاعل مع أي من برامج تشغيل الأجهزة أو أجهزة الوصول إلى الذاكرة. tmpfs, devtmpfs и cgroups لا تستخدم file_operations، ولكن الوصول مباشرة إلى الذاكرة.
يوفر وجود VFS فرصة لإعادة استخدام الكود ، نظرًا لأن الطرق الأساسية المرتبطة بأنظمة الملفات لا يلزم إعادة تنفيذها بواسطة كل نوع من أنواع أنظمة الملفات. إعادة استخدام الكود هو ممارسة شائعة بين مهندسي البرمجيات! ومع ذلك ، إذا كان الكود القابل لإعادة الاستخدام يحتوي على ملفات اخطاء جسيمة، كل التطبيقات التي ترث الأساليب الشائعة تعاني منها.

/ tmp: تلميح بسيط

طريقة سهلة لاكتشاف وجود VFS على النظام هي الكتابة mount | grep -v sd | grep -v :/، والتي ستظهر كل ما تم تحميله (mounted) أنظمة الملفات غير المقيمة في القرص وغير NFS ، وهذا صحيح في معظم أجهزة الكمبيوتر. أحد الحوامل المدرجة (mounts) سوف VFS بلا شك /tmp، حقا؟

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

يعلم الجميع أن التخزين / tmp على وسط مادي - الجنون! مصدر.

لماذا من غير المرغوب تخزينه /tmp على الوسائط المادية؟ لأن الملفات بتنسيق /tmp هي أجهزة مؤقتة وتخزينها أبطأ من الذاكرة حيث يتم إنشاء tmpfs. علاوة على ذلك ، تكون الوسائط المادية أكثر عرضة للارتداء عند الكتابة فوقها من الذاكرة. أخيرًا ، يمكن أن تحتوي الملفات الموجودة في / tmp على معلومات حساسة ، لذا فإن جعلها تختفي عند كل إعادة تشغيل يعد ميزة أساسية.

لسوء الحظ ، تقوم بعض البرامج النصية لتثبيت توزيع Linux بإنشاء / tmp على جهاز التخزين افتراضيًا. لا تيأس إذا حدث هذا لنظامك أيضًا. اتبع بعض التعليمات البسيطة باستخدام القوس ويكيلإصلاح ذلك ، واعلم أن الذاكرة المخصصة لـ tmpfs يصبح غير متوفر لأغراض أخرى. بعبارة أخرى ، يمكن للنظام الذي يحتوي على tmpfs عملاقة وملفات كبيرة أن تنفد من الذاكرة ويتعطل. تلميح آخر: أثناء تحرير ملف /etc/fstab، تذكر أنه يجب أن ينتهي بسطر جديد ، وإلا فلن يقوم نظامك بالتمهيد.

/ proc و / sys

بالإضافة إلى /tmp، VFS (أنظمة الملفات الافتراضية) الأكثر دراية لمستخدمي Linux هي /proc и /sys. (/dev يقيم في الذاكرة المشتركة وليس لديه file_operations). لماذا هذين المكونين؟ دعونا ننظر في هذه المسألة.

procfs يُنشئ لقطة للنواة والعمليات التي تراقبها userspace. في /proc يقوم kernel بطباعة معلومات حول ما هو متوفر ، مثل المقاطعات والذاكرة الافتراضية والمجدول. بجانب، /proc/sys هو المكان الذي تم تكوين المعلمات فيه باستخدام الأمر sysctl، متاح لى userspace. يتم عرض حالة وإحصائيات العمليات الفردية في الدلائل /proc/.

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

ومن /proc/meminfo هو ملف فارغ يحتوي مع ذلك على معلومات قيمة.

سلوك /proc توضح الملفات كيف يمكن أن تكون أنظمة ملفات قرص VFS المختلفة. من جهة /proc/meminfo تحتوي على معلومات يمكن عرضها باستخدام الأمر free. من ناحية أخرى ، إنها فارغة! كيف يعمل؟ يذكرنا الوضع بالمقال الشهير بعنوان هل القمر موجود عندما لا ينظر إليه أحد؟ الواقع ونظرية الكم "كتبه ديفيد ميرمين أستاذ الفيزياء بجامعة كورنيل عام 1985. الحقيقة هي أن النواة تجمع إحصائيات الذاكرة عند تقديم طلب إليها /proc، وفي الواقع في الملفات /proc لا يوجد شيء عندما لا أحد ينظر. كما قيل حورية البحر، "تقول عقيدة الكم الأساسية أن القياس بشكل عام لا يكشف عن قيمة موجودة مسبقًا للممتلكات التي يتم قياسها." (واعتبر السؤال عن القمر واجبًا منزليًا!)
يبدو الفراغ procfs منطقي لأن المعلومات هناك ديناميكية. وضع مختلف قليلا مع sysfs. دعنا نقارن عدد الملفات التي لا يقل حجمها عن بايت واحد /proc و /sys.

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

Procfs يحتوي على ملف واحد ، وهو تكوين kernel المُصدَّر ، وهو استثناء لأنه يحتاج فقط إلى إنشائه مرة واحدة لكل عملية تمهيد. من ناحية أخرى ، في /sys هناك العديد من الملفات الأكبر حجمًا ، يشغل الكثير منها صفحة كاملة من الذاكرة. عادة الملفات sysfs تحتوي على رقم أو سطر واحد بالضبط ، على عكس جداول المعلومات التي تم الحصول عليها من ملفات القراءة مثل /proc/meminfo.

الهدف sysfs - توفير خصائص القراءة / الكتابة لما تسميه النواة «kobjects» في مساحة المستخدمين. الهدف الوحيد kobjects هو حساب الارتباط: عند إزالة الرابط الأخير إلى kobject ، سيستعيد النظام الموارد المرتبطة به. مع ذلك، /sys معظم المشاهير "ABI ثابت لمساحة المستخدمين" الأساسية ، والتي لا يمكن لأحد أبدًا ، تحت أي ظرف من الظروف "استراحة". هذا لا يعني أن الملفات الموجودة في sysfs ثابتة ، مما قد لا يتوافق مع حساب المرجع للكائنات غير المستقرة.
يحدد ABI المستقر للنواة ما يمكن أن يظهر فيه /sys، وليس ما هو موجود بالفعل في تلك اللحظة بالذات. يوفر إدراج أذونات الملفات في sysfs نظرة ثاقبة حول كيفية تكوين الإعدادات القابلة للتكوين للأجهزة والوحدات النمطية وأنظمة الملفات وما إلى ذلك. يمكن تهيئتها أو قراءتها. الاستنتاج المنطقي هو أن procfs أيضًا جزء من ABI الثابت للنواة ، على الرغم من عدم ذكر ذلك صراحةً في توثيق.

أنظمة الملفات الافتراضية في Linux: ما سبب الحاجة إليها وكيف تعمل؟ الجزء 1

الملفات بتنسيق sysfs وصف خاصية معينة لكل كيان ويمكن أن تكون قابلة للقراءة أو الكتابة أو كليهما. يعني "0" في الملف أنه لا يمكن إزالة SSD.

لنبدأ الجزء الثاني من الترجمة بكيفية مراقبة VFS باستخدام أدوات eBPF و bcc ، والآن نحن في انتظار تعليقاتك وندعوك تقليديًا إلى ذلك افتح البرنامج التعليمي على الويب، الذي سيعقده معلمنا في 9 أبريل - فلاديمير دروزديتسكي.

المصدر: www.habr.com

إضافة تعليق