Ошибка Grub: файл '/grub/i386-pc/normal.mod' не найден?

17

Я недавно установил арку (надеюсь, успешно) на моей машине. Когда я пошел, чтобы перезагрузить, однако, у меня была проблема. У меня черный экран с надписью

Grub loading.
Welcome to GRUB!
error: file '/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>

С тех пор я гуглил в поисках ответа. Я почти нашел его здесь на форумах Ubuntu, но затем я увидел один из комментариев, в котором говорилось, что это неправда. Есть и другой ответ, но я не уверен, хочу ли я установить с live CD из-за боязни испортить вещи.

Вы бы поняли мой страх, если бы вы потратили 7 часов на его настройку после постоянных проблем с разделами, командами, учебными пособиями и проблемами системы. Какая радость

Кто-нибудь знает простое решение, чтобы заставить работать grub?

Грифон
источник
Второе предложение (с liveCD и chroot), вероятно, стоит попробовать. Или вариация: я не пользователь Arch, но уже установил его, и, насколько я помню, вы можете рассмотреть это предложение в отношении различных этапов установки arch, некоторые из которых связаны с chroot. Если вы можете вернуться к предыдущему шагу, загрузив архивный компакт-диск, а затем смонтировав и повернув его в вашу установку, вы сможете попробовать grub-install. Вам не нужно повторять какие-либо шаги, просто используйте их в качестве руководства для получения привязки с liveCD.
Златовласка
Пока я не за компьютером, я верю, что попробовал установить grub, и он не сработал
Griffin
@Griffin Это не сработало, так как «grub-install» не удалось, или это не решило проблему?
Дероберт
@derobert grub-install не был действительной командой \
Griffin
@goldilocks Второй тоже не работает
Griffin

Ответы:

9

Действительно раздражающая вещь ...

Поскольку каталог / boot / grub / i386-pc, по-видимому, просто не был на месте, я наконец решил эту проблему, скопировав весь / usr / lib / grub / i386-pc в / boot / grub. Это все.

cp -r /usr/lib/grub/i386-pc /boot/grub
flittermice
источник
Я также сделал это, потому что это также отсутствовало. К сожалению, это не исправило это.
Wolfpack'08
8

Я нахожусь в середине подобной проблемы (между прочим также на арке)

Grub не может найти этот файл и запустить, потому что он использует неправильный «префикс»

Вот что ты делаешь. Вы загружаетесь в режим grub rescue, затем просто выясняете, как заставить его загрузиться.

Сначала вы запустите set, в нем будут перечислены переменные, например, моя

cmdpath=(hd0)
prefix=(hd1,msdos3)/boot/grub
root=hd1,msdos3

Теперь префикс - это переменная, в которой grub ищет файл normal.mod. В моем случае hd1, msdos3 такой же, как / dev / sdb3 (аналогично, hd0, msdos1 будет / dev / sda1), что вы можете сделать, чтобы увидеть список допустимых разделов, типа ls

Теперь, в моем случае, снова, grub был установлен в / dev / sdb1, который был смонтирован как / boot в моем разделе arch, поэтому правильный префикс будет (hd1, msdos1) / grub

Поэтому для загрузки мне нужно сделать следующее:

set prefix=(hd1,msdos1)/grub
insmod normal
normal

В вашем случае вам придется либо вспомнить, либо угадать, на какой раздел вы установили grub. Вы можете угадать неправильно, это не принесет никакого вреда, команда insmod просто потерпит неудачу, и вы можете повторить попытку с другим разделом.

После этого grub загружается как обычно, и я могу выбрать из списка, что я хочу загрузить. Обычно, когда происходит такой беспорядок, переустановка grub на ваш mbr (с помощью grub-install ) должна исправить это навсегда, чтобы вам не приходилось делать это каждый раз при загрузке. Однако мне очень трудно понять, что делать, если исправить это не так просто (или я поделюсь с вами тем, что вы должны сделать).

Только если это не удается (например, если префикс правильный, но вы все еще не можете загрузиться), вы должны прибегнуть к использованию живых или спасательных компакт-дисков, чтобы обойти проблему (лучше всего этого избежать)

Cestarian
источник
Это может быть немного старым вопросом, но я обнаружил, что кто-то должен был ответить, как на самом деле использовать Grub Rescue вместо того, чтобы использовать живые CD и USB для исправления ситуации. У нас не всегда есть живые СМИ, чтобы помочь нам, и даже если мы делаем, обычно лучше работать из нашего предпочтительного окружения.
Cestarian
Отличное объяснение! (Особенно заметка о том, что «угадать неправильно, ничего не повредит»). Я столкнулся с той же проблемой с системой двойной загрузки Windows + Ubuntu, ошибочно подумав, что удаление раздела Windows не повлияет на Ubuntu. Во всяком случае, этот пост действительно помог понять, как исправить ошибку. Так как я не мог вспомнить, какой раздел содержал grub, я просто перечислил их все ls, затем попробовал их один за другим, пока не нашел правильную комбинацию :-)
Ли
@Leigh рад, что это помогло кому-то :)
Cestarian
1
Исправить что-то всегда хорошо, но понимание того, как вы это исправили, еще лучше :-) Ура.
Ли
Вы гений
Ашиш Донерия
5

