
Комментарии 19
Есть ещё один способ, о котором не рассказал автор поста: можно зажать клавишу shift и одновременно кликнуть перезагрузка в Пуск, таким образом попадаем в меню дополнительных параметров загрузки, ну и дальше выбираем загрузку uefi
всегда удивляло что производители прошивок за столько лет так и не смогли договориться и стандартизировать какие кнопочки тыкать чтобы попасть в bios/uefi или бутменю.. спасибо хотя бы что с приходом uefi это можно сделать одной командой из системы без попыток успеть в нужный момент нажать клавишу которую не знаешь, но и тут находятся альтернативноодарённые вроде acer у которых в некоторых моделях это не работает.
По boot меню они почти договорились. В 80% случаев работает F8.
В исключениях точно HP. У них F12.
У меня на ASRock F11
Ещё бывает Esc.
F2. На трех имеющихся машинах.
Что-то не уверен. Навскидку у Lenovo это Enter или отдельная специальная кнопка, у SuperMicro F11, у Asus, кажется , ESC, ещё точно есть варианты с F8 и F12. И наверняка, это н все варианты. 🤷
А есть команда как перезагрузиться из линукса в другую операционку, в моем случае в винду?
grub-reboot <номер или имя пункта загрузки>
Это подходит, если загрузчик GRUB, у меня GPT. Отыскалась статья https://habr.com/ru/articles/341766/, может такой вариант попробую
Спасибо! Вы сняли много головной боли!
есть линкусы без systemd (до сих пор есть). какие идеи как это же сделать там ?
Смотреть исходники и использовать strace.
На самом деле, как правило, в линуксе и андроиде всё делается через системный вызов reboot, который далеко не void reboot(void).
На том же андроиде есть возможность загружаться сразу в fastboot (и не только). Делает это архитектурно-специфичный код в ядре (например, в arch/arm64), собственно и реализующий перезагрузку на данном процессоре. Как правило, логика такая, что при передаче в системный вызов хитрого дополнительного аргумента, определённое значение помещается в определённый аппаратный регистр, который сохраняет своё значение при перезагрузке. А дальше уже BIOS или BootROM и/или загрузчик смотрят в этот регистр, и если значение нужное, то заходят в BIOS, fastboot, emergency download mode, recovery mode и т.д.
Итого, дело не в systemd, а в том, что проверяет (или не проверяет) конкретный BIOS/BootROM.
системный вызов reboot
там ничего такого нет. придется смотреть systemd.
https://github.com/systemd/systemd/blob/main/src/systemctl/systemctl.c
про firmware что-то есть. идет вызов halt_parse_argv из:
https://github.com/systemd/systemd/blob/main/src/systemctl/systemctl-compat-halt.c
а там про firmware уже ничего нет.
В итоге всё приходит в функцию efi_set_reboot_to_firmware в файле src/shared/efi-loader.c, которая вызывает efi_set_variable() из файла src/basic/efivars.c. А уже она, похоже, меняет какой-то файл из каталога /sys/firmware/efi/efivars/, который соответствует флагу UEFI EFI_OS_INDICATIONS_BOOT_TO_FW_UI.
Всё равно в итоге имеем некий параметр, чьё значение не обнуляется при перезагрузке, и на что смотрит BIOS.
На системах с устаревшим BIOS прямого аналога команды systemctl нет.
Clover EFI is a boot loader developed to boot macOS (Hackintoshes), Windows and Linux in legacy or UEFI mode.
3.5 systemd-boot на системах BIOS
"Если вам нужен загрузчик для BIOS-систем, соответствующий The Boot Loader Specification, то можно использовать systemd-boot. Загрузчик Clover поддерживает загрузку в режиме BIOS и имитирует среду EFI."
5.6 systemd-boot on BIOS systems
Загрузка в UEFI/BIOS без горячих клавиш: консольные методы для Windows и Linux