从没有引导加载程序的运行 Linux 直接引导到另一个内核

dir*_*rkt 9 linux kernel reboot

有没有办法从正在运行的 Linux 直接引导到磁盘上的另一个内核,而无需重置机器并通过引导加载程序?

理论上,Linux 应该能够将另一个内核加载到 RAM 中,也可以加载 initrd,正常关闭所有内容shutdown,然后将控制权传递给新内核。

有没有实用的方法来做到这一点?

Gra*_*art 10

听起来您正在寻找kexec

文档中的示例:

例如,如果您要重启的内核映像是/boot/vmlinux,/proc/cmdline 的内容是root=/dev/hda1,而initrd 的路径是/boot/initrd,那么您将使用以下命令加载内核:

kexec -l /boot/vmlinux --append=root=/dev/hda1 --initrd=/boot/initrd
Run Code Online (Sandbox Code Playgroud)

加载此内核后,可以随时使用以下命令将其引导到:

kexec -e
Run Code Online (Sandbox Code Playgroud)

  • 这个想法是至少卸载现有的文件系统等。我阅读了手册页,并用谷歌搜索,但找不到任何东西。Systemd 可以在 kexec -e 之前执行受控关闭,但这是一个非 systemd 系统。我想我会试一试...... (2认同)