Автор Тема: Не устанавливается GRUB после полной переустановки системы  (Прочитано 16757 раз)

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Доброе время суток,

Хотел бы попросить совета и профессиональных мнений касательно моей проблемы.

У меня ноутбук, купленный в своё время с предустановленной Windows 8. После пары лет эксплуатации я поставил второй системой ALT Linux KDesktop 7.0.5. Года через полтора я обновился до восьмой платформы, как описано на Вики, и всё в принципе работало, пока вдруг загрузчик не перестал работать -- после включения начинала грузиться Windows. Я скачал образ установки KDesktop 8, удалил все линуксовые разделы и поставил эту версию с нуля.

Восьмая платформа проработала где-то год, но затем во время работы в ALT Linux произошло зависание и компьютер пришлось выключать методом нажатия и удержания кнопки питания. После этого ноутбук стал неправильно выключаться: индикатор батареи продолжает светиться даже после отключения от электросети и не происходит включение по нажатию кнопки питания. Однако если нажать где-то три произвольные клавиши на клавиатуре, после этого нажатие на кнопку питания приводит к включению.

Параллельно загрузчик ALT Linux стал снова пропадать. Один раз мне удалось его восстановить с помощью fixmbr после загрузки с ALT Linux Rescue, однако где-то через неделю ошибка повторилась, в этот раз fixmbr не помог: выдавал ошибку
Could not prepare Boot variable: No such file or directoryКасательно проблемы с выключением я почитал информацию на сайте и форумах производителя, где были советы сделать полное восстановление заводских настроек. Попытка восстановить Windows ни с раздела восстановления на жёстком диске, ни с аварийной USB не удалась, но я скачал образ Windows 8.1, полностью очистил жёсткий диск с помощью diskpart и установил Windows 8.1 с нуля. Однако последующие попытки установить какую-либо операционную систему из семейства Linux не удаются из-за постоянных ошибок с записью загрузчика.

Сегодня я пытался поставить KDesktop 8.3 (с автоматической разметкой диска), но в отличие от предыдущих раз он отказался записывать загрузчик в EFI с такими ошибками (привожу лог не полностью):
File descriptor 3 (pipe [68688])
File descriptor 4 (pipe [67714])
<ещё несколько таких же File descriptor'ов>
Warning: failed to connect to lvmetad. Falling back to device scanning.
<ещё несколько таких же File descriptor'ов>
Warning: failed to connect to lvmetad. Falling back to device scanning.
Could not prepare Boot variable: No such file or directory.
efibootmgr failed to register the boot entry: Ошибка ввода-вывода
Предполагаю, что после аварийного выключения в ноутбуке что-то поломалось, но не могу понять, проблема в железе или его некорректной конфигурации.

Я попробовал проверить жёсткий диск на ошибки с помощью chkdsk, программа заявляет, что ошибки есть, но запуск с параметром /F выдаёт сообщение, что исправить их невозможно из-за того, что диск защищён от записи. Если действительно есть проблемы с жёстким диском (например, битые сектора), как лучше попытаться это исправить и может ли это влиять на неправильное выключение?

Примечание: все попытки поставить Linux осуществлялись при отключённом в BIOS Secure Boot и отключённом "быстром запуске" в Windows. Я всегда грузился в режиме UEFI, всё прекрасно работало.
« Последнее редактирование: 26.06.2019 16:14:46 от MrFlibble »

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Перед установкой ОС, загрузитесь с любого 64-бит Linux в LiveCD или в ALT Rescue и дайте следующие команды:
efibootmgr | grep -E "^Boot[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" |
while read bootnum junk; do
       efibootmgr -q -B -b "${bootnum:4:4}"
