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. Конечно, модуль должен быть доступен. |