Я хотел бы перезагрузить ОС, как если бы она была загружена из GRUB, но без перезагрузки всего компьютера. Это связано с тем, что на этом компьютере установлено несколько разных ОС, и хотя перезагрузка необходима, взаимодействие с человеком для выбора параметров загрузки не соответствует этому сценарию. Есть идеи? Я знаю, что вы можете перейти на различные уровни выполнения, но я не знаю (давайте назовем это) «неполной перезагрузки программного обеспечения».
Попробуйте команду kexec , она, кажется, делает именно то, что вам нужно.
kexec -l kernel-image --append=command-line-options --initrd=initrd-image
из kexec manpage:
kexec - это системный вызов, который позволяет загружать и загружать другое ядро из запущенного в данный момент ядра. kexec выполняет функцию загрузчика из ядра. Основное различие между стандартной загрузкой системы и загрузкой kexec заключается в том, что аппаратная инициализация , обычно выполняемая BIOS или встроенным программным обеспечением (в зависимости от архитектуры) , не выполняется во время загрузки kexec . Это приводит к сокращению времени, необходимого для перезагрузки.
...
Вставьте параметры командной строки, которые должны быть переданы новому ядру, в command-line-options
. Передача точного содержимого /proc/cmdline
в command-line-options
- самый безопасный способ гарантировать, что правильные значения передаются ядру перезагрузки.
Никогда не пробовал kexec сам (за исключением, может быть, во время crashdump загрузки ядра дампа, но это был автоматический процесс), я сначала перешел бы в однопользовательский режим, чтобы остановить все процессы перед запуском kexec.