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

اگر دو سیستم‌عامل GNU/Linux و Windows را در کنار یک دیگر به صورت Dual Boot نصب کرده باشید، ممکن است گاهی - مخصوصاً پس از بروزرسانی Windows - به محض روشن کردن سیستم با خطای unknown filesystem مواجه شده و خود به خود به محیط grub rescue هدایت شوید. در این هنگام چه باید کرد؟ریشه‌ی مشکل: از آن‌جایی که شما دو چند سیستم‌عامل را در کنار یک دیگر روی دیسک سیستم خود نصب کرده‌اید، یک boot loader نیاز است که در ابتدای کار سیستم اجرا شده و به شما امکان انتخاب میان آن‌ها را فراهم سازد. احتمالاً این توصیه را شنیده‌اید که می‌گویند هنگام نصب Windows و GNU/Linux در کنار هم، بهتر است ابتدا اقدام به نصب Windows و سپس GNU/Linux نمایید؛ چرا که ظاهراً Windows گمان می‌کند که تنها سیستم‌عامل موجود در جهان است و به هنگام نصب، تنظیمات مربوط به boot را به کلّی عوض می‌‌کند. این اتّفاق به هنگام بروزرسانی یا ارتقا Windows نیز ممکن است رخ دهد.راه حل: لازم است Grub را مجدّداً بروزرسانی و نصب نمایید. امّا برای این کار لازم است ابتدا وارد GNU/Linux شوید. در محیط grub rescue، چهار دستور در اختیار شماست:ls set unset insmodابتدا باید نگاه کنید که درکل چه دستگاه‌ها/پارتیشن‌هایی روی سیستم شماست. لذا:lsبا ورود دستور بالا، لیستی از دستگاه‌ها و پارتیشن‌های در دسترس، شبیه حاصل زیر برای شما نمایان خواهد گشت:(hd0) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos1) (fd0)در این‌جا hdX نمایان‌گر هارد‌دیسک و آن‌چه در کنارش می‌آید نمایان‌گر پارتیشن است. دستگاه‌های دیگری نیز ممکن است نمایش داده شود. لازم است بدانید GNU/Linux در چه دستگاه و پارتیشنی است.توجّه داشته باشید که Grub فقط پارتیشن‌ها را دیده و نمی‌تواند filesystem آن‌ها را تشخیص دهد. لذا اکثراً آن را تحت نام msdos معرّفی می‌نماید.به هر حال اگر نمی‌دانید، تک‌تک آن‌چه برای شما لیست شده است را باید جستجو کنید. لذا از این دستور استفاده نمایید:ls (hdX,X)/ برای مثال:ls (hd0,msdos1)/ ls (hd0,msdos2)/ ...این بررسی را تا جایی ادامه دهید که حاصل دستور، چیزی شبیه این شود:ls (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 وارد نمایید:set prefix=(hd0,6)/boot/grub همچنین مسیر این دستور جهت تخصیص مسیر مرتبط با kernel:set root=(hd0,6)با ورود دستور زیر می‌توانید مطمئن شوید که دستور قبل را به درستی اجرا کرده‌اید:ls /باید همان محتوای پارتیشن - آن‌چه پیشتر به هنگام ورود دستور ls (hd0,msdos6)/ مشاهده کردید - را نمایش دهد. اگر این‌طور نبود، به احتمال زیاد در مراحل قبلی اشتباهی کرده‌اید. در غیر این صورت، دو دستور زیر را وارد نمایید:insmod normal normalپس از آن Grub فعّال شده و می‌توانید سیستم‌عامل مورد نظر خورد را انتخاب نمایید. اگر Windows در حال بروزرسانی بود که این اتّفاق رخ داد، بهتر است وارد Windows شده اجازه دهید بروزرسانی را کامل کند و سپس سیستم را restart کنید (پس از restart نیز مجدّداً محیط grub rescue فعّال شده و باید مراحل قبلی را دوباره پیش بگیرید - البته این دفعه دیگر می‌دانید که GNU/Linux در کدام دستگاه و پارتیشن بوده و نیازی به جستجو مجدّد نیست). در غیر این صورت مستقیم وارد GNU/Linux شوید؛ چرا که باید تغییرات انجام شده را تثبیت کنید. در GNU/Linux، محیط ترمینال را باز کرده و دو دستور زیر را به ترتیب وارد و اجرا نمایید:sudo update-grub sudo grub-install /dev/sdaاگر پیش‌تر پارتیشن‌بندی سیستم خود را اصولی انجام داده باشید، محلّ نصب Grub باید در sda باشد. در غیر این صورت ممکن است در sda1 یا... پیدا شود. به هر حال در دستور دوّم، آن آدرسی که محلّ نصب Grub است را وارد نمایید.انجام مراحل بالا باید مشکل را حل نماید. در غیر این صورت باید به جستجو در اینترنت ادامه داده و راه حلّ دیگری پیدا کنید. ضمناً شاید نرم‌افزارهایی نیز پیدا کنید که از یک دستگاه bootable اجرا شده همان مراحل بالا را به صورت اتوماتیک برای شما انجام دهند.تندرست و پیروز باشید.مراجع:مستندات Grubوبسایت Mint Guideراهنمای جامع مدرک بین‌المللی (LPIC-1 (101, 102 | نویسنده: سیّد حسین رجاء | ناشر: کانون نشر علومهندی‌های گرامیِ فعّال در YouTube!