فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

سلام به همه! ما همچنان به راه اندازی استریم های جدید برای دوره هایی که قبلاً عاشق آنها شده اید ادامه می دهیم و اکنون عجله داریم که اعلام کنیم مجموعه جدیدی از دوره ها را شروع می کنیم. "مدیر لینوکس"که در پایان ماه آوریل راه اندازی می شود. تاریخ انتشار جدیدی برای این رویداد منتشر خواهد شد. با مواد اصلی می توانید اینجا بخوانید.

سیستم های فایل مجازی به عنوان نوعی انتزاع جادویی عمل می کنند که به فلسفه لینوکس اجازه می دهد بگوید "همه چیز یک فایل است."

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

فایل سیستم چیست؟ بر اساس صحبت های یکی از اولین مشارکت کنندگان و نویسندگان لینوکس روبرتا گدازه, "یک سیستم فایل یک ذخیره سازی سلسله مراتبی از داده ها است که بر اساس یک ساختار خاص جمع آوری شده است." به هر حال، این تعریف به همان اندازه برای VFAT (جدول تخصیص فایل مجازی)، Git و کاساندرا (پایگاه داده NoSQL). بنابراین دقیقاً چه چیزی به عنوان "فایل سیستم" تعریف می شود؟

مبانی سیستم فایل

هسته لینوکس الزامات خاصی برای موجودیتی دارد که می تواند یک سیستم فایل در نظر گرفته شود. باید روش ها را اجرا کند open(), read() и write() برای اشیاء ثابتی که نام دارند. از دیدگاه شی گرا برنامه نويسي، هسته یک فایل سیستم عمومی را به عنوان یک رابط انتزاعی تعریف می کند و این سه تابع بزرگ "مجازی" در نظر گرفته می شوند و هیچ تعریف مشخصی ندارند. بر این اساس، پیاده سازی سیستم فایل پیش فرض، سیستم فایل مجازی (VFS) نامیده می شود.

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

اگر بتوانیم یک موجود را باز کنیم، بخوانیم و بنویسیم، آن موجودیت یک فایل در نظر گرفته می شود، همانطور که از مثال موجود در کنسول بالا می بینیم.
پدیده VFS تنها بر مشاهدات یونیکس مانند تأکید می کند که "همه چیز یک فایل است". فکر کنید که چقدر عجیب است که مثال کوچک /dev/console بالا نشان می دهد که کنسول واقعا چگونه کار می کند. تصویر یک جلسه تعاملی Bash را نشان می دهد. ارسال یک رشته به کنسول (دستگاه کنسول مجازی) آن را در یک صفحه مجازی نمایش می دهد. VFS ویژگی های دیگر، حتی عجیب تری نیز دارد. به عنوان مثال، به شما امکان جستجو بر اساس را می دهد اون.

سیستم های آشنا مانند ext4، NFS و /proc دارای سه عملکرد مهم در ساختار داده C هستند که به آنها می گویند. file_operations. بعلاوه، سیستم های فایل خاصی، عملکرد VFS را به شیوه ای آشنا به شی گرا گسترش داده و دوباره تعریف می کنند. همانطور که رابرت لاو اشاره می‌کند، انتزاع VFS به کاربران لینوکس اجازه می‌دهد تا فایل‌ها را بدون نگرانی در مورد قالب داده‌های داخلی خود، بدون نگرانی از فایل‌ها در سیستم‌عامل‌های شخص ثالث یا موجودیت‌های انتزاعی مانند لوله‌ها یا از آنها کپی کنند. در سمت کاربر (فضای کاربری)، با استفاده از فراخوانی سیستم، یک فرآیند می تواند با استفاده از روش، از یک فایل به ساختارهای داده هسته کپی کند. read() یک سیستم فایل و سپس از روش استفاده کنید write () سیستم فایل دیگری برای خروجی داده

