پیکربندی GRUB2 برای سیستم عامل لینوکس
مقاله

پیکربندی GRUB2 برای سیستم عامل لینوکس

در این مقاله تلاش شده است تا نقش "GRUB boot loader" در راه اندازی کرنل سیستم عامل به تفصیل توضیح داده شود. لذا مقدمه اجمالی در خصوص GRUB2 ارائه می شود.

GRUB

GRUB مخفف GRand Unified Bootloader است. GRUB از چندین کرنل لینوکس پشتیبانی می کند و به کاربر این امکان را می دهد تا با استفاده از یک منو در زمان بوت شدن، امکان انتخاب را داشته باشد. GRUB ابزار بسیار مفیدی است چرا که در برخی مواقع یک نرم افزار و یا سرویس با نسخه خاصی از کرنل کار می کند که در صورت استفاده از نسخه های بالاتر با مشکل مواجه می شود. در این مواقع با بوت شدن کرنل های قدیمی تر مشکل شما رفع خواهد شد.

GRUB menu

وظیفه GRUB menu این است که کاربر در صورت عدم انتخاب کرنل پیش فرض مورد نظر، یکی از کرنل های نصب شده را برای بوت شدن انتخاب کند. استفاده از کلیدهای بالا و پایین کیبورد به شما امکان می دهد کرنل مورد نظر خود را انتخاب کنید و با فشار دادن کلید Enter روند بوت را با استفاده از کرنل انتخاب شده ادامه دهید.

GRUB menu همچنین یک زمان بندی را فراهم می کند به طوری که در صورت عدم انتخاب کاربر ، GRUB بدون دخالت کاربر به بوت شدن، با کرنل پیش فرض ادامه می دهد. فشار دادن هر کلید روی صفحه کلید به جز کلید Enter تایمر شمارش معکوس را که روی کنسول نمایش داده می شود، خاتمه می دهد. فشار دادن کلید Enter بلافاصله روند بوت را با کرنل پیش فرض یا یک انتخاب اختیاری ادامه می دهد.

GRUB menu همچنین یک کرنل "Rescue" را برای استفاده در هنگام عیب یابی یا هنگامی که کرنل های معمولی به دلایلی روند بوت را کامل نمی کنند، فراهم می کند.

The grub.cfg file

فایل grub.cfg، فایل مربوط به پیکربندی GRUB است. این برنامه توسط grub2-mkconfig با استفاده از مجموعه ای از فایل های پیکربندی اولیه و فایل پیش فرض grub به عنوان منبعی برای مشخصات پیکربندی کاربر تولید می شود.

فایل /boot/grub2/grub.cfg برای اولین بار در حین نصب لینوکس تولید می شود و هنگام نصب کرنل جدید، بازسازی می شود.

فایل grub.cfg حاوی کد Bash مانند و لیستی از کرنل های نصب شده در آرایه ای است که به ترتیب نصب آنان انجام می شود. به عنوان مثال، اگر شما چهار کرنل نصب شده دارید، جدیدترین کرنل در فهرست، 0 خواهد بود، کرنل قبلی در فهرست، 1 قرار دارد و قدیمی ترین کرنل آن فهرست، 3 خواهد بود. 

GRUB configuration files

مجموعه فایل های پیکربندی grub.cfg در دایرکتوری /etc/grub.d قرار دارد. هر یک از فایل های موجود در این مسیر، شامل کد GRUB هستند که در فایل grub.cfg جمع آوری می شوند. هر یک از نسخه های موجود، آغاز و پایان مشخصی در فایل grub.cfg دارند. به عنوان مثال:

### BEGIN /etc/grub.d/10_linux ###

### END /etc/grub.d/10_linux ###

توجه داشته باشید که این فایل ها نباید تغییر داده شوند مگر اینکه شما یک متخصص GRUB باشید و بدانید که چه تغییراتی باید بدهید. حتی در صورت داشتن تخصص، پیش از اعمال تغییرات حتما باید از فایل grub.cfg یک بکاپ بگیرید. البته فایل هایی مانند 40_custom و 41_custom برای ایجاد تغییرات کاربر در پیکربندی GRUB در نظر گرفته شده است. 

GRUB defaults file

پیکربندی GRUB اصلی بسیار ساده و راحت بود. تنها فایل grub.conf در مسیر boot/grub/ را تغییر داده می شد. برای تغییر GRUB2 باید به مسیر boot/grub2/ بروید و فایل grub.cfg را  تغییر دهید ، اما GRUB2 به طور قابل توجهی پیچیده تر از GRUB اصلی است. علاوه بر این، هنگام نصب کرنل جدید، grub.cfg ممکن است رونویسی(overwrites) شود، بنابراین هرگونه تغییر ممکن است از بین برود. 

هنگامی که تغییر پیکربندی GRUB2 را یاد بگیرید متوجه می شوید که این تغییر چندان پیچیده هم نیست. فایل مربوط به GRUB در مسیر /etc/default  قرار دارد که با یک دستور ساده ترمینال، مورد استفاده قرار می گیرد. در دایرکتوری /etc ، فایل پیکربندی چند برنامه مانند Google Chrome ، useradd و grub قرار دارد. 

فایل /etc/default/grub بسیار ساده است. دستورات زیر یک فایل پیش فرض مربوط به grub می باشد.

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g'   /etc/system-release)"

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_fedora25vm/root

rd.lvm.lv=fedora_fedora25vm/swap

