Замена используемого ядра без перезагрузки

Автор Gamliel, 19 февраля 2020, 17:04:42

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Gamliel

Хочу понять, возможно ли заменить используемое на VPS ядро, не перезагружаясь. Поискал, почитал. Установил пакет kexec-tools. Выкурил ман.

Далее:
$ apt list --installed 2>/dev/null | grep "^linux"
linux-base/stable,now 4.6 all [installed,automatic]
linux-image-4.19.0-6-amd64/stable,now 4.19.67-2+deb10u2 amd64 [installed,automatic]
linux-image-4.19.0-8-amd64/stable,now 4.19.98-1 amd64 [installed,automatic]
linux-image-amd64/stable,now 4.19+105+deb10u3 amd64 [installed]
$ uname -rv; uptime -p
4.19.0-6-amd64 #1 SMP Debian 4.19.67-2 (2019-08-28)
up 22 weeks, 3 days, 12 hours, 38 minutes
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.19.0-6-amd64 root=UUID=0ed775ba-5126-4a48-94fc-e8290259dcc9 ro quiet
$ sudo kexec --load /boot/vmlinuz-4.19.0-8-amd64 --reuse-cmdline --initrd=/boot/initrd.img-4.19.0-8-amd64
$ sudo kexec --exec

Связь (SSH) прервалась. Зашёл снова:
$ uname -rv; uptime -p
4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26)
up 1 minute
$ cat /proc/cmdline
root=UUID=0ed775ba-5126-4a48-94fc-e8290259dcc9 ro quiet
$ sudo reboot

Разумеется, связь прервалась. Зашёл снова:
$ uname -rv; uptime -p
4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26)
up 0 minutes
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.19.0-8-amd64 root=UUID=0ed775ba-5126-4a48-94fc-e8290259dcc9 ro quiet


То есть kexec даёт тот же самый результат, что и обыкновенный  sudo reboot, да ещё и не вполне корректно. Смысл? И возможно ли заменять используемое ядро без перезагрузки?

Olej

Цитата: Gamliel от 19 февраля 2020, 17:04:42И возможно ли заменять используемое ядро без перезагрузки?
Думаю, что по самому смыслу монолитного ядра Linux это невозможно, в принципе: связи имён ядра (вызовов API) идёт по абсолютным адресам в виртуальном адресном пространстве, при смене ядра все адреса плывут, даже внутри монолитной части ядра, не говоря уже о модулях.
См. /proc/kallsyms