در این مقاله میخوایم به زبان ساده درک دو اصل بسیار مهم initrd و vmlinuz در فرآیند بوت شدن سیستم عامل های لینوکس رو مورد بررسی قرار بدیم. لازم به ذکر میدونم که بگم درک initrd و vmlinuz برای هر System Engineer و Linux Developer ای لازم و ضروری هستش.
بیاید اول از vmlinuz شروع کنیم. به زبان خیلی ساده vmlinuz یه ایمیج فشرده سازی شده ی bootable از کرنل لینوکس هستش. vmlinuz برگرفته از حروف کلمات Virtual Memory LINUx gZip هست. اینجا gZip به همون ایمیج فشرده سازی شده یا همون compressed از کرنل لینوکس اشاره می کنه. علت اینکه vmlinuz رو بصورت compressed طراحی کردن اینه که سیستم سریعتر بوت بشه و بحث memory footprint و ... هم رعایت بشه. vmlinuz بصورت خیلی ساده کارش اینه که در شروع کار سخت افزار های مهم سیستم رو بوسیله درایور ها به سیستم عامل بشناسونه تا خودش از حالت فشرده دربیاد و توی حافظه اصلی که همون RAM هست بارگزاری بشه و ادامه داستان.
نکته : در این فاصله یه نکته شاید مهم رو یادآور بشم که همه چیز توی لینوکس فایل هستش. همین vmlinuz و initrd هر دوشون فایل هستن. پس ذهنتون به چیزای عجیب و غریب منحرف نشه اوکی ؟ دیدتون رو کاملا در این موضوع روشن کنید. حالا در ادامه میریم سراغ initrd که اصلی ترین موضوع بحث مقاله مون هم همینه ...
خوب initrd که مخفف Initial RAM Disk هستش به زبان ساده یه root filesystem موقتی (باز هم تکرار می کنم موقتی) برای فرآیند بوت شدن به کار میاد. initrd به همراه vmlinuz توسط Boot Loader در حافظه RAM بارگزاری میشه که در بوت شدن لینوکس های امروزی که فرآیند دو مرحله ای رو پشت سر میذارن خیلی ضروری و واجب هستش. این فرآیند دو مرحله ای به این اشاره داره که vmlinuz اول میاد درایور های کامپایل شده ای که داخلش هست رو بارگزاری می کنه تا سخت افزار های مهم سیستم شناسایی بشه بعد در کنارش initrd میاد kernel module های اضافی رو توی حافظه RAM بارگزاری می کنه تا سیستم بتونه به کارش ادامه بده.
همونطور که در بالا هم بهش اشاره کردیم initrd به عنوان یک root filesystem موقت کار می کنه تا زمانیکه root filesystem اصلی (یا همون /) روی سیستم mount بشه. حالا این فایل سیستم موقت چه چیزایی رو تو خودش داره ؟ جوابش اینه که initrd تعدادی دایرکتوری و فایل های اجرایی یا همون executable رو تو خودش داره که در درجه اول برای بارگزاری kernel module ها مورد استفاده قرار میگیره. ابزار هایی مثل insmod توی initrd وجود داره که ازش استفاده میشه.
نکته : دقت کنید که فایل سیستم اصلی روت (/) لزومی نداره که توی حافظه لوکال سیستم باشه چون ممکنه توی یه فضای share شده توی شبکه هم باشه. پس الان دونستید که initrd قدرت اینو هم داره که بوسیله kernel module هایی که توی سیستم وجود داره فایل سیستم روت رو که توی shared resource ها قرار داره رو سیستم mount کنه.
حالا اگه بخوایم فرآیند boot شدن لینوکس رو زمانیکه داریم از ساختار initrd استفاده می کنیم براتون بگیم مراحل زیر رو باید خدمتتون عرض کنیم :
1. boot loader میاد vmlinuz (کرنل) و initrd رو توی حافظه RAM بارگزاری می کنه.
2. کرنل initrd رو به RAM disk معمولی تبدیل می کنه و حافظه ای که توسط initrd توی RAM اشغال شده بود رو آزاد می کنه.
3. root device اگه dev/ram0/ یا همون initrd نباشه مکانیم قدیمی change_root مورد استفاده قرار میگیره.
4. در این مرحله root device که اگه dev/ram0/ باشه initrd image به عنوان فایل سیستم روت (بله ، موقت!) روی سیستم mount میشه.
5. sbin/init/ تو این مرحله اجرا میشه که میتونه شامل هر فایل اجرایی ، shell script و برنامه ای باشه که init میتونه اونارو به حالت اجرایی دربیاره. sbin/init/ با uid 0 تو سیستم شناخته میشه.
6. init فایل سیستم روت که با علامت / نشون داده میشه رو روی سیستم mount می کنه.
7. init فایل سیستم روت رو بوسیله pivot_root System Call توی دایرکتوری روت سیستم قرار میده.
8. init در این مرحله sbin/init/ رو روی فایل سیستم روت اجرا می کنه و مراحل عادی بوت ادامه پیدا می کنه.
9. و در آخر initrd file system از روی سیستم برداشته میشه.
مدیر ارشد وب سایت توسینسو و مدرس و متخصص سرویس های مایکروسافت
امیرحسین کریم پور هستم ، مدیر ارشد وب سایت توسینسو ، متخصص در حوزه سیستم عامل های کلاینت و سرور شرکت مایکروسافت و سرویس های مربوطه ، سیستم عامل لینوکس ، مجازی سازی سرور ، فایروال و ... سابقه کار با سازمان ها و شرکت های مختلف در زمینه سرویس های مایکروسافت در قالب پروژه ، مشاوره و آموزش. علاقه مند به حوزه امنیت اطلاعات و تست نفوذ سنجی
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود