آموزش کنترل پارامترهای Boot-Time کرنل در لینوکس
سیستمعامل لینوکس برای راهاندازی (بوت) به مجموعهای از تنظیمات نیاز دارد که باید پیش از آغاز فرآیند بارگذاری سیستمعامل به کرنل اعلام شوند. این تنظیمات که به اصطلاح پارامترهای Boot-Time نامیده میشوند، به کرنل میگویند که چگونه سختافزار را راهاندازی کند، کدام دستگاه به عنوان روت فایلسیستم باید استفاده شود، چه مقدار حافظه در دسترس باشد و یا اینکه چگونه خطاها در هنگام بوت مدیریت شوند.
در این مطلب، ابتدا شرح میدهیم این پارامترها از کجا میآیند، سپس ساختار آنها را بررسی میکنیم، نحوه افزودن موقت یا دائمی این پارامترها را توضیح میدهیم و در نهایت به معرفی چند نمونه رایج میپردازیم که هر مدیر سیستم لینوکس باید با آنها آشنا باشد.
منظور از پارامترهای Boot-Time چیست؟
پارامترهای Boot-Time معمولا توسط لودر بوت (bootloader) به کرنل منتقل میشوند. لودر بوت بخش کوچکی از نرمافزار است که بلافاصله پس از روشن شدن ماشین اجرا میشود و مسئول بارگذاری کرنل به حافظه است. در اکثر توزیعهای لینوکس امروزی، گراب (GRUB) به عنوان لودر بوت بهکار میرود، در برخی توزیعهای سبکتر ممکن است از Syslinux یا LILO استفاده شود.
هنگامی که لودر بوت کنترل را به کرنل واگذار میکند، پارامترهای تعریفشده نیز به کرنل انتقال مییابند، تا کرنل بتواند از همان ابتدا با اطلاعات صحیح راهاندازی گردد.
مثال سادهای از خط فرمان لودر بوت در گراب چنین است:
- root=/dev/sda1 به کرنل میگوید که فایلسیستم روت در دستگاه /dev/sda1 است
- ro باعث میشود که فایلسیستم root اول به صورت read-only مونت شود
- quiet باعث میشود پیامهای بوت بیشتر مخفی شوند
- splash باعث نمایش اسپلش اسکرین (به جای نمایش متن پیامها) خواهد شد.
بنابراین قبل از اینکه لینوکس حتی شروع به مقداردهی اولیه سرویسها کند، کرنل از قبل میداند چه کاری باید انجام دهد.
ساختار و دستهبندی پارامترها
پارامترهای بوت کرنل فقط سوئیچهای تصادفی نیستند، بلکه بر اساس بخشهای مختلف سیستم سازمانیافتهاند. در این بخش به دستههای اصلی و نمونههایی از هر دسته میپردازیم.
پایههای سیستم (System Basics)
این پارامترها به کرنل میگویند سیستم چگونه آغاز شود و کجا میتوان فایل سیستم root را جستجو کرد
- root=/dev/xxx – دستگاه یا پارتیشنی که فایلسیستم root روی آن قرار دارد
- Ro – مونت فایلسیستم root در مرحله بوت به صورت read-only، تا سیستم کامل راهاندازی شود
- rw – فایلسیستم root بلافاصله به صورت read-write مونت شود.
- init=/path/to/init – استفاده از برنامه init سفارشی، مفید برای اهداف آزمایشی یا نجات سیستم
نمایش کنسول و دیباگ (Console & Debugging)
این پارامترها پیامهای نمایش داده شده در هنگام راهاندازی سیستم را کنترل میکنند، که به ویژه برای عیبیابی در هنگام بروز مشکل مفید هستند.
- quiet نمایش حداقلی پیامها، مناسب برای بوت تمیز و آرام.
- debug فعالسازی خروجی دقیقتر از کرنل (kernel) برای عیبیابی بوت.
- console=ttyS0,115200 ارسال خروجی کرنل به کنسول سریال ttyS0 با سرعت ۱۱۵۲۰۰ بیت بر ثانیه، مفید در محیطهای سرور یا embedded
- loglevel=3 تعیین سطح جزئیات پیامها در بوت (مثلا سطح ۰ فقط موارد اضطراری، سطح ۷ تمام پیامها)
کنترل سختافزار (Hardware Control)
گاهی سختافزار ممکن است با تنظیمات پیشفرض مشکلاتی ایجاد کند، بنابراین با این پارامترها میتوان ویژگیهایی همچون APIC یا ACPI را دستکاری کرد:
- noapic غیرفعالسازی APIC (Advanced Programmable Interrupt Controller)، که در برخی سختافزارهای قدیمی مشکلساز است.
- acpi=off غیرفعالسازی ACPI (Advanced Configuration and Power Interface)، که ممکن است مشکلات مدیریتی برق یا سازگاری ایجاد کند.
- pci=noacpi جلوگیری از مدیریت وقفههای PCI توسط ACPI
مدیریت حافظه و پردازنده (Memory & CPU Management)
برای محیطهایی که تنظیمات خاص حافظه یا هسته CPU دارند (مانند ماشینهای مجازی یا سرورها)، این پارامترها مفید هستند:
- mem=512M محدود کردن حافظهی قابلشناسایی به ۵۱۲ مگابایت، مفید برای تست یا سیستمهای با منابع کم.
- maxcpus=2 تنها دو هسته پردازشی را فعال مینماید.
- Nosmp غیرفعالسازی پشتیبانی از چند پردازنده (multiprocessor)، در موارد خاص که مایلید سیستم تکهستهای راهاندازی شود.
بازیابی و رفع خطا (Recovery & Troubleshooting)
زمانی که قصد دارید سیستم را برای رفع مشکل راهاندازی کنید یا برخی قیدها را به طور موقت بردارید، این پارامترها به کمک میآیند:
- initcall_debug فعالسازی ردیابی (trace) فراخوانیهای init، که میتواند برای یافتن مشکل در راهاندازی استفاده شود.
- panic=10 در صورت وقوع خطای بحرانی کرنل، بعد از ۱۰ ثانیه سیستم به صورت خودکار ریبوت شود.
- selinux=0 غیرفعالسازی SELinux
نحوه افزودن پارامترها به صورت موقت
گاهی اوقات لازم است بدون تغییر دائمی تنظیمات، پارامتری را بهصورت موقت به خط فرمان بوت اضافه کنید؛ مثلا برای تست یا رفع فوری مشکل. برای این کار:
- سیستم را ریستارت کنید و وقتی اولین صفحه BIOS/UEFI نمایش داده شد، منوی گراب را باز کنید. در سیستمهای BIOS معمولا کلید Shift را نگه دارید و در سیستمهای UEFI ممکن است کلید Esc لازم باشد.
- کرنلی که قصد راهاندازی آن را دارید انتخاب کرده و کلید e را برای ویرایش بزنید.
- در خطی که با linux یا linuxefi شروع میشود، پارامترهای موردنظر را در انتهای آن اضافه کنید.
برای مثال، برای غیرفعال کردن موقت ACPI، میتوانید acpi=off را اضافه کنید:
- سپس با زدن Ctrl + X یا F10 بوت را ادامه دهید. این تغییر تنها برای آن بار بوت اعمال میشود و پس از ریستارت بعدی، تنظیمات به حالت سابق بازخواهد گشت.
نحوه افزودن پارامترها به صورت دائمی
اگر پس از تست موقت، مطمئن شدید که پارامتر جدید عملکرد مطلوب دارد و باید همیشه فعال باشد، باید آن را به فایل تنظیمات گراب اضافه کنید تا در هر بوت اجرا شود:
1. با ویرایشگر متنی فایل تنظیمات گراب را باز کنید
به دنبال خطی بگردید که شبیه به این باشد:
سپس پارامتر موردنظر خود را درون کوتیشنها اضافه کنید؛ مثلا
فایل را ذخیره کرده و از ویرایشگر خارج شوید.
سپس باید گراب را بهروزرسانی کنید تا تغییرات اعمال شود
در پایان سیستم را ریستارت کنید تا پارامتر جدید در هر بوت اعمال شود.
سرور مجازی یک ماشین مجازی کامل است که با استفاده از تکنولوژی ابری ایجاد شده و کارایی بالایی به توسعه دهندگان ارائه میکند.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، فرانسه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
پارامترهای پرکاربرد که هر مدیر سیستم باید بداند
در ادامه چند پارامتر رایج و کاربردی را معرفی میکنیم که برای راهاندازی، عیبیابی یا بهینهسازی بوت لینوکس بسیار مفید هستند:
- root=/dev/sda1 – تعیین دستگاه یا پارتیشن فایلسیستم root
- ro – مونت فایلسیستم root به صورت read-only در ابتدا
- rw – مونت فایلسیستم root به صورت read-write
- quiet – کاهش نمایش پیامهای راهاندازی برای بوت تمیزتر
- Debug – فعالسازی خروجی بیشتر از کرنل برای عیبیابی
- acpi=off – غیرفعالسازی ACPI، که در برخی سختافزارها مشکلزاست
- noapic – غیرفعالسازی APIC، برای حل برخی از مشکلات وقفهها در تجهیزات قدیمی
- mem=512M – محدود کردن حافظه در دسترس به ۵۱۲ مگابایت، برای محیطهای تست یا موارد خاص
- maxcpus=2 – استفاده از تنها دو هسته پردازنده
- init=/path/to/init – استفاده از یک برنامه init سفارشی، مثلا در وضعیت نجات (rescue) یا محیط تست
جمعبندی
پارامترهای بوت کرنل مانند کلیدهایی هستند که کنترل نحوه راهاندازی سیستم لینوکس را دست کاربر میدهند. اینکه چگونه سختافزار آغاز شود، چه دستگاهی فایلسیستم root را تامین کند، چه گزارشاتی هنگام بوت نمایش داده شوند و چگونه مشکلات یا خطاها مدیریت گردند. اگر با مشکلی روبرو شدید که سیستم بوت نمیشود یا بوت زمانبر است، احتمالا پاسخ در همین چند کلمه اضافه بر خط فرمان کرنل نهفته است.
چه برای عیبیابی، چه برای بهینهسازی یا فقط برای یادگیری بیشتر ساختار داخلی لینوکس، آشنایی با این پارامترها به شما امکان میدهد که کنترل دقیقتری بر نحوه راهاندازی سیستم داشته باشید. دفعه بعدی که سیستم شما دیر بوت شود، یا میخواهید یکی از ویژگیهای سختافزار را غیرفعال کنید، به یاد داشته باشید که پاسخ ممکن است در افزودن چند پارامتر به فرمان بوت باشد.