Grub - это универсальный загрузчик, который используется для загрузки операционной системы Linux и других ОС, в случае, если на компьютере установлен Linux. Но когда вы выполняете какие-либо действия с разделами на диске, например, восстанавливаете их с помощью Clonezilla, изменяете размер или что-то другое, что Grub может быть поврежден.
Часто такие повреждения приводят к ошибке grub rescue unknown filesystem. Тогда перед вами не появляется меню, а только сообщение про ошибку и консоль восстановления для ввода команд. В этой небольшой статье мы рассмотрим как исправить эту ошибку.
Содержание статьи
Ошибка grub rescue unknown filesystem
Ошибка grub rescue unknown filesystem может возникать по разным причинам вот самые распространенные причины:
- Вы восстанавливали диск из Clonezilla и были изменены метрики раздела /boot;
- Раздел /boot был отформатирован и больше не существует;
Дело в том, что Grub устанавливается в два места. Первое - место в таблице разделов MBR. Там очень мало места, около 512 байт, а следовательно, весь загрузчик туда поместиться не может. Поэтому Grub имеет модульную структуру и все основные модули, конфигурационные файлы и ресурсы располагаются на обычном разделе, который монтируется после загрузки в /boot. Причем программа в MBR помнит где находится раздел /boot, но если с этим разделом что-то произойдет и программа не сможет загрузить привычные модули, то выдаст ошибку unknown filesystem. Если раздела больше нет, то вам останется только брать LiveCD диск и переустанавливать загрузчик, если же раздел просто немного изменен, то еще можно все исправить.
Как исправить Grub unknown error
У вас есть простейший терминал с самой простой командной оболочкой. Чтобы знать какие команды можно там вводить наберите:
help
Дальше нам нужно посмотреть список доступных разделов, для этого используется команда ls, как в bash:
ls
Без модулей grub поддерживает только ту файловую систему, которая была на /boot. Вы можете попытаться просмотреть содержимое каждого раздела чтобы определить где находятся файлы модулей. Например:
ls (hd0,1)/
Если вы увидели папку boot, значит это наш раздел. Дальше устанавливаем этот раздел значением переменной root с помощью команды set:
set root=(hd0,1)
set prefix=(hd0,1)/boot/grub
Загружаем и запускаем модуль normal, который должен загрузить все, что нам необходимо:
insmod normal
normal
Если раздел /boot не был поврежден, то загрузчик нормально определит все файлы, а потом запустит привычное для вас меню. Конечно, после того, как система загрузится, вам будет необходимо восстановить загрузчик Grub чтобы не вводить эти команды при каждой загрузке системы.
Выводы
В этой статье мы рассмотрели почему возникает ошибка error unknown filesystem grub rescue и что делать grub rescue, когда вы видите это сообщение. Да, во многих случаях у вас уже не получится загрузить систему без LiveCD диска. Но иногда все можно спасти. Надеюсь, эта информация была полезной для вас.
А если ошибка, что файл normal.mod не найден в /boot/grub/i386-pc/?
При попытке убрать i386-pc ничего не вышло.
Как удалось исправить?
Вместо /boot/grub в префиксе нужно указывать просто /grub
Все равно /grub/i386-pc/normal.mod not found.
Спасибо, помогло!
После загрузки системы, чтобы GRUB работал постоянно, нужно ввести эти команды:
$ sudo grub-install /dev/sda
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Благодарю Вас! Справился без посторонней помощи.
А если все разделі неизвестні?
автор путает строки grub и grub rescue
в grub rescue всего 4 команды и нет никакого help
у меня ошибка attempt to read or write outside of disk 'hd0'
После установки командой set рута и префикс делаю insmod normal и полчуаю обратно туже ошибку
Была ошибка insmod normal not found. Помог только LiveCD:
https://sourceforge.net/projects/boot-repair-cd/files/
С ним за 5 мин. все восстановилось, правда пришлось записать его на чистый диск.
спасибо, помогло !!!
А что если команду Is и insmode граб rescue не знает?
перезапусти комп и попробуй всё снова, помогло
У меня так же было. Пришлось ставить на другой диск систему и данные восстанавливать
Спасибо, это помогло. Только была небольшая особенность, у меня было несколько раздело
(hd0), (hd0,msdos5), (hd0,msdos3), (hd0,msdos2), (hd0,msdos1), (hd1) ...
(hd0,msdos5) - имел /boot/grub + в корне была знакомая мне структура каталогов, но normal.mod, был на каталог ниже в /boot/grub/i386-pc/normal.mod в консоли я получил not found при выполнении команды 'insmod normal'
(hd0,msdos3)- имел сразу в корне /grub + в корне было несколько утилит, судя по названию это были запуски проверки памяти , запуск рекавери мода и прочее, что обычно видно в boot menu.
В моём случае мне помогло:
$ set root=(hd0,msdos3)
$ set prefix=(hd0,msdos3)/grub
Ещё раз спс)
P.S. вопрос, что было бы если я бы поставил set prefix=(hd0,msdos5)/boot/grub/i386-pc ?
> ls (hd1,1)/
error: unknown filesystem