Сбой загрузки UEFI при клонировании образа на новую машину

У меня десять одинаковых машин, и я хочу развернуть один и тот же образ Ubuntu 12.04 на всех них. Я выполнил полную установку на одной из машин и клонировал диск с помощью dd. Проблема в том, что если я использую dd для записи этого образа на диск другого компьютера, он больше не будет загружаться. То есть машина сообщает, что «загрузочные устройства не найдены» на всех машинах, кроме той, на которой я создал iamge.

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

Для чего стоит, запуск Boot-Repair на одном из клонов решает проблему и позволяет машине загружаться, но я бы предпочел не запускать ее вручную на каждой новой машине, которую я хочу клонировать изображение в. Кроме того, похоже, что это привязывает диск к этой машине, поэтому вставка «фиксированного» диска в машину, отличную от той, на которой был запущен Boot-Repair, приведет к появлению сообщения «нет загрузочных устройств найдено».

Ясно, что должна быть возможность создать образ таким образом, чтобы загрузочные записи UEFI работали на любых машинах, поскольку именно так делает установочный образ Ubuntu, но я понятия не имею, как это достигается?

Если это поможет, здесь - это файл информации о загрузке, сгенерированный Boot-Repair, когда он исправил диск на новом компьютере.

4
задан 23 December 2013 в 06:56

3 ответа

В EFI загрузчики хранятся в виде файлов в системном разделе EFI (ESP). Обычно такие файлы имеют уникальные для ОС имена, такие как EFI/ubuntu/grubx64.efi для Ubuntu. Из-за этого, загрузчики должны быть зарегистрированы в NVRAM прошивки. Установщик Ubuntu делает это, когда установлена ​​ОС, но когда вы перемещаете диск на другой компьютер, его NVRAM не был изменен, поэтому компьютер не загружается. Использование Boot Repair установит свежую копию GRUB и зарегистрирует ее в прошивке, тем самым решив проблему. Я предполагаю, что собственный менеджер загрузки вашей прошивки также сканирует и регистрирует загрузчик, но может случиться так, что происходит что-то еще.

Одним из возможных путей решения этой проблемы является копирование GRUB из EFI/ubuntu/grubx64.efi в EFI/BOOT/bootx64.efi. Последнее является резервным именем - компьютер загружается с этого имени, если не может найти зарегистрированный загрузчик. Сменные носители также используют то же имя файла, поскольку, очевидно, установочный диск ОС не может быть предварительно зарегистрирован, если он не использует какое-то согласованное общее имя. Возможно, что Ubuntu и / или Boot Repair также скопировали GRUB под этим именем, что ваша прошивка изначально не обнаружила его по какой-то причине, и что использование менеджера загрузки прошивки заставило его заметить присутствие этого файла, объяснив тем самым возможность загрузки после Вы использовали этот инструмент. На самом деле, это кажется более вероятным, чем то, что ваша прошивка отсканировала имя файла загрузчика Ubuntu по умолчанию.

0
ответ дан 23 December 2013 в 06:56

Любопытно, что проблема решилась сама собой, когда я открыл менеджер загрузки UEFI (F2 во время загрузки) и сбросил к заводским настройкам по умолчанию.

Я предполагаю, что в какой-то момент у меня была включена «Быстрая загрузка» или какая-то такая функция, которая отключила поиск «незарегистрированных» загрузочных разделов UEFI. Запуск grub-update (который вызывает efibootmgr) по существу регистрирует GRUB с помощью менеджера загрузки UEFI, поэтому ему не нужно искать его, но, поскольку эта команда еще не была запущена на клонированных машинах, efibootmgr не был запущен, и поэтому установка GRUB не будет в списке менеджера загрузки.

0
ответ дан 23 December 2013 в 06:56

В ответе Jon Gjensget услужливо сказано:

Выполнение grub-update (которое вызывает efibootmgr) по существу регистрирует GRUB в диспетчере загрузки UEFI

, но затем опускает как запустить efibootmgr. Я не хочу разблокировать зашифрованный диск, монтировать все нужные вещи, такие как /dev, /boot, /boot/efi. и т. д., chroot и, наконец, иметь возможность запускать grub-update, если я могу просто запустить efibootmgr, тем более что диск теперь находится в заведомо исправном состоянии (восстановлен из резервной копии), и я не хочу подождать еще два часа, чтобы перерисовать его, если я испорчу загрузку.

Запуск cd /boot/efi/EFI; cp -r ubuntu BOOT, как , предложенное в комментариях , у меня не сработало, хотя я также сталкиваюсь с проблемой на Intel NUC.

Boot-repair также не работал у меня: кнопки восстановления, как показано на скриншотах, нет, и в дополнительных параметрах нет возможности просто запустить efibootmgr, похоже, что это просто кнопка GUI для запуска. grub-update (и многие другие инструменты, такие как fsck) вместо того, чтобы исправлять загрузку самостоятельно.

Вот команда, которая сработала у меня (запуск с живой загрузочной флешки):

efibootmgr -c -g -d /dev/sda -p 1 -w -L "myboot" -l '\EFI\ubuntu\grubx64.efi'
efibootmgr # to verify it's in the boot options list
efibootmgr -n [ID HERE] # to make sure it boots that option next time

-n [ID] не понадобилась, загружалась эта опция каждый раз после создавая его (все равно не было других работающих вариантов загрузки, поэтому я смущен, почему он просто не пытается загрузиться с единственно возможного варианта загрузки в первую очередь ....).

Используемые параметры:

  • -c создать новый параметр загрузки
  • -g заставить его рассматривать диск как GPT (не уверен, что это необходимо, я не пробовал без этой опции)
  • -d какое устройство использовать, в моем случае /dev/sda
  • -p номер раздела, который содержит вашу загрузочную папку EFI и .efi загрузочный файл, в моем случае устройство было /dev/sda1 (раздел FAT32), поэтому номер раздела 1
  • -w "при необходимости напишите уникальную подпись в MBR" (не знаю, нужно ли это)
  • -L имя по вашему выбору, я выбрал уникальное для меня имя, чтобы я мог его распознать позже
  • -l путь к вашему файлу .efi, который вы хотите использовать для загрузки, я предполагаю, что для grub на x86_64 это всегда \EFI\...\grubx64.efi и ... зависит от вашего дистрибутива. Вы можете найти правильный путь в разделе (ранее указанный -d и -p), и он обычно монтируется в /boot/efi, поэтому вы можете посмотрите в /boot/efi/EFI, какое имя каталога, где находится grubx64.efi.

Источник: https://bbs.archlinux.org/viewtopic.php?id=160757 -- это просто первая команда в потоке. Ответы дают больше предложений, но первая команда сработала для меня.

2
ответ дан 1 April 2020 в 11:54

Другие вопросы по тегам:

Похожие вопросы: