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

47
error: file '/grub/i386-pc/normal.mod' not found.
grub rescue>

Что я могу сделать? Я просто сижу и смотрю на это.

Я нашел свой старый нетбук (Dell Inspiron 1010), которым не пользовался около четырех лет. Я заменил Windows XP на Ubuntu 12.10. Я использовал свой загрузочный USB-накопитель. Я установил и перезагрузил. Я получил сообщение, normal.modкоторое не найдено.

Что я должен делать? Тип exit, rebootили quit? Должен ли я переустановить?

Дон метлай
источник
1
ОТВЕТ НИЖЕ НИКОГДА НЕ РАБОТАЕТ. ЭТО РАБОТАЕТ: переустановите свою ОС, перейдите к «сделать что-то еще», затем создайте таблицы разделов use your windows partition as your primary boot device. Этот последний шаг важен. НЕ ИСПОЛЬЗУЙТЕ / загрузитесь. Может быть другое решение: попробуйте вручную изменить загрузочное устройство во время запуска; Однако я не думаю, что это сработает. Это давняя проблема, которая сохранялась в Ubuntu вплоть до 17.10. Спасибо.
Wolfpack'08
Ни одна из этих инструкций не сработала для меня. Фактически, использование различных инструментов восстановления усугубило проблему. Я смог переустановить grub, но из-за того, что я использую lvm2, ядро ​​не запустилось. Если вы используете lvm2 для чего-либо, то когда возникнет эта проблема, вам придется переустановить ОС. Насколько я могу судить, восстановления после неудачной комбинации обновления ядра + grub + lvm2 не происходит. lvm2 видит очень мало официальной поддержки, несмотря на то, что в какой-то момент его подталкивают к Ubuntu Server LTS. Я создаю резервную копию своих данных и переустанавливаю ОС и больше не буду касаться lvm2. Выучил мой урок.
CubicleSoft
1
Я уже перешел с lvm2 и с тех пор у меня не было проблем. Ни одна из моей инфраструктуры больше не использует это. Стандартные решения по спасению системы (как графические, так и CLI) не знают или почти не знают о LVM, и это является достаточной причиной для того, чтобы я не использовал LVM. Даже если бы я следовал вашим указаниям, чтобы восстановить систему, и они сработали, проблема, вероятно, повторится в будущем. Переустановка ОС и отключение LVM были для меня лучшим и быстрым вариантом.
CubicleSoft
1
В моем случае @Wolfpack состоит в том, что без установки normal.mod невозможно переустановить Ubuntu, lgoin не работает. Что я могу сделать?
HoCo_
1
@ Wolfpack'08 Пожалуйста, отправьте ваше решение в качестве ответа. Публикация решений в качестве комментариев обходит принципы сайта. Вы должны также упомянуть, какой «ответ ниже никогда не работает», так как их больше.
Мелебиус

Ответы:

40

Grub имеет небольшой образ ядра, который загружается во время загрузки. Образ ядра динамически загружает модули, которые обеспечивают дополнительную функциональность. i386-pc/normal.mod not foundуказывает, что grub не может загрузить normal.mod , который является модулем grub, предоставляющим обычную команду . Для загрузки normal.mod вам нужно указать grub, где он находится. Для этого вы можете использовать командную строку grub (она же Rescue Console). Grub запустит командную строку, если возникнет проблема с загрузкой, или вы можете запустить ее вручную, удерживая клавишу Shift при запуске grub (чтобы вызвать меню grub), а затем нажав клавишу «c».

Используя grub, вы можете исследовать диски, разделы и файловые системы. Тебе следует:

  • найдите установку grub с помощью ls или search.file
  • установить переменные grub $ prefix и $ root
  • загрузить и запустить нормальный модуль

пример

Ниже приведен только пример. Вам нужно будет адаптировать его к вашему локальному диску и настройке раздела.

где нормальный. мод? искать в некоторых вероятных местах

grub> search.file /i386-pc/normal.mod
error: no such device: /i386-pc/normal.mod

grub> search.file /grub/i386-pc/normal.mod
error: no such device: /grub/i386-pc/normal.mod