تعاریف تابعی که به انواع پایه VFS تعلق دارد در فایل ها موجود است fs/*.c کد منبع هسته، در حالی که زیر شاخه ها fs/ شامل سیستم های فایل خاصی است. هسته همچنین شامل موجودیت هایی مانند cgroups, /dev и tmpfs، که در طول فرآیند بوت مورد نیاز هستند و بنابراین در زیر شاخه کرنل تعریف می شوند init/. توجه کنید که cgroups, /dev и tmpfs "سه عملکرد بزرگ" را صدا نکنید file_operations، اما مستقیماً در حافظه بخوانید و بنویسید.
نمودار زیر نشان می‌دهد که چگونه فضای کاربران به انواع مختلف فایل سیستم‌هایی که معمولاً روی سیستم‌های لینوکس نصب می‌شوند دسترسی پیدا می‌کند. سازه ها نشان داده نشده اند pipes, dmesg и POSIX clocks، که ساختار را نیز پیاده سازی می کنند file_operations، از طریق لایه VFS قابل دسترسی است.

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 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، درست؟

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

همه آن ذخیره سازی را می شناسند / tmp در یک رسانه فیزیکی - جنون! منبع.

چرا ذخیره سازی نامطلوب است /tmp در رسانه های فیزیکی؟ زیرا فایل های موجود در /tmp موقت هستند و دستگاه های ذخیره سازی کندتر از حافظه ای که tmpfs در آن ایجاد می شود، هستند. علاوه بر این، رسانه های فیزیکی در هنگام بازنویسی بیشتر از حافظه مستعد سایش هستند. در نهایت، فایل‌های موجود در tmp/ می‌توانند حاوی اطلاعات حساس باشند، بنابراین ناپدید شدن آنها در هر راه‌اندازی مجدد یک ویژگی ضروری است.

متأسفانه برخی از اسکریپت های نصب توزیع لینوکس /tmp را به طور پیش فرض در دستگاه ذخیره سازی ایجاد می کنند. اگر این اتفاق برای سیستم شما نیز افتاد ناامید نشوید. چند دستورالعمل ساده را دنبال کنید بایگانی Wikiبرای رفع این مشکل و توجه داشته باشید که حافظه اختصاص داده شده برای tmpfs برای مقاصد دیگر در دسترس نیست. به عبارت دیگر، سیستمی با tmpfs غول پیکر و فایل های بزرگ روی آن ممکن است حافظه اش تمام شود و از کار بیفتد. نکته دیگر: هنگام ویرایش یک فایل /etc/fstab، به یاد داشته باشید که باید با یک خط جدید تمام شود، در غیر این صورت سیستم شما بوت نمی شود.

/proc و /sys

در کنار /tmpVFS (سیستم های فایل مجازی) که برای کاربران لینوکس بیشتر آشنا هستند /proc и /sysاست. (/dev در حافظه مشترک قرار دارد و ندارد file_operations). چرا این دو جزء؟ بیایید به این موضوع نگاه کنیم.

procfs یک عکس فوری از هسته و فرآیندهایی که برای آنها نظارت می کند ایجاد می کند userspaceاست. به /proc هسته اطلاعاتی را در مورد آنچه در دسترس است چاپ می کند، مانند وقفه ها، حافظه مجازی و زمانبندی. بعلاوه، /proc/sys مکانی است که پارامترها با دستور پیکربندی شده اند sysctl، در دسترس برای userspace. وضعیت و آمار فرآیندهای فردی در کاتالوگ ها نمایش داده می شود /proc/.

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

اینجا /proc/meminfo یک فایل خالی است که با این وجود حاوی اطلاعات ارزشمندی است.

رفتار /proc فایل ها نشان می دهد که سیستم های فایل دیسک VFS چقدر می توانند متفاوت باشند. از یک طرف، /proc/meminfo حاوی اطلاعاتی است که با دستور قابل مشاهده است free. از طرفی جایش خالیه! چگونه کار می کند؟ این وضعیت یادآور مقاله معروف با عنوان است آیا ماه زمانی وجود دارد که کسی به آن نگاه نمی کند؟ واقعیت و نظریه کوانتومینوشته شده توسط استاد فیزیک دانشگاه کرنل، دیوید مرمین در سال 1985. واقعیت این است که هسته زمانی که درخواستی به آن داده می شود، آمار حافظه را جمع آوری می کند /proc، و در واقع در فایل ها /proc وقتی کسی نگاه نمی کند چیزی وجود ندارد. همانطور که گفته شد مرمیندکترین کوانتومی بنیادی می‌گوید که اندازه‌گیری معمولاً یک مقدار از قبل موجود از ویژگی مورد اندازه‌گیری را نشان نمی‌دهد. (و سوال در مورد ماه را تکلیف در نظر بگیرید!)
به ظاهر پوچی procfs منطقی است زیرا اطلاعات موجود در آن پویا است. وضعیت کمی متفاوت با sysfs. بیایید مقایسه کنیم چند فایل که حداقل یک بایت اندازه دارند /proc و /sys.

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

Procfs دارای یک فایل، یعنی پیکربندی هسته صادر شده، که یک استثنا است زیرا فقط باید یک بار در هر بوت ایجاد شود. از سوی دیگر، در /sys بسیاری از فایل های بزرگتر وجود دارد که بسیاری از آنها یک صفحه کامل از حافظه را اشغال می کنند. معمولا فایل ها sysfs بر خلاف جداول اطلاعاتی که از خواندن فایل هایی مانند /proc/meminfo.

هدف sysfs - ویژگی های خواندن/نوشتن آنچه را که هسته فراخوانی می کند، ارائه دهید «kobjects» در فضای کاربران تنها هدف kobjects شمارش پیوند است: هنگامی که آخرین پیوند به یک kobject حذف شود، سیستم منابع مرتبط با آن را بازیابی می کند. با این اوصاف، /sys بیشتر معروف ها را تشکیل می دهد "پایدار ABI برای فضای کاربران" هسته ای، که هیچ کس هرگز، تحت هیچ شرایطی نمی تواند "زنگ تفريح". این بدان معنا نیست که فایل‌ها در sysfs ثابت هستند، که با شمارش مرجع اشیاء ناپایدار ناسازگار است.
ABI پایدار هسته چیزی را که می تواند در آن ظاهر شود محدود می کند /sys، نه آنچه در آن لحظه خاص وجود دارد. فهرست کردن مجوزهای فایل در sysfs بینشی در مورد نحوه تنظیم تنظیمات برای دستگاه ها، ماژول ها، سیستم های فایل و غیره ارائه می دهد. را می توان پیکربندی کرد یا خواند. نتیجه منطقی این است که procfs نیز بخشی از ABI پایدار هسته است، اگرچه این به صراحت در مستندات.

فایل سیستم های مجازی در لینوکس: چرا به آنها نیاز است و چگونه کار می کنند؟ قسمت 1

فایل ها در sysfs یک ویژگی خاص را برای هر موجود توصیف کنید و می تواند قابل خواندن، قابل نوشتن یا هر دو باشد. "0" در فایل به این معنی است که SSD را نمی توان حذف کرد.

بیایید قسمت دوم ترجمه را با نحوه نظارت بر VFS با استفاده از ابزارهای eBPF و bcc شروع کنیم و اکنون منتظر نظرات شما هستیم و به طور سنتی از شما دعوت می کنیم وبینار باز، که توسط معلم ما در 9 فروردین برگزار می شود - ولادیمیر دروزدتسکی.

منبع: www.habr.com

اضافه کردن نظر