Я устанавливаю 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 - подробный" также необходимы?
Какое волшебство происходит, когда я выполняю личинку обновления?
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. В таких системах, копируя/переименовывая загрузчик, поскольку Вы сделали, требуется, чтобы заставлять систему загружаться. То, что Ваша установка "запаса" не работала и необходимо было перейти через эти обручи, предполагает, что у Вас может быть такой компьютер.
Для большего количества чтения на этих предметах я рекомендую: