۴.۲ نصب یک مدیر بوت
روال بوت کامپیوتر با برنامه ای به نام بوت لودر (boot loader) شروع می شود.اگرچه این برنامه قبل از اینکه هر سیستمعاملی بارگذاری (load)میشود، اجرا می شود،شما معمولا آن را از درون لینوکس (یا یک سیستمعامل دیگر) نصب و پیکربندی می کنید.بوت لودر ها به روش های خاصی کار می کنند که هم به فیرمور (firmware) و هم به سیستم عاملی که می خواهید بوت کنید وابسته است.شناخنتن اصول بوت لودر ها برای به درستی پیکربندی کردن آنها ضروری است،بنابراین قبل از وارد شدن به جزئیات بوت لودر ها اصول این بوت لودر ها را بررسی میکنیم.
در لینوکس محبوبترین بوت لودر گراب (GRUB : Grand Unified Boot Loader) است که در دو نسخه گراب سنتی (grub legacy) با شماره نسخه 0.97 و گراب ۲ با شماره نسخه 2.0 در دسترس است.
اصول بوت لودر¶
در یک روش فیرمور کامپیوتر شما بوت لودر را از هارد به داخل مموری(memory) میخواند و اجرا می کند.حالا بوت لودر مسئول بارگذاری کرنل لینوکس در مموری و اجرا کردن آن است.بنابراین پیکربندی هارد (یا حداقل هارد مختص بوت) کامل نمیشود مگر با پیکربندی بوت لودر.همچنین توزیع های لینوکسی روش ها و ابزار های نیمهخودکاری برای پیکربندی بوت لودر در زمان نصب سیستمعامل را فراهم میکنند،البته شما نیاز دارین که بیشتر بدونین مخصوصا اگر کرنل رو کامپایل کنید یا چندین سیستمعامل هم زمان نصب باشن.
اصول بوت لودر BIOS¶
روال بوت BIOS در بخش هایی به خاطر وجود گزینه های زیاد میتونه پیچیده باشه.شکل زیر که مسیر های مختتلف بوت را نشون میده که همه با BIOS شروع میشوند.با فرض اینکه تجهیز بوت یک هارد باشد BIOS کدی رو از MBR (Master Boot Record) که اولین سکتور هارد هست بارگذاری میکنه. این کد در واقع بوت لودر اولیه (primary boot loader) هست. در تئوری این کد میتونه هر چیزی باشه حتی یه سیستم عامل (اگه کوچیک باشه!).
در عمل بوت لودر اولیه یکی از دو کار زیر رو انجام میده :
-
بررسی جدول پارتیشن (partition table) و پیدا کردن فایلسیستمی که به عنوان bootable مشخص (mark) شده.سپس بوت لودر اولیه بوت سکتور (boot sector) را از آن فایلسیستم بارگذاری و اجرا میکنه که ادامه دهنده روند بوت هست و کرنل سیستمعامل رو پیدا میکنه.
-
پیدا کردن کرنل بارگذاری و اجرای مستقیم آن.این روش قسمت بوت سکتور را به صورت کلی رد میکند.
سیستمهای قدیمی x86 مانند DOS یا Windows مسیر اول را طی میکنند.DOS و Windows هر دو بوت لودر های ساده را همراه خود دارند که گزینه های کمی را فراهم میکنند.
بوت لودر های BIOSی معروف لینوکس، GRUB و LILO، خیلی قابل انعطاف تر هستند. آنها قابلیت نصب هم بر روی MBR و هم بر روی بوت سکتور پارتیشن را پشتیبانی میکنند.شما میتوانید حالت بوت لودر اولیه DOS/Windows را استفاده کرده و سیستم را به سمت بارگذاری کرنل از طریق بوت سکتور هدایت کنید،یا این مرحله را رد کرده و کرنل را مستقیما از MBR بارگذاری کنید.گزینه اول داری این مزیت است که سیستمعامل های دیگر بعید است LILO یا GRUB را از بین ببرند زیرا آنها در پارتیشن لینوکسی ذخیره شدهاند.ویندوز تمایل دارد تا بوت لودر استاندارد خود را در MBR بنویسد بنابراین با نصب ویندوز بر روی سیستمی با بوت دوگانه (doul-boot) باعث از بین رفتن بوت لودر های MBR میشود.اگر بوت لودر در بخش بوت پارتیشن لینوکس ذخیره شده باشد،دست نخورده باقی خواهد ماند، اگر چه ممکن است ویندوز سیستم را طوری پیکربندی کند که آن را دور بزند.برای فعال کردن دوباره بوت لودر لینوکس، شما باید یک ابزار مانند DOS/windows FDISK پارتیشن لینوکس را به عنوان پارتیشن بوت معرفی کنید.یکی از موانع نصب GRUB یا LILO بر روی بوت سکتور پارتیشن لینوکسی این است که پارتیشن حتماباید primary باشد،یا حداقل در دیسکهایی با پارتیشن سیستم MBR اینطور است.(استصنا وقتی است که یک بوت لودر بتواند فرایند بوت را به پارتیشن منطقی (logical) هدایت کند).به همین دلیل اکثر افراد GRUB یا LILO روی MBR دیسک قرار میدهند.
در آخر هر دو روش کار می کنند و در سیستمی که تنها لینوکس بر روی آن نصب است مزایا و معایب آن ها بسیار کم است.بعضی از توزیع امکان این انتخاب را موقع نصب نمیدهند.برای این توزیعها شما باید پیکربندی بوت لودر را بازبینی کرده و هنگام اضافه کردن کرنل جدید یا دیگر کار ها بوت لودر را عوض کنید یا پیکریندی آن را تغییر دهید.در دیسک هایی که از پارتیشن سیستم GPT استفاده می کنند GRUB بخشی از خودش را بر روی یک پارتیشن مخصوص به نام BIOS Boot Partition ذخیره میکنند.در دیسک های MBR این کد ها در سکتور های بعد از MBR که به صورت رسمی در طرح MBR تخصیص نشدهاند قرار میدهد.
GRUB legacy به عنوان بوت لودر¶
گراب (Grand Unified Boot Loader) بوت لودر پیشفرض بسیاری از توزیع های لینوکسی است.در واقع گراب در دو نسخه کلی GRUB Legacy و GRUB 2 وجود دارد.این دو در خیلی از موارد شبیه هم هستند اما در خیلی از جزئیات مهم متفاوت اند.همان طور که از اسمش پیداست GRUB Legacy نسخه قدیمی تر است و دیگر توسعه داده نمیشود.در واقع از GRUB Legacy به عنوان بوت لودر غالب استفاده میشد،اما با ورود GRUB 2 تحتالشعاع قرار گرفت. از آن جایی که هر دو گراب شبیه هم هستند اول GRUB legacy را توضیح میدهیم و بعد به سراغ تفاوت آن با گراب ۲ میرویم.
نصب GRUB Legacy¶
با استفاده از دستورات زیر می توان گراب را بر روی تجهیز مورد نظر نصب کرد.
# grub-install /dev/sda
پیکربندی GRUB legacy¶
محل فایل پیکربندی گراب boot/grub/menu.lst/ است.در بعضی از توزیع ها بجای menu.lst از grub.conf استفاده شده.پیکربندی گراب به دو قسمت global و per-image تقسیم می شود.قبل شروع پیکربندی باید با برخی خصلت ها و نامگذاری های گراب آشنا شویم.
نامگذاری دیسک ها در گراب کمی متفاوت از لینوکس است.در گراب دیسک ها به صورت (hdx) نامگذاری میشوند که x از 0 شروع می شود.گراب بین دیسک های SATA ، PATA،SCSI و USB درایو ها تفاوت قائل نمیشود.در سیستمهایی با تجهیز های متفاوت معمولا درایوهای ATA شمارهی کمتری میگیرند.برای مشخص کردن یک پارتیشن باید شماره پارتیشن را بعد از یک کاما جلوی اسم درایو اضافه کنید، این شماره از 0 شروع می شود،مثلا پارتیشن اول دیسک اول به صورت (hda,x) نشان داده میشود.برای نام گذاری فلاپی دیسک ها در گراب از fd به جای hd استفاده می شود.پارتیشن روت گراب پارتیشنی است که فایل پیکربندی گراب در آنجاست.
فایل boot/grub/device.map/ حاوی نگاشت بین اسم دیسک ها در گراب و لینوکس است.
# cat /boot/grub/device.map
(hd0) /dev/disk/by-id/ata-ST1000LM024_HN-M101MBB_S2U5J9CD205660
معرفی گزینه های بخش Global¶
گزینه default مشخص کننده سیستم عامل انتخاب شده پیشفرض گراب در منو بوت است.مساوی قرار دادن این گزینه با 0 باعث میشود اولین سیستنعامل در لیست به عنوان پیشفرض انتخاب شود.
گزینه tineout مشخص کننده میزان زمانی است که گراب برای دریافت ورودی از کاربر منتظر می ماند،مقدار این گزینه به ثانیه است.
با استفاده از گزینه splashimage می توانیم پس زمینه منوی گراب را تغییر دهیم.
معرفی گزینه های بخش Per-image¶
جرئیات مربوط به این سیستم عامل ها در این قسمت مشخص می شود.هر قسمت این بخش که مشخص کننده پیکربندی یک سیستمعامل است با یک گزینه title شروع می شود. با استفاده از title نام سیستمعامل در منوی بوت مشخص میشود.
گزینه root مشخص کننده شاخه روت گراب است که به صورت پیشفرض این شاخه پارتیشن boot/ است
گزینه kernel مشخص کننده کرنلی است که باید بارگذاری شود،بعد از نام کرنل میتوان پارامتر های کرنل را هم اضافه کرد.
با استفاده از initrd میتوان image حاوی فایل ها و ماژول هایی که قبل از mount شدن فایلسیستم ها در رم قرار میگیرد را مشخص کرد.بیشتر توزیع های لینوکسی برای کوچک نگه داشتن فایل اصلی کرنل به شدت به initail RAM Disk وابستهاند.
گزینه rootnoverify شبیه به گزینه root است با این تفاوت که در این حالت گراب برای دسترسی به فایل های درون این شاخه تلاشی نمی کند.این گزینه برای مشخص کردن پارتیشن بوت برای سیستمعاملی است که گراب مستقیما نمیتواند آن را بارگذاری کند.
گزینه chainloader به گراب میگوید که ادامه روند بوت را به بوت لودر دیگری بسپارد.با اضافه کردن 1+ به این گزینه گراب بوت لودر دیگر را از اولین سکتور پارتیشن سیستمعامل مورد نظر باگذاری می کند.
# grub.conf/menu.lst
#
# Global Options:
#
default=0
timeout=15
splashimage=/grub/bootimage.xpm.gz
#
# Kernel Image Options:
#
title Fedora (3.4.1)
root (hd0,0)
kernel /vmlinuz-3.4.1 ro root=/dev/sda5 mem=4096M
initrd /initrd-3.4.1
title Debian (3.4.2-experimental)
root (hd0,0)
kernel (hd0,0)/bzImage-3.4.2-experimental ro root=/dev/sda6
#
# Other operating systems
#
title Windows
rootnoverify (hd0,1)
chainloader +1
تعامل با GRUB Legacy¶
هنگام بوت اولین چیزی که گراب به شما نشان میدهد لیست سیستمعاملهایی است که درون فایل پیکربندی مشخص شدهاند.شما می توانید با انتخاب یکی از این سیستمعاملها و زدن کلید E شمامی توانید پارامتر هایی را به کانفیگ اضافه کنید و سیستم مورد نظر را با آن پارامتر های بوت کنید.بعد ایجاد تغییرات با زدن کلید B سیستم با پارامتر های جدید بوت خواهد شد.
GRUB 2 به عنوان بوت لودر¶
گراب ۲ بسیار شبیه گراب سنتی است.اما این دو در جزئیاتی مهمی با یکدیگر متفاوتاند.یکی از این تفاوت ها امکان اضافه کردن ماژول هایی به گراب ۲ برای فایلسیستم ها و کارهای مختلف است.
نصب گراب¶
با استفاده از دستور زیر میتوان گراب را برای روی پارتیشن یا هارد نصب کرد.
# grub-install /dev/sda
دستور بالا گراب را روی هارد اول نصب میکند.
پیکربندی گراب¶
فایل پیکربندی گراب در مسیر زیر است
/boot/grub/grub.cfg
اما معمولا پیکربندی گراب از طریق دستور update-grub انجام میشه و بهتره این فایل را به صورت دستی ویرایش نکنیم،ولی ما میتوانیم با ویرایش فایل زیر گزینه های پیشفرض را برای دستور update-grub مشخص کنیم.این دستور به صورت خودکار سیستمعامل ها و کرنل های مختلف را پیدا کرده و گراب را پیکربندی می کند.
/etc/default/grub
گزینه GRUB_DEFAULT مشخص کننده سیستمعامل پیشفرض در منوی گراب است و از شماره 0 شروع می شود.
گزینه GRUB_TIMEOUT تایین کننده زمان تاخیر قبول بوت خودکار است تا کاربر بتواند سیستمعامل دلخواه را انتخاب کند.
مثال :
# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
بخشهایی از این فصل از کتاب بر گرفته از منابع زیر است :
LPI Linux Certification in a Nutshell, 3rd Edition