rd.lvm.lv=fedora_fedora25vm/usr rhgb quiet"

GRUB_DISABLE_RECOVERY="true"

در ادامه به توضیح هر یک از مقادیر این فایل پرداخته می شود.

  • GRUB_TIMEOUT

مقدار این کلید مدت زمانی را نشان می دهد که فهرست انتخاب GRUB نمایش داده می شود. GRUB این امکان را دارد که چندین کرنل را به طور همزمان نصب کنید و با استفاده از منوی GRUB بین آنها ، در زمان بوت شدن، یک گزینه را انتخاب کنید. مقدار پیش فرض این کلید 5 ثانیه است.

  • GRUB_DISTRIBUTOR

این کلید عبارت sed را تعریف می کند که شماره انتشار توزیع سیستم عامل را از پرونده  /etc/ system-release منتشر می کند. با توجه به تغییر در ساختار داده ها در فایل سیستم توزیع های مختلف لینوکس ، sed ممکن است در سیستم شما متفاوت باشد.

  • GRUB_DEFAULT

این کلید مشخص می کند که کدام کرنل به صورت پیش فرض لود شود. جدیدترین کرنل به عنوان مقدار این کلید ذخیره می شود. در صورتی که سه کرنل نصب شده دارید و کرنل دیگری نصب کنید، بطور خودکار کرنل چهارم در هنگام بوت شدن انتخاب می شود. برای انتخاب یک کرنل دلخواه مقدار این کلید را با نام آن کرنل قرار دهید به عنوان مثال: 4.8.13-300.fc25.x86_64

  • GRUB_SAVEDEFAULT

این گزینه در پرونده پیش فرض grub وجود ندارد. در صورتی که هنگام بوت شدن یک کرنل دلخواه انتخاب شود تنها یک بار آن کرنل لود می شود و در صورت ریستارت مجدد، همان کرنل پیش فرض لود خواهد شد. در صورتی که مقدار GRUB_SAVEDEFAULT برابر true باشد و مقدار GRUB_DEFAULT برابر saved باشد، کرنل انتخابی در هنگام بوت شدن، به عنوان کرنل پیش فرض در نظر گرفته می شود.

  • GRUB_DISABLE_SUBMENU

برخی از افراد ممکن است بخواهند یک ساختار منوی سلسله مراتبی از کرنل برای صفحه منوی GRUB ایجاد کنند. این کلید به همراه برخی تنظیمات اضافی از kernel stanzas در grub.cfg امکان ایجاد چنین سلسله مراتبی را فراهم می کند. 

  • GRUB_TERMINAL_OUTPUT

در برخی از محیط ها ممکن است مطلوب یا ضروری باشد که بتوانید خروجی را به یک کنسول یا ترمینال نمایشگر دیگر هدایت کنید. به صورت پیش فرض، خروجی به یک ترمینال مشخص ارسال می شود، معمولاً "کنسول" برابر با صفحه نمایش استاندارد در کامپیوتر کلاس Intel است. 

  • GRUB_TERMINAL_INPUT

این کلید هم مانند GRUB_TERMINAL_OUTPUT به جهت ورودی یک کیبورد استاندارد و همچنین هدایت از یک ترمینال استاندارد مانند ILO ضروری می باشد.

  • GRUB_CMDLINE_LINUX

این کلید حاوی آرگومان های خط فرمان است که در زمان بوت به کرنل منتقل می شود. توجه داشته باشید که این آرگومان ها برای همه کرنل های نصب شده به فایل grub.cfg اضافه می شوند. این بدان معنی است که تمام کرنل های نصب شده هنگام بوت شدن آرگومان های یکسانی دارند.

  • GRUB_CMDLINE_LINUX

هنگامی که مقدار این کلید "false" است، یک ورودی بازیابی در فهرست GRUB برای هر کرنل نصب شده ایجاد می شود. وقتی روی "true" تنظیم شده باشد، هیچ ورودی بازیابی ایجاد نمی شود. صرف نظر از این تنظیم ، آخرین ورودی کرنل همیشه گزینه "rescue" است.

Generate grub.cfg

پس از تکمیل پیکربندی مورد نظر، لازم است فایل /boot/grub2/grub.cfg تولید شود. این فایل با دستور زیر ایجاد می شود.

grub2-mkconfig > /boot/grub2/grub.cfg

این دستور برای ساخت فایل grub.cfg و فایل های پیکربندی موجود در مسیر /etc/grub.d اجرا می شود و از محتویات پرونده پیش فرض grub برای اصلاح خروجی و دستیابی به تنظیمات نهایی مناسب استفاده می کند. دستور grub2-mkconfig تلاش می کند تا همه کرنل های نصب شده را پیدا کند و در بخش 10_Linux فایل grub.cfg هر یک از ورودی ها را ایجاد کند. همچنین یک ورودی "rescue" ایجاد می کند تا روشی برای رفع مشکلات که مانع از بوت شدن لینوکس می شود، وجود داشته باشد.

اکیداً توصیه می شود که پرونده grub.cfg را به صورت دستی ویرایش نکنید.

نتیجه گیری

GRUB اولین قدم بعد از BIOS در توالی رویدادهایی است که یک کامپیوتر لینوکسی را به حالت قابل استفاده بوت می کند. درک و دانش GRUB در رفع مشکلات مربوط به بوت شدن سیستم عامل بسیار کارایی دارد.

اشتراک گذاری:

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *