تعمیر و بازیابی grub
شاید تاکنون با مواردی همچون عدم نمایش grub یا تخریب شدن آن مواجه شده باشید، این مشکل ممکن است بنا به دلایل مختلفی همچون نصب سایر سیستمعاملها پس از گنو/لینوکس رخ داده باشد.
برای رفع مشکل راه حلهای متفاوتی وجود دارد، در این پست با استفاده از یک دیسک زنده گنو/لنوکس در Terminal با تغییر root یا به عبارتی chroot، بدون نیاز به بسته خاصی به برسی نحوه تعمیر و رفع مشکل grub خواهیم پرداخت.
ابتدا سیستم را با یک دیسک زنده گنو/لینوکس Boot کرده و ترمینال را باز نمایید.
برای انجام عملیات chroot لازم است پارتیشن / (root) که توزیع خود را بر  روی آن نصب کردهایم بدانیم، برای نمایش یک لیست از پارتیشنهای موجود از fdisk استفاده میکنیم:
sudo fdisk -lپس از وارد کردن دستور فوق در صورتی که رمز عبور سوال شد، آن را وارد نمایید، عموما در دیسکهای زنده رمزعبور خواسته نمیشود و در صورت نیاز در هنگام لاگین به سیستم یا باز کردن ترمینال رمز عبور دیسک زنده به شما نمایش داده خواهد شد.
در خروجی دستور فوق، پارتیشنی که به عنوان / (root) درنظر گرفته بودید را شناسایی نمایید، این نام باید مشابه dev/sdXY/ باشد.
X: یک حرف مانند a یا b و...
Y: یک عددبرای مثال پارتیشن روت ما dev/sda5/ است.
حال پارتیشن / (root) را mount میکنیم:
sudo mount /dev/sda5 /mntاگر در هنگام نصب توزیع خود، پارتیشن مجزایی برای boot/ در نظر گرفته بودهاید با دستور زیر boot/ را هم mount نمایید:
sudo mount /dev/sda6 /mnt/bootدر دستور فوق فرض بر این است که dev/sda6/ پارتیشن boot میباشد.
حال با ls یک لیست از شاخه mnt بگیرید تا اطمینان پیدا کنید که عملیات mount صحیح اجرا شده و آماده سایر مراحل هستیم:
ls /mntخروجی باید مشابه زیر باشد:
bin   etc   initrd.img.old   media   proc   sbin   tmp   vmlinuz
boot home lib mnt   root srv   usr   vmlinuz.old
dev   initrd.img   lost+found   opt   run   sys   varهمینکار را برای شاخه boot/ تکرار نمایید:
ls /bootخروجی مشابه زیر دریافت خواهید کرد:
abi-3.13.0-44-generic
abi-3.13.0-45-generic
vmlinuz-3.13.0-45-generic
...حال باید شاخه های زیر را برروی شاخه مشابه در mnt به صورت bind سوار نماییم (mount کنیم):
/dev
/dev/pts
/proc
/sysانجام عملیات Mount به همراه پارامتر bind باعث میشود محتویات شاخه های فوق در هر دو محل به صورت یکسان قابل دسترس باشند. نحوه mount کردن به صورت زیر خواهد بود:
sudo mount --bind foo barیا به صورت زیر:
sudo mount -B foo barدر نتیجه لازم است شاخه های مذکور را به صورت ذکر شده mount نماییم، برای مثال نحوه مانت شاخه dev/ به صورت زیر خواهد بود:
sudo mount -B /dev /mnt/devبرای راحتی و سرعت بخشیدن به کار میتوان از یک حلقه for استفاده کرد. کد زیر هر ۴ شاخه مذکور را در محل صحیح mount خواهد کرد، این دستور را در یک خط وارد و اجرا نمایید:
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; doneحال با دستور زیر شاخه root را تغییر میدهم (chroot).
sudo chroot /mntدستور زیر فایل پیکربندی grub را برای سیستم ایجاد خواهد کرد:
sudo update-grubحال برای نصب مجدد grub در MBR باید بدانیم سیستم از کدام Disk برای بوت شدن استفاده میکند. برای این منظور میتوانید مجددا از fdisk -l استفاده نمایید.
آدرس دیسک باید به صورت زیر باشد:
/dev/sdXکه x یک حرف مانند a یا b و یا … میباشد، یعنی آدرسی مشابه زیر:
/dev/sdaحال با دستور زیر گراب را بر MBR دیسک مدنظر نصب مینماییم:
sudo grub-install /dev/sdaسپس با دستور exit یا فشردن ctrl+d از chroot خارج شوید.
حال نوبت آن است که پارتیشن و شاخههای mount شده را umount نماییم، به این منظور دستور زیر را در یک خط وارد و اجرا نمایید:
for i in /dev/pts /dev /proc /sys; do sudo umount /mnt$i; doneدر صورتی که پارتیشن boot/ را مجزا ایجاد و mount کرده بودید آن را umount نمایید، سپس mnt/ را umount کنید:
sudo umount /mntنهایتا سیستم را reboot نمایید:
sudo shutdown -r now