![如何使用当前正在运行的内核和 initrd 来运行 kexec](https://linux22.com/image/1197198/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%BD%93%E5%89%8D%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%86%85%E6%A0%B8%E5%92%8C%20initrd%20%E6%9D%A5%E8%BF%90%E8%A1%8C%20kexec.png)
我目前以“ 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_user
path/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
在任何地方看到该选项的记录。