grub> search.file /boot/grub/i386-pc/normal.mod
hd0,msdos1

Если вы получили "Unknown command 'search.file'"это, значит, команда search.file недоступна. Вероятно, это потому, что вы в grub rescue>приглашении, а не в grub>приглашении. В этом случае вы все равно можете продолжить и использовать lsкоманду и свои знания о расположении разделов для поиска normal.mod.

нашел его в (hd0, msdos1)

grub> ls (hd0,msdos1)/boot/grub/i386-pc/normal.mod
normal.mod

почему личинка не нашла его?
check $ prefix - абсолютное местоположение каталога grub
(устанавливается, когда grub установлен с помощью grub-install)

grub> echo $prefix
(hd0,msdos2)/boot/grub

проверьте $ root - устройство по умолчанию для путей, которые не включают в себя устройство
grub, изначально устанавливает его для устройства из префикса $

grub> echo $root
hd0,msdos2

root и префикс указывают на неправильный раздел (hd0, msdos2),
установите $ root и префикс $ на раздел, где мы нашли normal.mod (hd0, msdos1)

grub> set root=(hd0,msdos1)
grub> set prefix=(hd0,msdos1)/boot/grub

загрузить и запустить нормальный модуль

grub> insmod normal
grub> normal

Некоторые другие команды, которые могут быть полезны

ls перечисляет все устройства и разделы

grub> ls
(hd0) (hd0,msdos5) (hd0,msdos1)

раздел ls

grub> ls (hd0,msdos1)
        Partition hd0,msdos1: Filesystem type ext* - Last modification time
2014-05-08 15:56:38 Thursday, UUID c864cbdd-a2ba-43a4-83a3-66e305adb1b6 -
Partition start at 1024KiB - Total size 6290432Kib

файловая система ls (примечание / в конце)

grub> ls (hd0,msdos1)/
lost+found/ etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/
root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz initrd.img cdrom/

загляните внутрь / boot / grub
наличие каталога i386-pc означает, что это установка BIOS,
наличие каталога x86_64-efi будет указывать на установку EFI

grub> ls (hd0,msdos1)/boot/grub
i386-pc/ locale/ fonts/ grubenv grub.cfg

Bain
источник
+1 После выполнения этих шагов, чтобы загрузиться в мою установку Ubuntu, я побежал, sudo grub-install /dev/sdXчтобы установить мой grub. Я думаю, что установка LVM как-то запутала мой grub.
DavidG
Я думаю, если вы получите «Неизвестная команда« search-file », как я только что сделал, пришло время сдаться. Мой совет людям никогда не устанавливать Ubuntu без DVD-диска восстановления Windows. Как я только что узнал, наличие раздела восстановления недостаточно, когда Граб испортится, а также, никогда не устанавливайте Ubuntu на чей-то компьютер с Windows, потому что, если он испортится, они действительно разозлятся
Scooter
@Scooter Смотрите этот ответ для получения инструкций по переустановке Grub путем загрузки live CD / USB.
Bain
@bain Спасибо за ответ. В моем случае сделал переустановку с диска Ubuntu iso. Ubuntu выяснил, что grub испорчен или, может быть, он просто автоматически записывает поверх него, но он перенаправил его туда, где я снова смог загрузиться в Windows.
Скутер
Похоже, что спасательная оболочка Grub не поддерживает ни одну из этих команд. "Неизвестная команда 'search.file'"
Cerin
30

Решил это на машине сегодня днем. Кажется, что одной из причин этой проблемы является установщик, который думает, что у вас есть безопасная загрузка EFI, когда вы этого не делаете, и, следовательно, загружаете неправильные файлы GRUB.

Что вам нужно сделать, это установить GRUB 2. Для этого вам нужно загрузиться с живого экземпляра, смонтировать корневой раздел и установить.

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

sudo fdisk -l

Перейти на раздел, в котором установлена ​​Ubuntu.

Когда у вас есть раздел, вам нужно его смонтировать. Предполагая, что корневой раздел находится в / dev / sda5, это будет:

sudo mount /dev/sda5 /mnt

Затем установите GRUB 2