done
Затем перезагрузитесь и ставьте себе спокойно Linux. В современных сборках на Сизифе появилась ручка для автоматического решения данной проблемы, но нужно выбирать не первый пункт по умолчанию на шаге установки загрузчика, а второй -- EFI (с предварительной очисткой NVRAM).
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
На всякий случай уточню: каждая строка это отдельная команда или просто так отформатировано?

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Это всё одна команда, записанная как скрипт на нескольких строках. Если вставить как есть -- не ошибётесь. Если в одну строку, то ";" перед done.
« Последнее редактирование: 26.06.2019 18:36:13 от klark973 »
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Большое спасибо!

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Большое спасибо!
А что, помогло это решить проблему?
To moan or to solve -- that is the question!

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
...во время работы в ALT Linux произошло зависание и компьютер пришлось выключать методом нажатия и удержания кнопки питания. После этого ноутбук стал неправильно выключаться: индикатор батареи продолжает светиться даже после отключения от электросети и не происходит включение по нажатию кнопки питания. Однако если нажать где-то три произвольные клавиши на клавиатуре, после этого нажатие на кнопку питания приводит к включению.
С этим более-менее понятно: в настройках энергосбережения на кнопку питания было установлено действие "засыпать на диск", поэтому по ней он не выключается, а засыпает, индикатор батарейки на это намекает. В руководстве к ноутбуку наверняка говорится, что именно означает то или иное состояние индикатора. А чтобы ноутбук вышел из этого состояния, очевидно, необходимо нажатие любой клавиши или короткого нажатия на кнопку питания, на самом деле может зависеть от модели ноутбука. В зависимости от железа и настроек, выход из спячки может работать некорректно.

efibootmgr failed to register the boot entry: Ошибка ввода-выводаПредполагаю, что после аварийного выключения в ноутбуке что-то поломалось, но не могу понять, проблема в железе или его некорректной конфигурации.
Ничего не поломалось, просто при очередной установке Windows 8 память NVRAM была окончательно заполнена. При установке загрузчика туда обычно сохраняется запись о новом загрузчике ОС, то есть, о новом бинаре в разделе EFI. Но при установке винды запись в NVRAM часто выполняется настолько некорректно, что несмотря на наличие там единственной записи, всего остального либо не видно совсем, либо оно выглядит как мусор в непонятной кодировке. И никакие новые записи добавить нельзя -- efibootmgr сообщает об ошибках в/в либо о нехватке места в NVRAM.

Единственным способом вылечить компьютер от этого недуга является вышеупомянутая команда. Она удаляет все записи из NVRAM. При удалении последней записи включается флаг автоматического восстановления служебного минимума, определяемого на заводе, о чём радостно сообщает efibootmgr. Восстановление NVRAM будет выполнено при перезагрузке. Желательно, чтобы к тому моменту единственная нужная для загрузки запись была добавлена, тогда машина будет всегда грузиться с неё гарантированно даже после восстановления остальных записей в NVRAM. Обеспечить это можно, выполнив указанную команду до того, как инсталлятор дойдёт до шага установки загрузчика, временно переключившись в текстовую консоль. На Сизифе мы это добавили прямо в инсталлятор, так что там теперь три варианта установки загрузчика в EFI.
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
klark973, спасибо за подробные объяснения!
Обеспечить это можно, выполнив указанную команду до того, как инсталлятор дойдёт до шага установки загрузчика, временно переключившись в текстовую консоль
А как это правильно сделать? Если я из программы установки нажимаю Ctrl+Alt+F2, то на экран выводится консоль от root@localhost, но я не могу вводить никакие команды: при нажатии буквенных клавиш компьютер либо выдаёт звуковой сигнал ошибки, либо ничего не происходит, либо выводится мусор (обычно сочетания типа ^V, ^B и т. п. вместо отдельных букв). Нажатие Ctrl+Alt+F1 выводит на экран список сообщений, относящиеся к загрузке установочной программы. Как обратно вернуться из этого состояния в графическую среду установщика, я не разобрался, помогает только перезагрузка по Ctrl+Alt+Del.

Я могу загрузиться в Live Session с загрузочной флешки и дать команду efibootmgr, как Вы описали выше, в консоли через sudo, но не уверен, что это правильный способ.

Не исключаю, что описанные выше проблемы связаны с барахлящей клавиатурой ноутбука.

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
А как это правильно сделать?
Вам проще всего сделать в LiveCD, только используйте su-, а не sudo. После этого сразу выключить ноут, вставить нужный загрузочный носитель и выбрать клавишами BIOS загрузку с него для начала установки системы. Сброс NVRAM произойдёт при этом первом включении. Там не останется никаких старых записей, в том числе, уйдёт информация о текущей установленной системе. Но вам какая разница, если всё равно сейчас ставить новую систему. А если даже останется винда рядом стоять, то запись о её загрузчике в NVRAM больше не требуется -- GRUB найдёт все установленные ОС и создаст соответствующие пункты меню.

