我使用kexec成功地加载了内核,但它只是打印dmesg行。如何摆脱这种情况进入initramfs提示符?Ctrl-Alt-F2只加载一个黑色屏幕,ctrl什么也不做。
以下是我的kexec命令行:
kexec -l $kernel --initrd=$initrd --command-line="root=UUID=... acpi=off ro text earlyshell debug showerr debuginitrd"earlyshell应该为我提供对shell的访问,但它不能。如果没有命令行,我只会在脚本循环中结束,即使使用ctrl-c也无法打破这个循环。
发布于 2019-06-30 15:23:29
已解决:
核心论点是:
earlyshell不是真的发射了炮弹?但是,使用参数运行内核:
break=premount把initramfs的壳给了我。
发布于 2019-06-30 08:55:38
你把正确的--initrd=给kexec了吗?
我刚刚安装并试用了kexec。如果我去的话
kexec -l /boot/vmlinuz --initrd=/boot/initrd.img --append=root=/dev/sda3 然后是kexec -e。(我没有氪星.)
我首先试着遵循“使用/proc/cmdline”的提示,但这是行不通的。在我看来,您似乎需要额外提供--initrd=选项。
您需要"initramfs提示“来提供密码(这样您就可以挂载加密的设备了)?
通常我的/proc/cmdline是这样的
vmlinuz initrd=initrd.cpio.gz root=/dev/sda3在上述kexec (和重新引导)之后,/proc/cmdline如下所示
root=/dev/sda3内核和initrd的名字不见了!只剩下--追加部分。这甚至没有给我带来太多的困惑:只是在问题中添加了一个新的facette :内核映像和initrd映像内核选项吗?它们是(内核)命令行的一部分吗?
我使用引导。我知道这个"initrd=“有多重要。使用引导加载程序(grub),它的工作方式应该是相同的。选择内核、initrd (如果需要/需要的话)、根、init和所有正常的“内核选项”只是一种不同的方式(间接)。
标准initrd是这样做的:
在您的情况下,您需要密码提示(?),而不是sata模块。但结果是相同的:根不能挂载。
了解引导加载程序是如何成功启动的,然后尝试使用kexec进行模拟。
添加:
名字不重要.默认情况下使用/init脚本启动(请参阅rdinit=引导选项)。这是“早期用户空间”,对应于earlyshell。使用这个initramfs-tool,您可以获得足够的断点来控制/init和调用的脚本。
否则,您可以提取initrd (使用gzip和cpio),更改/init (或添加/init_new并将rdinit=/init_new作为引导选项),并再次归档文件夹。这个cpio命令我以前从未使用过,但它实际上比tar简单。只是有点不同。
mkinitcpio是实现这一目标的工具。它在一开始就提到了早期的用户空间和加密。我刚读到,这是一个archlinux的东西,而且也有迟到和早期的“钩子”。和initramfs一样-我想是工具。
https://unix.stackexchange.com/questions/527702
复制相似问题