آشنایی با بوت لودر GRUB در لینوکس

بوت لودر GRUB در لینوکس

GRUB یا GRand Unified Bootloader، در سیستم عامل لینوکس، یک بوت لودر می‌باشد. GRUB نقش راه‌اندازی سیستم عامل را پس از روشن شدن سیستم، بر عهده دارد. بدون بوت لودر، نمی‌توان سیستم عامل را، بارگذاری نمود. bootloader، هسته‌ی سیستم عامل را، در حافظه‌ی اصلی بارگذاری کرده و مدیریت سیستم را، به آن واگذار می‌نماید. بوت لودرهای مختلفی از قبیل GRUB و LILO در لینوکس وجود دارند. بوت لودر GRUB دارای دو ورژن می‌باشد: GRUB 1 که به آن GRUB Legacy نیز می‌گویند و GRUB 2.

گراب، با سیستم عامل‌های لینوکس ، BSD، ویندوز و DOS ، به خوبی کار می‌کند. GRUB از دیوایس‌های مختلفی از قبیل هارددیسک CD-Rom فلش و دیوایس‌های شبکه قابل بوت شدن می‌باشد و قابلیت بارگذاری کرنل سیستم را، حتی از روی شبکه، دارا می‌باشد. در ادامه، بیشتر در باره‌ی بوت‌لودر GRUB در لینوکس، توضیح خواهیم داد.

ویژگی‌های بوت لودر GRUB در لینوکس

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

  • گراب دارای انعطاف‌پذیری بالا است و قابلیت پیکربندی پویا را دارد. یعنی شما می‌توانید تغییرات موردنظرتان را، در موقع بوت شدن سیستم اعمال نمایید. مثلا می‌توانید کرنل جدید و یا پارتیشن جدید را، برای بوت شدن انتخاب نمایید.
  • دارای قابلیت بوت چندگانه است.
  • با اغلب سیستم عامل‌های سازگار با یونیکس و ورژن‌های مختلف ویندوز، سازگار است.

نصب GRUB در لینوکس

برای نصب گراب به سادگی دستور grub-install را وارد می‌کنیم.

فایل‌های GRUB را در فولدر boot/grub/ پارتیشن جاری کپی کرده و bootloader را در اولین هارد ایجاد می‌کند.grub-install /dev/sda
فایل‌های GRUB را در فولدر boot/grub/ پارتیشن جاری کپی کرده و bootloader را در اولین پارتیشن اولین هارد ایجاد می‌کند.grub-install /dev/sda1
فایل‌های GRUB را در فولدر boot/grub/ پارتیشن جاری کپی کرده و bootloader را در اولین پارتیشن سومین هارد ایجاد می‌کند.grub-install /dev/sda3

GRUB Legacy

GRUB Legacy ، نسخه‌ی قدیمی‌تر GRUB می‌باشد که در حال حاضر دیگر ور‌ژن جدیدی از آن منتشر نمی‌شود.

مراحل بوت شدن سیستم عامل در GRUB Legacy

پس از روشن شدن کامپیوتر، در ابتدا کنترل سیستم به BIOS انتقال می‌یابد. ‌‌BIOS در ابتدا سخت‌افزار را از نظر عملکرد، چک نموده و پس از اطمینان از سخت‌افزار در مرحله‌ی بعد، سکتور اول از دستگاه ذخیره‌ساز (مثل هارد یا فلش) که به عنوان دیوایس فعال در نظر گرفته شده است را، در حافظه‌ی اصلی قرار می‌دهد. ‌GRUB در 446 بایت از MBR، کد مربوط به خود را جایگزین کد پیش‌فرض MBR می‌نماید. GRUB Legacy از ‌روش پارتیشن‌بندی ‌GPT پشتیبانی نمی‌کند.

مرحله‌ یا Stage اول

در اولین مرحله‌ي بوت سخت‌افزار، توسط BIOS، اولین سکتور از دیسک فعال، به نام MBR، که مقدار آن 512 بایت می‌باشد، را را در حافظه‌ی اصلی قرار داده و آن را اجرا می‌نماید. 512 بایت اندازه‌ی حافظه‌ی کافی برای کدهای گراب نمی‌باشد. در این مرحله برای بارگذاری کامل گراب، مرحله‌ی 1.5 (در صورت نیاز) یا مرحله‌ی 2 را در حافظه بارگذاری شده و اجرا می‌گردد.

مرحله‌ی 1.5