Не исключаю, что описанные выше проблемы связаны с барахлящей клавиатурой ноутбука.
Возможной причиной могут быть драйверы, связанные с DRM/видео. Вот буквально на днях: https://bugzilla.altlinux.org/show_bug.cgi?id=36938
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Вам проще всего сделать в LiveCD, только используйте su-, а не sudo.
Спасибо! Имеет ли принципиальное значение, будет ли это Live Session с установочного носителя, LiveCD с соответствующего отдельного образа или с Rescue LiveCD?

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Спасибо! Имеет ли принципиальное значение, будет ли это Live Session с установочного носителя, LiveCD с соответствующего отдельного образа или с Rescue LiveCD?
Нет, главное, чтобы там был вход для рута и efibootmgr. Я обычно использую ALT Rescue.
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Добрый день.

Я только что загрузился с установочного носителя ALT Linux KDesktop 8.3 в режиме LiveCD, открыл Konsole и залогинился с правами root через su-, скопировал и выполнил скрипт для  efibootmgr, однако получаю сообщение об ошибке:
Could not delete variable: No space left on deviceЧто делать?

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Что делать?
Предлагаю выполнить следующие команды и выложить сюда их вывод:
rpm -q efibootmgr
grep efi /proc/mounts
grep efi /proc/modules
efibootmgr
efibootmgr -r
efibootmgr -y
efibootmgr -v
uname -a
Ещё интересует полный вывод efibootmgr после выполнения скрипта (его вывод тоже интересен). Возможно, в где-то глубоко в недрах вашего BIOS'а запрятана функция очистки NVRAM, но скорее, что-то не так делается, поскольку при удалении записей место освобождается, а не наоборот.
To moan or to solve -- that is the question!

Оффлайн MrFlibble

  • Завсегдатай
  • *
  • Сообщений: 57
Предлагаю выполнить следующие команды и выложить сюда их вывод:
Вот что получается:
[root@localhost ~]# rpm -q efibootmgr
efibootmgr-15-alt1.M80P.1
[root@localhost ~]# grep efi /proc/mounts
efivarfs /sys/firmware/efi/efivars efivarfs rw,nosuid,nodev,noexec,relatime 0 0
[root@localhost ~]# grep efi /proc/modules
efi_pstore 16384 0 - Live 0xffffffffa0315000
efivars 20480 1 efi_pstore, Live 0xffffffffa02d4000
efivarfs 16384 1 - Live 0xffffffffa008e000
[root@localhost ~]# efibootmgr
BootCurrent: 0001
Timeout: 2 seconds
No BootOrder is set; firmware will attempt recovery
[root@localhost ~]# efibootmgr -r
No DriverOrder is set
[root@localhost ~]# efibootmgr -y
No SysPrepOrder is set
[root@localhost ~]# efibootmgr -v
BootCurrent: 0001
Timeout: 2 seconds
No BootOrder is set; firmware will attempt recovery
[root@localhost ~]# uname -a
Linux localhost.localdomain 4.19.35-un-def-alt0.M80P.1 #1 SMP PREEMPT Thu Apr 18 17:42:53 UTC 2019 x86_64 GNU/Linux
Ещё интересует полный вывод efibootmgr после выполнения скрипта (его вывод тоже интересен).
По повторном выполнении скрипта никаких сообщений не выводится (в первый раз была только ошибка, которую я упомянул в предыдущем сообщении):
[root@localhost ~]# efibootmgr | grep -E "^Boot[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" |
> while read bootnum junk; do
>        efibootmgr -q -B -b "${bootnum:4:4}"
> done
[root@localhost ~]#
Однако если верить выводу вышеописанных команд (No BootOrder is set; firmware will attempt recovery), получается, что всё таки очистилось как надо несмотря на сообщение об ошибке?
« Последнее редактирование: 02.07.2019 15:00:26 от MrFlibble »

Оффлайн klark973

  • Завсегдатай
  • *
  • Сообщений: 662
  • Неспящий саппорт
Однако если верить выводу вышеописанных команд (No BootOrder is set; firmware will attempt recovery), получается, что всё таки очистилось как надо несмотря на сообщение об ошибке?
О да, всё выглядит прилично. Собственно это ровно то, ради чего предлагалась такая магия: firmware will attempt recovery!
To moan or to solve -- that is the question!