أهلاً بكم! نستمر في إطلاق تدفقات جديدة للدورات التي أحببتها بالفعل ونحن الآن في عجلة من أمرنا للإعلان عن بدء مجموعة جديدة من الدورات
تعمل أنظمة الملفات الافتراضية كنوع من التجريد السحري الذي يسمح لفلسفة لينكس أن تقول "كل شيء هو ملف".
ما هو نظام الملفات؟ بناء على كلمات أحد المساهمين الأوائل في لينكس ومؤلفيها
أساسيات نظام الملفات
نواة Linux لها متطلبات معينة لكيان يمكن اعتباره نظام ملفات. يجب أن تنفذ الأساليب open()
, read()
и write()
للكائنات الثابتة التي لها أسماء. من وجهة نظر وجوه المنحى
إذا تمكنا من فتح كيان ما وقراءته والكتابة إليه ، فسيتم اعتبار هذا الكيان ملفًا ، كما يمكننا أن نرى من المثال الموجود في وحدة التحكم أعلاه.
تؤكد ظاهرة VFS فقط على الملاحظة الشبيهة بيونكس بأن "كل شيء هو ملف". فكر في مدى غرابة هذا المثال الصغير / dev / console أعلاه الذي يوضح كيف تعمل وحدة التحكم بالفعل. تُظهر الصورة جلسة Bash تفاعلية. يؤدي إرسال سلسلة إلى وحدة التحكم (جهاز وحدة التحكم الافتراضية) إلى عرضها على شاشة افتراضية. تتمتع VFS بخصائص أخرى ، حتى أكثر غرابة. على سبيل المثال ، يسمح لك بالبحث عن طريق
الأنظمة المألوفة مثل ext4 و NFS و / proc لها ثلاث وظائف مهمة في بنية بيانات C تسمى read()
نظام ملف واحد ثم استخدم الطريقة write ()
نظام ملفات آخر لإخراج البيانات.
توجد تعريفات الوظائف التي تنتمي إلى أنواع VFS الأساسية في الملفات fs/
تحتوي على أنظمة ملفات معينة. يحتوي النواة أيضًا على كيانات مثل cgroups
, /dev
и tmpfs
، والتي تكون مطلوبة أثناء عملية التمهيد وبالتالي يتم تعريفها في دليل kernel الفرعي init/
. لاحظ أن cgroups
, /dev
и tmpfs
لا تستدعي وظائف "الثلاثة الكبار" file_operations
، ولكن القراءة والكتابة مباشرة في الذاكرة.
يوضح الرسم البياني أدناه كيف تصل مساحة المستخدمين إلى الأنواع المختلفة لأنظمة الملفات المثبتة بشكل شائع على أنظمة Linux. الهياكل غير معروضة pipes
, dmesg
и POSIX clocks
، والتي تقوم أيضًا بتنفيذ الهيكل file_operations
، يتم الوصول إليها من خلال طبقة VFS.
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
، حقا؟
يعلم الجميع أن التخزين / 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/
.
ومن /proc/meminfo
هو ملف فارغ يحتوي مع ذلك على معلومات قيمة.
سلوك /proc
توضح الملفات كيف يمكن أن تكون أنظمة ملفات قرص VFS المختلفة. من جهة /proc/meminfo
تحتوي على معلومات يمكن عرضها باستخدام الأمر free
. من ناحية أخرى ، إنها فارغة! كيف يعمل؟ يذكرنا الوضع بالمقال الشهير بعنوان /proc
، وفي الواقع في الملفات /proc
لا يوجد شيء عندما لا أحد ينظر. كما قيل
يبدو الفراغ procfs
منطقي لأن المعلومات هناك ديناميكية. وضع مختلف قليلا مع sysfs
. دعنا نقارن عدد الملفات التي لا يقل حجمها عن بايت واحد /proc
و /sys
.
Procfs
يحتوي على ملف واحد ، وهو تكوين kernel المُصدَّر ، وهو استثناء لأنه يحتاج فقط إلى إنشائه مرة واحدة لكل عملية تمهيد. من ناحية أخرى ، في /sys
هناك العديد من الملفات الأكبر حجمًا ، يشغل الكثير منها صفحة كاملة من الذاكرة. عادة الملفات sysfs
تحتوي على رقم أو سطر واحد بالضبط ، على عكس جداول المعلومات التي تم الحصول عليها من ملفات القراءة مثل /proc/meminfo
.
الهدف sysfs
- توفير خصائص القراءة / الكتابة لما تسميه النواة «kobjects»
في مساحة المستخدمين. الهدف الوحيد kobjects
هو حساب الارتباط: عند إزالة الرابط الأخير إلى kobject ، سيستعيد النظام الموارد المرتبطة به. مع ذلك، /sys
معظم المشاهير
يحدد ABI المستقر للنواة ما يمكن أن يظهر فيه /sys
، وليس ما هو موجود بالفعل في تلك اللحظة بالذات. يوفر إدراج أذونات الملفات في sysfs نظرة ثاقبة حول كيفية تكوين الإعدادات القابلة للتكوين للأجهزة والوحدات النمطية وأنظمة الملفات وما إلى ذلك. يمكن تهيئتها أو قراءتها. الاستنتاج المنطقي هو أن procfs أيضًا جزء من ABI الثابت للنواة ، على الرغم من عدم ذكر ذلك صراحةً في
الملفات بتنسيق sysfs
وصف خاصية معينة لكل كيان ويمكن أن تكون قابلة للقراءة أو الكتابة أو كليهما. يعني "0" في الملف أنه لا يمكن إزالة SSD.
لنبدأ الجزء الثاني من الترجمة بكيفية مراقبة VFS باستخدام أدوات eBPF و bcc ، والآن نحن في انتظار تعليقاتك وندعوك تقليديًا إلى ذلك
المصدر: www.habr.com