گراب (به انگلیسی: GRUB) مخفف (GRand Unified Bootloader) یک برنامهٔ بارکنندهٔ راه‌اندازی است که قادر به راه‌اندازی طیف گسترده‌ای از سیستم‌عامل‌های آزاد و انحصاری با استفاده از قابلیت بارگذاری زنجیره‌ای (chain-loading) است.

هنگام آغاز گراب، می‌توان از رابط متنی یا فهرستی استفاده کرد. با استفاده از رابط متنی، می‌توان مشخصات دیسک و نام پروندهٔ کرنل را به صورت دستی درج کرد. با بهره‌گیری از رابط فهرستی می‌توان سیستم‌عامل‌های مورد نظر را با استفاده از کلیدهای جهت‌نما برگزید. این فهرست، بر پایهٔ پروندهٔ پیکربندی‌ای است که از پیش تهیه شده. همچنین می‌توان از رابط فهرستی به رابط متنی یا برعکس تعویض نمود.

تاریخچه

گراب از سال ۱۹۹۵ شروع به کار کرد؛ زمانی که اریک بولن سعی در راه‌اندازی سیستم‌عامل گنو هرد داشت. بولن و برایان فورد ویژگی راه‌اندازی چندتایی را طراحی کردند.

سپس بولن تلاش کرد تا این قابلیت را به برنامهٔ بارکنندهٔ راه‌اندازی FreeBSD بیفزاید که به اندیشهٔ ساخت برنامهٔ بارکنندهٔ راه‌اندازی خودش افتاد. آنگاه گراب متولد شد. اریک ویژگی‌های زیادی را به این برنامه افزود و سرانجام در سال ۱۹۹۹، گراب به عنوان یک بستهٔ نرم‌افزاری رسمی گنو برگزیده شد.

در طول چند سال، ویژگی‌های زیادی به گراب افزوده شد، ولی خیلی زود مشخص شد که این برنامه با طراحی فعلی، قادر به ادامه نبوده و به نقطه‌ای رسیده که افزودن ویژگی‌های جدید، بدون خراب کردن ویژگی‌های فعلی ممکن نیست. حدود سال ۲۰۰۲، اکوجی کار را بر روی PUPA (مخفف Preliminary Universal Programming Architecture for GNU GRUB) با هدف نوشتن دوبارهٔ هستهٔ گراب شروع کرد تا آن را تمیزتر، امن‌تر، قوی‌تر و قدرتمندتر کند. نام این پروژه به گراب ۲ تغییر یافت و نام گراب ۱ نیز به legacy تغییر یافت. پس از آن، نگهداری گراب ۱ کمی ادامه پیدا کرد، تا آخرین نگارش آن که در تاریخ ۲۰۰۵ عرضه شد.

تا حدود سال ۲۰۰۷، توزیع‌های گنو/لینوکسی استفاده از گراب ۲ را در سطوح محدود پذیرفتند و تا سال ۲۰۰۹، بسیاری از آن‌ها گراب ۲ را به عنوان بارکنندهٔ راه‌اندازی پیش‌گزیدهٔ خود برگزیدند.

ویژگی‌ها

هدف اصلی گراب، همان‌گونه در تاریخچه بیان شد، راه‌اندازی چندتایی است. به همین منظور اصول زیر در طراحی آن در نظر گرفته شده:

علاوه بر الزامات بالا، گراب ویژگی‌های زیر را نیز داراست:

نصب

سیستم‌های بایاس

برای نصب گراب می‌توانید از دستور زیر استفاده کنید:

sudo grub-install --target=i386-pc device

که عبارت device برابر با نام افزارهٔ مورد نظر است. به عنوان مثال:

sudo grub-install --target=i386-pc /dev/sda

این دستور گراب را بر روی نخستین دیسک ذخیره، نصب می‌کند.


سیستم‌های یو‌ای‌اف‌آی

حال از دستور زیر برای نصب گراب استفاده کنید:

sudo grub-install --target="system-type" --boot-directory="efi-mount" device

که عبارت‌ها:

برای مثال:

sudo grub-install --target=x86_64-efi --boot-directory=/boot/efi /dev/sda

این دستور گراب را بر روی نخستین دیسک ذخیره، نصب می‌کند.

پیکربندی

اخطار: هرگز از بسته‌ی grub-customizer استفاده نکنید. این بسته با ایجاد پرونده‌های غیر استاندارد ممکن است باعث ناهماهنگی و خرابی در گراب شود.

روش تولید پیکربندی گراب در سیستم‌های یو‌ای‌اف‌آی یا بایاس تفاوتی ندارد و با دستور زیر امکان‌پذیر است:

sudo update-grub

پرونده پیکربندی گراب در مسیر زیر ذخیره می‌شود:

/boot/grub/grub.cfg

لازم به ذکر است که هرگز نباید این پرونده را تغییر داد. تغییرات مورد نیاز باید در پرونده‌های /etc/default/grub/ یا در زیرشاخهٔ /etc/grub.d/ ایجاد شده و سپس پیکربندی گراب دوباره تولید شود.

در واقع دستور update-grub پروندهٔ پیکربندی گراب را با توجه به مقادیری که در /etc/default/grub/ و یا زیرشاخه‌های پوشه /etc/grub.d/ تعیین شده‌اند تولید کرده و آن را در /boot/grub/grub.cfg می‌ریزد.
راه دیگر استفاده از دستور grub-mkconfig است. این دستور پروندهٔ پیکربندی را با توجه به مقادیر تعیین شده تولید کرده و خروجی می‌دهد. پس می‌توان خروجی آن را به /boot/grub/grub.cfg ریخت. (در بعضی توزیع‌ها مانند پارچ لینوکس دستور update-grub وجود ندارد و به ناچار از این دستور باید استفاده کرد. هرچند همان update-grub هم به نوعی از mkconfig بهره می‌برد.)
پس دستور زیر با استفاده از mkconfig پروندهٔ نهایی را می‌سازد:

sudo grub-mkconfig -o /boot/grub/grub.cfg

در پرونده /etc/default/grub/ هر خط برای پیکربندی یک ویژگی در گراب استفاده می‌شود، برای نمونه، برای این‌که صفحه گراب همیشه هنگام روشن شدن رایانه دیده شود، باید در خط زیر عبارت hidden به menu تغییر داده شود:

GRUB_TIMEOUT_STYLE=hidden

همچنین برای این‌که صفحه گراب به مدت زمان مشخصی بر حسب ثانیه نمایش داده شود، باید در خط زیر زمان تعیین شود:

GRUB_TIMEOUT=10

برای تغییر پارامترهای خط فرمان هنگام بوت شدن کرنل می‌توانید خط زیر را تغییر دهید (در مثال زیر دو مولفه splash و quiet اضافه شده):

GRUB_CMDLINE_LINUX="splash quiet"

برای آن‌که سایر سیستم‌عامل‌ها که توسط os-prober تشخیص داده شده‌اند در منوی گراب آورده شوند لازم است مقدار زیر در /etc/default/grub/ تعیین شود (حالت پیش‌فرض این متغیر به توزیع بستگی دارد):

GRUB_DISABLE_OS_PROBER=false

تعمیر

برای نصب دوبارهٔ گراب روی رایانه‌ای که گراب از پیش روی آن نصب بوده و دچار مشکل شده است، بخش تعمیر گراب را ببینید.