Что делает личинку обновления, и 'modprobe efivars' программы делают в этом случае?

Я устанавливаю Ubuntu 17.04 (но также и относится 16.04) на дешевой серии Acer Aspire ES. Это идет с предварительно установленным Windows или Linux Linpus. Мой прибыл с Linpus.

Что касается многих владельцев такого ноутбука (обсуждение 1, обсуждение 2, обсуждение 3, обсуждение 4), у меня также есть та же проблема - установки Ubuntu очень хорошо, но система не загружается.

После некоторого экспериментирования я использовал следующие команды, и я получил системную работу и прекрасную начальную загрузку:

# mmcblk0p1 is my EFI partition
# mmcblk0p2 is my root partition
sudo mount /dev/mmcblk0p2 /mnt
sudo mkdir /mnt/boot/efi
sudo mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
modprobe efivars
efibootmgr --verbose
apt-get install --reinstall grub-efi-amd64
grub-install --no-nvram --root-directory=/mnt
chroot /mnt
update-grub
cd /boot/efi/EFI
cp -R ubuntu/ BOOT
cd BOOT cp grubx64.efi bootx64.efi
cp -R BOOT/ Linux

Я копирую "человечность" в "BOOT" и "Linux", потому что Linpus имел те же имена в EFI, и я подозреваю, что они трудно кодируются в BIOS.

Кроме того, я попробовал только последними шагами - копия EFI, и переименовывает, и она не работает. Я собираюсь сделать некоторое более сложное разделение включая зашифрованные разделы, таким образом, у меня есть некоторые вопросы:

1. Какое волшебство происходит, когда я выполняю личинку обновления?

2. Команды "modprobe efivars", и "efibootmgr - подробный" также необходимы?

0
задан 22 April 2017 в 06:07

1 ответ

Какое волшебство происходит, когда я выполняю личинку обновления?

GRUB является диспетчером начальной загрузки комбинации и загрузчиком для Linux - он представляет меню параметров загрузки (часть диспетчера начальной загрузки) и при выборе опции Linux он загружает ядро Linux в память и выполняет его (часть загрузчика). Эти функции полагаются на конфигурационный файл GRUB, сохраненный в Ubuntu в /boot/grub/grub.cfg; меню сгенерировано на основе этого конфигурационного файла. Если файл отсутствует, GRUB представляет подсказку, которая читает grub>, который не очень полезен кроме экспертам. Если конфигурационный файл содержит неправильную информацию, Вы могли бы или не могли бы получить меню, и по крайней мере некоторые пункты меню, вероятно, не будут работать.

Что update-grub делает должен просканировать компьютер для Ose и ядер Linux и создать новое grub.cfg файл. Обычно, этот скрипт запущен автоматически при установке нового ядра (который может произойти автоматическим или полуавтоматическим способом, в зависимости от настроек обновления ОС). Можно также работать update-grub вручную - говорят, если Вы внесли изменения в другую ОС, Вы - двойная загрузка, и Вы хотите, чтобы GRUB распознал те изменения. В Вашем случае я не уверен, что это было необходимо. В теории это должно было быть настроено при установке Ubuntu. OTOH, ясно та установка не была совершенно успешна, так возможно, grub.cfg пропускал или неправильно сконфигурировал.

Команды "modprobe efivars", и "efibootmgr - подробный" также необходимы?

modprobe efivars управляйте загружается efivars модуль ядра, который предоставляет доступ ядра к переменным EFI, сохраненным в NVRAM. Эти переменные записывают вещи как указатели на определенные файлы загрузчика, используемые встроенным микропрограммным обеспечением и порядком, в котором используются те загрузчики. Обратите внимание, что порядком управления во время начальной загрузки является EFI к GRUB (или другой диспетчер начальной загрузки / загрузчик) к ядру ОС (Linux). Процесс установки ОС поэтому требует некоторого способа сказать EFI запускать GRUB, а не некоторый другой загрузчик, и переменные EFI являются частью того, как это сделано.

efibootmgr инструмент является другой частью этого процесса; это выбирает варианты, чтобы позволить Вам просмотреть или изменить переменные EFI. Таким образом, efibootmgr говорит с ядром, которое использует efivars модуль для доступа к переменным EFI NVRAM. Определенное efibootmgr управляйте, чтобы Вы упомянули, efibootmgr --verbose, просто отображает текущие переменные начальной загрузки. Таким образом это не важно в процедуре, которую Вы обрисовали в общих чертах и могли быть опущены. OTOH, grub-install команда, в системе EFI, будет обычно обновлять переменные начальной загрузки EFI; но то, что Вы передали его --no-nvram опция сказала этому не делать так. Это могло создать проблемы, кроме....

Вне этого Вы скопировали и переименовали GRUB к двум другим именам. Один из них является именем файла нейтрализации EFI, EFI/BOOT/bootx64.efi. Это - файл, который EFI пытается выполнить как загрузчик, если он испытывает недостаток в переменных EFI, которые указывают на него на другое имя, или если те другие записи недопустимы, или их двоичные файлы возвращаются к EFI, не запуская ОС. Обычно, изменяя переменные EFI через efibootmgr (который является одной вещью это grub-install сделает, если названо без --no-nvram) сделает систему загрузочной. Некоторые компьютеры, тем не менее, имеют ошибочные EFIs, которые забывают или игнорируют их переменные EFI. В таких системах, копируя/переименовывая загрузчик, поскольку Вы сделали, требуется, чтобы заставлять систему загружаться. То, что Ваша установка "запаса" не работала и необходимо было перейти через эти обручи, предполагает, что у Вас может быть такой компьютер.

Для большего количества чтения на этих предметах я рекомендую:

2
ответ дан 3 November 2019 в 10:32

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

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