Кто-нибудь знает способ «загрузить» другое ядро Linux изнутри Linux, отказавшись от исходного ядра / initrd? Идея состоит в том, что я могу загрузить свой сервер с небольшой копии Linux, предназначенной только для чтения, которая выполняет некоторые служебные задачи / сбор данных, а затем проверяет сервер управления, чтобы выяснить, что делать с сервером. В большинстве случаев это будет просто загрузка Linux / Windows с локальных жестких дисков или создание образа коробки.
По сути, я хочу, чтобы крошечная копия Linux быть загрузчик вместо специализированного (и менее гибкого) пакета загрузчика. Крошечная копия Linux может быть на USB-ключе или доставлена по PXE.
Loadlin делал это для Windows, поэтому я мог создать эту среду в DOS ... но сеть может быть сложной задачей, и я теряю множество инструментов.
Другие варианты - виртуализация. Вся описанная выше автоматизация является частью ОС хоста, и она проверяет сервер управления, чтобы определить гостей для запуска и тому подобное. Как это делают облачные серверы. Или я мог бы сделать некоторую магию на стороне PXE: сначала PXE загрузит копию Linux для сбора данных, внесите изменения в PXE-сервер и перезагрузите его, когда он во второй раз загрузит PXE удаленное ядро, но с локального диска ОС.
Что ж, в настройке чистого Linux у вас есть kexec, который можно использовать для «перезагрузки» ядра / ОС без необходимости перезагружать оборудование / снова загружать BIOS. Что хорошо работает для всего, кроме паники ядра.
Но в смешанной среде, я думаю, у Eater my есть решение. По сути, вы должны загружаться в свой 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 для обратного подключения к хосту и запускать скрипты и инструменты по своему усмотрению.
Для того, что вы делаете, это был бы мой выбор.