| Summary: | Необходимо монтировать efivars на системах с EFI | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Антон Мидюков <antohami> |
| Component: | startup | Assignee: | Alexey Gladkov <legion> |
| Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | glebfm, ldv, legion, rider |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | |||
| Bug Blocks: | 33000 | ||
|
Description
Антон Мидюков
2021-03-12 10:57:34 MSK
Пропишите в /etc/fstab и он смонтируется. Зачем это нужно именно в setup ? (Ответ для Alexey Gladkov на комментарий #1) > Пропишите в /etc/fstab и он смонтируется. Зачем это нужно именно в setup ? Так система может быть переносной, грузиться как в EFI, так и без. Особенно это актуально для live. (Ответ для Антон Мидюков на комментарий #2) > Так система может быть переносной, грузиться как в EFI, так и без. Особенно > это актуально для live. Если это какое-то специальное решение, то сделайте сервис. Для этого они и нужны. Код будет изолирован, понятен и доступен только тем, кому нужно. Я считаю, что это плохой идеей пихать всё в rc.sysinit. Там должно быть только то без чего нельзя продолжать загрузку. (Ответ для Alexey Gladkov на комментарий #3) > (Ответ для Антон Мидюков на комментарий #2) > > Так система может быть переносной, грузиться как в EFI, так и без. Особенно > > это актуально для live. > > Если это какое-то специальное решение, то сделайте сервис. Для этого они и > нужны. Код будет изолирован, понятен и доступен только тем, кому нужно. > > Я считаю, что это плохой идеей пихать всё в rc.sysinit. Там должно быть > только то без чего нельзя продолжать загрузку. Так то оно так. Вот только пользователи sysvinit, обновив ядро, теряют возможность обновить grub-efi. Даже хуже, модули то обновятся, а grub на ESP разделе нет, так как grub-install ругнётся на то, что переменные EFI не поддерживаются системой. В результате после перезагрузки такая система не загрузится. Как только модуль ядра efivars выкинут из ядра и для x86_64, мы столкнёмся с такой ситуацией. В моей системе c EFI по умолчанию /boot вообще не смонтирован, я его монтирую вручную в тех случаях, когда хочу внести туда изменения. Будет плохо, если в такой системе rc.sysinit начнёт самовольно монтировать /sys/firmware/efi/efivars. Почему тогда grub-install не смонтирует /sys/firmware/efi/efivars если он ему нужен ? (Ответ для Alexey Gladkov на комментарий #6) > Почему тогда grub-install не смонтирует /sys/firmware/efi/efivars если он > ему нужен ? Было бы неплохо. Ладно, аргументацию принимаю, багу закрываю. Насколько я помню - наличие в системе смонтированного /sys/firmware/efi/efivars является указанием для grub-install использовать EFI mode вместо legacy pc mode. Т.е. - это индикатор поддержки EFI системой. /* Are we running on an EFI-based system? */
static int
is_efi_system (void)
{
/*
* Linux uses efivarfs (mounted on /sys/firmware/efi/efivars) to access the
* EFI variable store. Some legacy systems may still use the deprecated
* efivars interface (accessed through /sys/firmware/efi/vars). Where both
* are present, libefivar will use the former in preference, so attempting
* to load efivars will not interfere with later operations.
*/
grub_util_exec_redirect_all ((const char * []){ "modprobe", "efivars", NULL },
NULL, NULL, "/dev/null");
grub_util_info ("Looking for /sys/firmware/efi ..");
if (is_not_empty_directory ("/sys/firmware/efi"))
{
grub_util_info ("...found");
return 1;
}
else
{
grub_util_info ("... not found");
return 0;
}
}
Да, конечно. удаление модуля efivars и efivarfs ни к чему не приводит - grub всё равно находит efi и устанавливает себя правильно, даже когда efivarfs не смонтировано. Но это на x86_64. Ему хватает содержимого /sys/firmware/efi/ В полной системе efivarfs смонтирует systemd. (Ответ для Anton Farygin на комментарий #10) > Да, конечно. удаление модуля efivars и efivarfs ни к чему не приводит - grub > всё равно находит efi и устанавливает себя правильно, даже когда efivarfs не > смонтировано. Но это на x86_64. Как проводился эксперимент? Я обнаружил, что на x86_64 происходит следующее при установке с livecd с ядром un-def 5.10. Смонтированный в системе /sys/firmware/efi/efivars для чрута в устанавливаемую систему не виден. В результате grub-install загружает модуль efivars из зачрученной системы. Если в чруте модуля efivars нет для запущенной версии ядра, получаем облом. А для aarch64 модуля efivars уже нет. в ядре std-def модуль efivars загружается сам при загрузке системы, так что всё замечательно. Вот попробуйте зачрутиться с лайва systemd с ядром un-def (live kworkstation 9.1) в систему, где версия ядра отличается, стандартным способом, c монтированием sysfs, но без монтирования /sys/firmware/efi/efivars. grub-install сделать не сможете. я в обычной системе выгрузил модули, размонтировал каталог и поставил grub. Конечно, модуль должен быть доступен. |