переключаться между разными версиями ядра без перезагрузки

Я хочу переключаться между различными версиями ядра, установленными в моей системе, без перезагрузки.

То есть, если у меня есть ядро ​​3.0.0-16-generic, работающее в данный момент, и у меня также есть старое ядро ​​3.0.0-14-generic, то я могу переключиться на 3.0.0-14-generic (другое ядро) без перезагрузки.

(мне нужно делать отладку в реальном времени и вносить изменения, поэтому я не могу перезагрузиться)

11
задан 12 March 2012 в 15:32

3 ответа

Я думаю, что эти ответы должны быть обновлены.

Существует kpatch в настоящее время , который является более нативным, чем ksplice и др.

Он не может изменять структуры данных в ядре, хотя, по понятным причинам, поэтому он в основном полезен для горячих патчей.

Общая проблема всегда такова: Запущенные процессы по-прежнему поддерживают структуры данных ядра, ожидая, что функции ядра будут ожидать их и возвращать. И без тех процессов, которые были сделаны для этого, на самом деле невозможно узнать, если это так. Таким образом, вы не можете изменить их, пока все процессы, которые их используют, не будут перезапущены. Это также потребовало бы непосредственного обновления всех этих программ.
И я даже не упомянул об изменениях драйверов, когда оборудование находится в особом состоянии. (Та же проблема, что и у kexec .)

0
ответ дан 12 March 2012 в 15:32

Как упомянутый Oli, Ваш лучший выстрел является, вероятно, виртуализацией.

Тем не менее при переделывании аппаратных средств виртуализация не могла бы сократить их для Вас, в этом случае, Вы могли использовать kexec подкачивать рабочее ядро без полной перезагрузки.

Взятый от ArchWiki kexec страница:

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

Обратите внимание, что вышеупомянутое все еще перезапустит все сервисы, включая Вашу init систему, сервер дисплея, сети, и т.д. Однако, если Вы используете достаточно быструю init систему, как systemd, Ваш может загрузиться в Ваше новое ядро через 2-3 секунды, так как Вы обходите BIOS/UEFI и загрузчик.


Подобное описание может быть найдено на странице RapidReboot Ubuntu Wiki.

2
ответ дан 12 March 2012 в 15:32

Невозможно обменять два полных Ядра. Я уверен, что вы понимаете значение монолитного ядра, такого как Linux, и почему это делает невозможным его простую замену.

Самое близкое, что вы можете получить - это процесс установки патчей с использованием Ksplice . Он преобразует обновления ядра в магические прокладки, которые могут закрывать дыры в работающем ядре, позволяя держать компьютер включенным бесконечно без перезагрузки. Для ваших целей он также позволяет вам откатывать изменения.

Это бесплатно для выпусков Ubuntu Desktop, так что вы можете поиграть с ним, но вы должны заплатить подписку на серверы (где такого рода вещи наиболее необходимы).


Только что видел ваши правки. Ksplice, вероятно, не поможет, если вы вручную взламываете и собираете свои собственные Ядра для отладки, поскольку «служба» состоит в том, что они предоставляют специальные обновления, и вы не можете создавать их самостоятельно.

Если вы просто строите вещи против официального ядра, оно все равно может работать.


Еще одна идея: виртуализация. Вы можете собрать новое ядро, поменять местами виртуальную машину и перезагрузить компьютер. Это все еще займет время, необходимое для перезагрузки, но вы можете сделать виртуальную машину намного более легкой, чем ваша машина разработки (основать ее на Ubuntu Server, удалить X-сервер, если он вам не нужен, и т. Д.).

0
ответ дан 12 March 2012 в 15:32

Другие вопросы по тегам:

Похожие вопросы: