Загрузка нового ядра Linux изнутри Linux?
Кто-нибудь знает способ "загрузить" другое ядро Linux из Linux, отказавшись от исходного ядра /initrd? Идея состоит в том, что я могу загрузить свой сервер из небольшой копии Linux, доступной только для чтения, которая выполняет некоторые задачи по ведению домашнего хозяйства / сбору данных, а затем проверяет работу сервера управления, чтобы выяснить, что делать с сервером. В большинстве случаев это будет просто для загрузки Linux/Windows с локальных жестких дисков или создания образа.
По сути, я хочу, чтобы крошечный экземпляр Linux был загрузчиком, а не специализированным (и менее гибким) пакетом загрузчика. Крошечная копия Linux может быть на USB-ключе или доставлена PXE.
Loadlin раньше делал это для Windows, поэтому я мог создать эту среду в DOS... но работа в сети может быть сложной, и я теряю много инструментов.
Другие варианты - виртуализация. Вся описанная выше автоматизация является частью операционной системы хоста, и она проверяет сервер управления, чтобы выяснить, какие гости запускаются, и тому подобное. Как облачные серверы делают это. Или я мог бы поработать на стороне PXE: PXE сначала загрузит сборочную копию Linux, внесет изменения на PXE-сервер и перезагрузит его во второй раз, когда PXE загружает удаленное ядро, но с локального диска ОС.
3 ответа
Хорошо в установке с чистым linux, у вас есть kexec, который можно использовать для "перезагрузки" ядра / ОС без перезагрузки оборудования / повторной загрузки BIOS. Что хорошо работает для всего, кроме паники ядра.
Но в смешанной среде, я думаю, у Eater есть решение. По сути, вы загружаетесь в свой Linux, запускаете любые скрипты, которые вам нужны / делаете все, что требуется, и затем перезагружаетесь в выбранную вами ОС.
Имейте в виду, однако, что это приводит к чрезмерно медленному времени загрузки. Конечно, вы можете оптимизировать время загрузки Linux до такой степени, что это может занять несколько секунд, вам все равно придется иметь дело с загрузкой BIOS дважды. Все это видно пользователю, который затем может принять решение о сумасшествии.
Используя GRUB, вы можете сделать что-то вроде этого:
[root@localhost ~]# echo "savedefault --default=2 --once" | grub --batch
[root@localhost ~]# reboot
Это инструктирует GRUB обойти timeout
а также default
настройки из /boot/grub.conf
и загрузочная запись 2 только один раз. С использованием --once
флаг гарантирует, что при последующих загрузках значения по умолчанию в boot/grub.conf
сопровождаются
Насколько я знаю, вы не можете загрузить второе ядро изнутри работающего в данный момент ядра.
Лучше всего установить виртуальную машину через Xen и заставить ее выполнять задачи через интерфейс виртуальной сети. Если вы настроите новую виртуальную машину, вы сможете использовать SSH для подключения обратно к хосту и запускать сценарии и инструменты по своему усмотрению.
Для того, что вы делаете, это был бы мой выбор.