如何使用当前正在运行的内核和 initrd 来运行 kexec

如何使用当前正在运行的内核和 initrd 来运行 kexec

我目前以“ root”的身份登录,

我想kexec从当前运行的内核加载一个新内核,然后normal_user在启动 kexec 内核时以“ ”身份登录。

以下是 kexec 的使用示例:

https://www.thegeekdiary.com/kexec-command-examples-in-linux/

kexec -l path/to/kernel --initrd=path/to/initrd --reuse-cmdline

我想在从该“ ”启动时使用kexec“ ”身份登录:normal_userpath/to/kernel

预期用法如下:

# echo "now the user is root"
# kexec -l path/to/kernel --initrd=path/to/initrd --reuse-cmdline --login-as-user "normal_user"
# echo "now the user is normal_user, run d-bus command for the normal_user"

如何从当前运行的ubuntu 22.04中找到真正的“ path/to/kernel”和“ ”?path/to/initrd

以及如何login-as-user在 kexec 命令行中执行?

答案1

查看手册页kexec,然后查看/boot文件夹内部。

正如手册页所述:

For example, if the kernel image you want to reboot to is /boot/vmlinux, the  contents  of
/proc/cmdline  is  root=/dev/hda1,  and  the  path to the initrd is /boot/initrd, then you
would use the following command to load the kernel:

      kexec -l /boot/vmlinux --append=root=/dev/hda1 --initrd=/boot/initrd

After this kernel is loaded, it can be booted to at any time using the command:

      kexec -e

对于现代 Ubuntu 系统,当前内核是/boot/vmlinuz,当前内核 ramdisk 是/boot/initrd.img(查看 可以明显看出/boot)。

因此在这种情况下,您的命令将是:

kexec -l /boot/vmlinuz --initrd=/boot/initrd.img --reuse-cmdline

加载完成后,执行:

kexec -e

对于 Ubuntu,我没有--login-as-user在任何地方看到该选项的记录。

相关内容