sudo grub-install /dev/sda --root-directory=/mnt [используйте копирование и вставку для этого, поскольку есть некоторые пробелы, которые вам нужно получить правильно.]

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

Оригинальное решение для этого было здесь: http://ubuntujournal.blogspot.com/2012/11/fix-new-install-of-ubuntu-1210-wont-boot.html

MorrisseyJ
источник
1
Не работал для меня У меня та же проблема, и я все еще ищу решение.
ExpatEgghead
3
--root-directory теперь --boot-directory в grub2
bain
1
Еще одно простое исправление, которое сработало для меня, - скопировать резервную копию grup, расположенную в /etc/grub.d/backup, в / boot / grub. Проверьте прилагаемый файл readme для соответствующих папок и путей.
Jhexp
В моем случае проблема заключалась в том, что у меня было 2 жестких диска, а последовательность bios сначала искала неправильный диск. На этом диске была старая поврежденная установка grub.
eusoubrasileiro
Если вы не можете сказать, какой из fdisk является правильным, эта SO может помочь (она помогла мне определить, какое устройство / media / ubuntu / some-name было включено
Michael
2

Я не нашел эту информацию на форумах, поэтому я хочу поделиться некоторой информацией, несмотря на то, что этот вопрос задавался давно:

Если у вас большой (например, 1 ТБ) раздел с установленной Ubuntu, и вы не выделяете дополнительный раздел для / boot /, это может быть причиной таких ошибок. Когда GRUB запускается, он использует драйвер биосдиска для чтения обычных драйверов из каталога / boot / grub /. Иногда этот каталог может быть физически расположен на жестком диске где-то после максимума, поддерживаемого сектором биодисков. Проблема может появиться, например, после обновления системы. Кроме того, я всегда сталкиваюсь с этой проблемой после новой установки Ubuntu 13.10, но она может отличаться, поскольку это зависит от материнской платы / BIOS.

Вы можете проверить это с помощью grub recovery - после установки правильных PREFIX и ROOT попробуйте ls / boot - если вы ничего не видите, но можете видеть файлы там при загрузке с live cd / flash-накопителя - чем у вас проблема, описанная выше ,

Вы можете делать разные вещи, чтобы сделать систему загрузочной, но единственный способ избежать этой проблемы в будущем (во время dist-upgrade) - это поместить каталог / boot в отдельный небольшой раздел.

огорчение
источник
1

Другие решения могут не работать, если вы получите grub-rescueприглашение, и / или ваша конфигурация использует LVM, этот должен.

Загрузитесь с аварийного диска (совет: я храню небольшой дистрибутив на отдельном разделе моего резервного USB-диска).

Если вы используете LVM, найдите имя своей группы томов с помощью lvdisplayдругих команд, связанных с LVM. Активируйте его (иначе mount: special drive /dev/volumegroupname/partition does not existпри попытке монтирования вы получите ошибку):

vgchange -a y volumegroupname

Теперь смонтируйте ваш обычный /раздел, например, на /mnt :

mount /dev/volumegroupname/partition /mnt

Также смонтируйте несколько специальных устройств (а также в /bootотдельном разделе):

mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev
mount -t sysfs /sys /mnt/sys

Тогда chrootв ваш обычный дистрибутив:

chroot /mnt

Наконец, переустановите GRUB2 - команды могут отличаться в зависимости от вашего дистрибутива, это работает на Slackware (если ваш диск есть /dev/sda):

grub-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

Перезагрузитесь и все готово.

Скиппи ле Гран Гуру
источник
0

ВЫБРАННЫЙ ОТВЕТ НИКОГДА НЕ РАБОТАЕТ.

ЭТО РАБОТАЕТ:

  1. Переустановите свою ОС , перейдите к « сделать что-то еще », создайте таблицы разделов,
  2. Используйте ваш раздел Windows в качестве основного загрузочного устройства .

Второй шаг важен .

НЕ ИСПОЛЬЗУЙТЕ/boot .

Может быть другое решение: попробуйте вручную изменить загрузочное устройство во время запуска; однако, я не думаю, что это сработает, и мне еще предстоит это проверить.

Это давняя проблема, которая сохранялась в Ubuntu вплоть до 17.10.

Wolfpack'08
источник