این مرحله که توسط مرحله‌ی اول بارگذاری می‌شود، حالت واسطی بین مرحله‌ی اول و مرحله‌ی دوم می‌باشد. در صورتی که فایل‌های مرحله‌ی دوم به طور عادی در فایل سیستم ذخیره شده باشند، بدلیل عدم پشتیبانی MBR از فایل سیستم، نیاز به استفاده از این مرحله می‌باشد. کدهای شناسایی فایل سیستم، در فضای خالی بین سکتور MBR و شروع سکتور مربوط به پارتیشن یعنی سکتور 63 (حدودا سی کیلوبایت)، ذخیره می‌شود.

در صورتی‌که موقع نصب گراب، مکان ذخیره‌سازی فایل‌های stage 2، ثابت بوده و مستقل از فایل سیستم باشد، نیازی به این مرحله نمی‌باشد. اما دیگر نمی‌توانید مکان این فایل ها را تغییر دهید.

مرحله‌ی 2

در این مرحله بوت لودر GRUB، در حافظه‌ی اصلی قرار گرفته و اجرا می‌شود. در این حالت منوی بوت لودر نمایش داده می‌شود.

مرحله‌ی 3

در این مرحله کرنل مورد نظر در حافظه‌ی اصلی لود شده و هدایت سیستم به آن سپرده می‌شود.

کانفیگ menu.lst

فایل کانفیگ در GRUB legacy در مسیر boot/grub/menu.lst/ قرار دارد. در بعضی از توزیع‌های لینوکس مثل ردهت و فدورا این مسیر در boot/grub/grub.conf/ قرار دارد.

نام‌گذاری پارتیشن‌ها به‌جای sda و sdb از شماره‌گذاری 0 شروع می‌شود. مثلا dev/sda/ به hd0 و به همین صورت به hd1 و غیره تبدیل می گردد. پارتیشن‌های هر دیسک هم به صورت شماره‌گذاری نمایش می‌دهیم. مثلا (hd1,2) به معنی هاردیسک دوم، پارتیشن سوم می‌باشد.

پارتیشن root در GRUB legacy می‌تواند از پارتیشن root سیستم عامل متفاوت باشد. اما به طور معمول چون فایل کانفیگ menu.lst در همان پارتیشن root سیستم عامل وجود دارد پارتیشن‌های root هردو یکسان می‌شوند.

فایل menu.lst به عنوان نمونه

در خط اول کرنل یا سیستم عامل پیش‌فرض را انتخاب می‌کنیم. default = 0 به معنی انتخاب سیستم عامل پیش‌فرض است . شماره‌ی اختصاص داده شده به ترتیب سیستم‌عامل‌های موجود در منوی گراب است که از شماره‌ی صفر شروع می‌شود. در مثال بالا سیستم عامل پیش‌فرض، CentOS به عنوان اولین سیستم عامل در منو است، که در صورت عدم انتخاب دیگر سیستم عامل‌ها به طور پیش فرض CentOS، بوت خواهد شد.

خط دوم میزان زمان انتظار تا boot شدن پیش فرض را نمایش می‌دهد. در این مثال این عد 5 ثانیه می‌باشد. در صورتی که کاربر تا این مدت اتخاب دیگری نداشته باشد، سیستم از سیستم عامل پیش‌فرض، بوت خواهد شد.

خط سوم، مسیر فایل تصویر پیش‌زمینه را تعیین می‌کند. این تصویر موقع نمایش منو، در پیش‌زمینه نمایش داده می‌شود.

هر title سرنام انتخابی برای کرنل و یا سیستم عاملی که در پارتیشن‌های مختلف نصب کرده‌ایم می‌باشد. در این مثال سه سیستم عامل CentOS و ARCH و سیستم عامل ویندوز در پارتیشن‌های مختلف قرار دارند.

در هر بخش در خط‌های 6, 11، root مسیر را به GRUB برای بارگذاری سیستم عامل موردنظر مشخص می‌نماید. در خط 16، rootnoverify شبیه دستور root عمل می‌نماید، یعنی GRUB سیستم عامل را نمی‌شناسد ولی به محلی که سیستم عامل نصب شده است، اشاره می‌نماید.

kernel، در مرحله‌ی بعد، image کرنل مورد نظر را، در مسیر تعیین شده، بارگذاری می‌کند. این خط معمولا در به صورت
…kernel /boot/vmlinuz شروع می‌شود.

initrd در مرحله‌ی بعد قبل از بالا آمدن root اصلی سیستم، مراحل آماده سازی و سازگاری با سخت‌افزارهای مورد نیاز را فراهم می‌کند.