У меня только что была эта проблема сегодня после новой установки Mint 15.

Установщик создал /boot/grub/x86_64-efiмодули, но не обычные /boot/grub/i386-pcмодули.

Переустановка Grub с Live CD исправила проблему.

Замените / dev / sda и / dev / sda1 вашим загрузочным устройством и загрузочным разделом и выполните следующие команды с Live CD:

sudo mount /dev/sda1 /mnt
sudo grub-install --boot-directory=/mnt /dev/sda
sudo reboot
jamesallman
источник
1

Спасибо за ваш пост. Я решил почти идентичное сообщение об ошибке - «файл» /grub2/i386-pc/normal.mod «не найден» после новой установки Linux CentOS 5.11 на старый компьютер Dell Optiplex с Windows Vista, чтобы сделать двойной система загрузки.

Что осложнило мою ситуацию, так это то, что я уже пытался и не смог установить более новый дистрибутив Fedora 20, который использует GRUB2 вместо GRUB (LEGACY), на разделы по умолчанию FEDORA. Затем я попытался установить CentOS непосредственно поверх этого, сохранив раздел Windows и перезаписав разделы FEDORA.

Во время установки CentOS я оставил свой первый (Windows) раздел один (hd0,0) и создал каталог / boot на втором (загрузочном) разделе (hd0,1). Затем я решил не изменять MBR в то время и вместо этого выбрал другой вариант (загрузчик в другом разделе).

После того, что оказалось успешной установкой, он перезагрузился с ошибкой выше.

Я подозреваю, что информация о загрузке на первом разделе продолжала указывать на местоположение GRUB2. Процессор не смог найти normal.mod, возможно, из-за того, что ранее созданные разделы FEDORA00 были удалены.

Вот мои шаги:

  1. Загрузитесь с моего установочного компакт-диска Centos 5 в режиме восстановления («linux rescue»).

  2. Смонтируйте локальный диск: chroot / mnt / sysimage

  3. Переключиться в однопользовательский режим: su

  4. Обновите установку CentOS: обновление yum

  5. Используйте редактор emacs, чтобы добавить «Microsoft Windows Vista» в файл grub.conf: emacs /boot/grub/grub.conf и сделать Vista операционной системой по умолчанию.

    ( ПРИМЕЧАНИЕ. См. Www.cyberciti.biz/faq/grubconf-for-windows-vista-or-xp-dual-boot/ и https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html. /Installation_Guide/sn-medialess-editing-grub-conf.html .)

  6. Попытка обновить MBR: grub-install / dev / hda

  7. Перезагрузитесь с неизвестной ошибкой GRUB, при которой процессор завис после отображения «GRUB».

  8. Перезагрузитесь с исходного установочного диска Windows Vista (или другого диска восстановления Windows) и выберите вариант восстановления диска. Получите сообщение, что MBR был восстановлен.

  9. Перезагрузитесь правильно в Windows Vista.

Я уверен, что существуют более элегантные решения, но это сработало для меня. Я также попытался загрузить пакет миграции с GRUB на GRUB2, как описано на сайте http://help.ubuntu.com/community/Grub2/Upgrading , попытавшись:

$ yum install grub-pc

Но он не смог найти посылку. Возможно, я должен был просто попытаться yum install grub.

dkergyl
источник
0

Добавление к flittermice ...

Если вы загружаетесь с USB-диска и у вас есть папка i386, вы можете открыть папку i386 в поврежденном разделе как root, а затем скопировать рабочую папку i386 с usb.

Джейкоб Дэвид С. Каннингем
источник
0

Я попал в мою систему CentOS 6.7 в два этапа. Во-первых, я последовал совету flittermice выше, загрузился с live CD, подключил мой / dev / sda2 как / mnt и просто скопировал папку i386-pc из / mnt / usr / ... (вы можете найти, где находится ваш по find /|grep i386) в / boot / grub и перезагрузился.

Это дало мне grub> вместо grub rescue> ;-).

Затем я следовал руководству здесь [ https://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux/], чтобы найти и загрузиться в мой раздел. Это был (hd0,2), потому что (hd0,1) был взят подкачкой.

Позже я выяснил, что сделать эту загрузку «автоматической» было невозможно, возможно потому, что мой / boot был на ext4 с размером inode 256, а старый grub1 требует 128. Я попытаюсь следовать некоторым командам из [ http: // kb.kristianreese.com/index.php?View=entry&EntryID=113] для подготовки раздела перед установкой.

Павел Анащенко
источник
0

Переустановите Ubuntu. Перейти к "сделать что-то еще". Выберите установочный раздел Windows в качестве места, где он должен установить загрузчик.

Если у вас есть существующая установка Windows, вы должны установить grub в тот же раздел; в противном случае у вас будет проблема, увиденная в вопросе.

Это актуально для 14, 15, 16, 17 Ubuntu всех версий и, возможно, более ранних версий. Когда вас спросят, где установить загрузчик, не создавайте и не выбирайте раздел / boot; вместо этого используйте раздел Windows.

Спасибо.

Wolfpack'08
источник