کامپیوتر، شبکه

کپی برداری از مطالب  وبلاگ با ذکر منبع مجاز است.

رفع خطای unknown filesystem از طریق grub rescue

شنبه پانزدهم آذر ۱۳۹۹ 10:54

ریشه‌ی مشکل: از آن‌جایی که شما دو چند سیستم‌عامل را در کنار یک دیگر روی دیسک سیستم خود نصب کرده‌اید، یک boot loader نیاز است که در ابتدای کار سیستم اجرا شده و به شما امکان انتخاب میان آن‌ها را فراهم سازد. احتمالاً این توصیه را شنیده‌اید که می‌گویند هنگام نصب Windows و GNU/Linux در کنار هم، بهتر است ابتدا اقدام به نصب Windows و سپس GNU/Linux نمایید؛ چرا که ظاهراً Windows گمان می‌کند که تنها سیستم‌عامل موجود در جهان است و به هنگام نصب، تنظیمات مربوط به boot را به کلّی عوض می‌‌کند. این اتّفاق به هنگام بروزرسانی یا ارتقا Windows نیز ممکن است رخ دهد.

راه حل: لازم است Grub را مجدّداً بروزرسانی و نصب نمایید. امّا برای این کار لازم است ابتدا وارد GNU/Linux شوید. در محیط grub rescue، چهار دستور در اختیار شماست:

1234ls
set
unset
insmod

ابتدا باید نگاه کنید که درکل چه دستگاه‌ها/پارتیشن‌هایی روی سیستم شماست. لذا:

1ls

با ورود دستور بالا، لیستی از دستگاه‌ها و پارتیشن‌های در دسترس، شبیه حاصل زیر برای شما نمایان خواهد گشت:

1(hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos1) (fd0)

در این‌جا hdX نمایان‌گر هارد‌دیسک و آن‌چه در کنارش می‌آید نمایان‌گر پارتیشن است. دستگاه‌های دیگری نیز ممکن است نمایش داده شود. لازم است بدانید GNU/Linux در چه دستگاه و پارتیشنی است.

توجّه داشته باشید که Grub فقط پارتیشن‌ها را دیده و نمی‌تواند filesystem آن‌ها را تشخیص دهد. لذا اکثراً آن را تحت نام msdos معرّفی می‌نماید.

به هر حال اگر نمی‌دانید، تک‌تک آن‌چه برای شما لیست شده است را باید جستجو کنید. لذا از این دستور استفاده نمایید:

1ls (hdX,X)/

برای مثال:

123ls (hd0,msdos1)/
ls (hd0,msdos2)/
...

این بررسی را تا جایی ادامه دهید که حاصل دستور، چیزی شبیه این شود:

12ls (hd0,msdos6)/ 
./ ../ lost+found/ etc/ media/ bin/ boot/ dev/ home/ lib/ opt/ proc/ root/ run/ sbin/ selinux/ srv/ sys/ tmp/ usr/ var/

همین باید دستگاه و پارتیشن مربوط به GNU/Linux شما باشد که در این مثال، فرض می‌کنیم (hd0,msdos6) است. هنگامی که دستگاه و پارتیشن مورد نظر را یافتید، دستور زیر را جهت تخصیص مسیر (path) مرتبط با Grub وارد نمایید:

1set prefix=(hd0,6)/boot/grub

همچنین مسیر این دستور جهت تخصیص مسیر مرتبط با kernel:

1set root=(hd0,6)

با ورود دستور زیر می‌توانید مطمئن شوید که دستور قبل را به درستی اجرا کرده‌اید:

1ls /

باید همان محتوای پارتیشن - آن‌چه پیشتر به هنگام ورود دستور ls (hd0,msdos6)/ مشاهده کردید - را نمایش دهد. اگر این‌طور نبود، به احتمال زیاد در مراحل قبلی اشتباهی کرده‌اید. در غیر این صورت، دو دستور زیر را وارد نمایید:

12insmod normal
normal

پس از آن Grub فعّال شده و می‌توانید سیستم‌عامل مورد نظر خورد را انتخاب نمایید. اگر Windows در حال بروزرسانی بود که این اتّفاق رخ داد، بهتر است وارد Windows شده اجازه دهید بروزرسانی را کامل کند و سپس سیستم را restart کنید (پس از restart نیز مجدّداً محیط grub rescue فعّال شده و باید مراحل قبلی را دوباره پیش بگیرید - البته این دفعه دیگر می‌دانید که GNU/Linux در کدام دستگاه و پارتیشن بوده و نیازی به جستجو مجدّد نیست). در غیر این صورت مستقیم وارد GNU/Linux شوید؛ چرا که باید تغییرات انجام شده را تثبیت کنید. در GNU/Linux، محیط ترمینال را باز کرده و دو دستور زیر را به ترتیب وارد و اجرا نمایید:

12sudo update-grub
sudo grub-install /dev/sda

اگر پیش‌تر پارتیشن‌بندی سیستم خود را اصولی انجام داده باشید، محلّ نصب Grub باید در sda باشد. در غیر این صورت ممکن است در sda1 یا... پیدا شود. به هر حال در دستور دوّم، آن آدرسی که محلّ نصب Grub است را وارد نمایید.


انجام مراحل بالا باید مشکل را حل نماید. در غیر این صورت باید به جستجو در اینترنت ادامه داده و راه حلّ دیگری پیدا کنید. ضمناً شاید نرم‌افزارهایی نیز پیدا کنید که از یک دستگاه bootable اجرا شده همان مراحل بالا را به صورت اتوماتیک برای شما انجام دهند.

تندرست و پیروز باشید.

منبع

مهندس چراغی
بیوگرافی
رفع ایراد سیستم و شبکه های کامپیوتری  ، برقراری امنیت  و نیز فروش تمامی تجهیزات مربوط به آنها
کدهای وبلاگ