chainloader، زمانی استفاده می‌شود که سیستم عامل به‌طور مستقیم قابل بوت شدن نمی‌باشد. در اینجا، GRUB روند کنترل بوت شدن را به خود سیستم عامل (مثلا ویندوز) واگذار می‌کند.

GRUB 2

GRUB 2 به عنوان جانشین برای GRUB Legacy معرفی شده است. تفاوتهای GRUB 2 با GRUB Legacy را می‌توان به شرح زیر بیان نمود:

  • فایل‌های تنظیمات آن‌ها متفاوت است.
  • GRUB 2 از فایل سیسستم‌های بیشتری حمایت می‌کند.
  • از storageهای LVM و Raid به طور مستقیم قابل بوت شدن است.
  • قابلیت جستجوی کرنل‌ها و سیستم عامل‌های دیگر، مثل ویندوز را به طور خودکار دارا می‌باشد.

فایل‌های کانفیگ GRUB 2

فایل اصلی کانفیگ در GRUB 2 در مسیر boot/grub/grub.cfg/ قرار دارد. این فایل جایگزین boot/grub/menu.lst/ در GRUB legacy شده است. اما این فایل را، مستقیما نباید ویرایش نمود. بلکه تنظیمات را، درفایل etc/default/grub/ و یا اسکریپت‌های نوشته شده در مسیر etc/grub.d/ قرار دارد. در زیر اسکریپت‌های موجود در دایرکتوری etc/grub.d/ نمایش داده شده است:

همان‌طور که مشاهده می‌کنید، نام فایل‌های اسکریپت در etc/grub.d/ ، با شماره‌گذاری شروع شده‌اند. برای ایجاد فایل اصلی گراب یعنی boot/grub/grub.cfg/ این اسکریپت‌ها به ترتیب شماره اجرا خواهند شد. درصورتی که می‌خواهید اسکریپت مربوط به بوت سیستم عامل جدید را اضافه نمایید شماره‌ی اسکریپتی که به آن اختصاص می‌دهید، ترتیب منوی بوت گراب را مشخص خواهد ساخت. در زیر فایل 40_custom که یک فایل برای ایجاد بوت جدید می‌باشد نمایش می‌دهیم:

همچنین در زیر یک فایل پیکربندی در مسیر etc/default/grub/ نمایش داده شده است:

پس از تنظیمات و ایجاد اسکریپت‌های مورد نیاز، با دستور زیر فایل grub.cfg را بروزرسانی می‌نماییم:

دستور update-grub را به جای عبارت فوق و به صورت کوتاه شده می‌توانیم استفاده نماییم.

یک فایل grub.cfg نمونه

خط فرمان در GRUB

در موقع بوت شدن سیستم و بعد از لود شدن grub در حافظه‌ی اصلی، منوی grub ظاهر می‌گردد. در صورتی که timeoute را برابر صفر قرار داده باشیم منوی گراب را، موقع بوت شدن سیستم نخواهیم دید. اگر timeoute بزرگتر از صفر باشد، به همان اندازه زمان منوی گراب منتظر انتخاب کاربر خواهد ماند و سپس در صورت عدم انتخاب، به صورت پیش‌فرض سیستم راه‌اندازی می‌شود. در منوی ‌grub در صورتی که کاراکتر c را وارد نماییم، وارد شل یا خط‌فرمان grub می‌شویم. محیط شل گراب، شبیه محیط شل در سیستم عامل لینوکس می‌باشد اما فرمان‌های کمتری دارد. بعضی از فرامین در شل گراب به فرمان‌های محیط شل لینوکس شبیه هستند.

با دستور help می‌توانید، لیست دستورهای موجود در grub را مشاهده نمایید. و برای هر دستور می‌توانید با استفاده از دستور help command راهنمای آن دستور را مشاهده نمایید.

با دستور ls میتوانید، لیست دیسک‌ها و پارتیشن‌های موجود را مشاهده نمایید:

همچنین می‌توانیم در هر پارتیشنی که سیستم عامل مورد نظر نصب گردیده است با دستور ls ورژن‌های مختلف کرنل را مشاهده و کرنل مورد نظر را با روشی که در ادامه شرح می‌دهیم، نصب نماییم.

همچنین می‌توانیم با انتخاب پارتیشنی که در آن سیستم عامل نصب شده است، نسبت به بارگذاری کرنل مورد نظر در محیط خط‌فرمان اقدام نماییم.

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