تعمیر و بازیابی grub
شاید تاکنون با مواردی همچون عدم نمایش grub یا تخریب شدن آن مواجه شده باشید، این مشکل ممکن است بنا به دلایل مختلفی همچون نصب سایر سیستمعاملها پس از گنو/لینوکس رخ داده باشد.
برای رفع مشکل راه حلهای متفاوتی وجود دارد، در این پست با استفاده از یک دیسک زنده گنو/لنوکس در Terminal با تغییر root یا به عبارتی chroot
، بدون نیاز به بسته خاصی به برسی نحوه تعمیر و رفع مشکل grub خواهیم پرداخت.
ابتدا سیستم را با یک دیسک زنده گنو/لینوکس Boot کرده و ترمینال را باز نمایید.
برای انجام عملیات chroot
لازم است پارتیشن /
(root) که توزیع خود را بر روی آن نصب کردهایم بدانیم، برای نمایش یک لیست از پارتیشنهای موجود از fdisk
استفاده میکنیم:
پس از وارد کردن دستور فوق در صورتی که رمز عبور سوال شد، آن را وارد نمایید، عموما در دیسکهای زنده رمزعبور خواسته نمیشود و در صورت نیاز در هنگام لاگین به سیستم یا باز کردن ترمینال رمز عبور دیسک زنده به شما نمایش داده خواهد شد.
در خروجی دستور فوق، پارتیشنی که به عنوان /
(root) درنظر گرفته بودید را شناسایی نمایید، این نام باید مشابه dev/sdXY/
باشد.
برای مثال پارتیشن روت ما dev/sda5/
است.
حال پارتیشن /
(root) را mount
میکنیم:
اگر در هنگام نصب توزیع خود، پارتیشن مجزایی برای boot/
در نظر گرفته بودهاید با دستور زیر boot/
را هم mount
نمایید:
در دستور فوق فرض بر این است که dev/sda6/
پارتیشن boot میباشد.
حال با ls یک لیست از شاخه mnt
بگیرید تا اطمینان پیدا کنید که عملیات mount
صحیح اجرا شده و آماده سایر مراحل هستیم:
خروجی باید مشابه زیر باشد:
همینکار را برای شاخه boot/
تکرار نمایید:
خروجی مشابه زیر دریافت خواهید کرد:
حال باید شاخه های زیر را برروی شاخه مشابه در mnt به صورت bind سوار نماییم (mount
کنیم):
انجام عملیات Mount به همراه پارامتر bind باعث میشود محتویات شاخه های فوق در هر دو محل به صورت یکسان قابل دسترس باشند. نحوه mount کردن به صورت زیر خواهد بود:
یا به صورت زیر:
در نتیجه لازم است شاخه های مذکور را به صورت ذکر شده mount
نماییم، برای مثال نحوه مانت شاخه dev/
به صورت زیر خواهد بود:
برای راحتی و سرعت بخشیدن به کار میتوان از یک حلقه for استفاده کرد. کد زیر هر ۴ شاخه مذکور را در محل صحیح mount خواهد کرد، این دستور را در یک خط وارد و اجرا نمایید:
حال با دستور زیر شاخه root را تغییر میدهم (chroot
).
دستور زیر فایل پیکربندی grub را برای سیستم ایجاد خواهد کرد:
حال برای نصب مجدد grub در MBR باید بدانیم سیستم از کدام Disk برای بوت شدن استفاده میکند. برای این منظور میتوانید مجددا از fdisk -l
استفاده نمایید.
آدرس دیسک باید به صورت زیر باشد:
که x یک حرف مانند a یا b و یا … میباشد، یعنی آدرسی مشابه زیر:
حال با دستور زیر گراب را بر MBR دیسک مدنظر نصب مینماییم:
سپس با دستور exit
یا فشردن ctrl+d
از chroot خارج شوید.
حال نوبت آن است که پارتیشن و شاخههای mount
شده را umount
نماییم، به این منظور دستور زیر را در یک خط وارد و اجرا نمایید:
در صورتی که پارتیشن boot/
را مجزا ایجاد و mount
کرده بودید آن را umount
نمایید، سپس mnt/
را umount
کنید:
نهایتا سیستم را reboot
نمایید: