在后备 shell 中,如何启动 init?

在后备 shell 中,如何启动 init?

我使用 grub 启动了系统:

linux /boot/vmlinuz-4.5.0 root=/dev

initrd /boot/initrd-4.5.0

我将 root 设置为 dev 是为了让它无法正确启动。当然,它又回到了 busybox 的东西;我在网上看到您可以使用 mount 并以某种方式启动 init 。我四处寻找,在/sbin下找到了switch_root并尝试使用它,但没有成功。如何更改 root 并以 PID 1 启动 init?另外,我的 init 是 System V,所有内容都在同一分区上。

答案1

您需要安装要切换到的根目录。我假设您已经知道如何做到这一点。基本上只是mkdir /newroot; mount -r /dev/something /newroot

那么你需要代替您当前正在运行的后备 shell。它以 PID 1 运行(您可以使用 验证echo $$),并且目标 init 需要再次获取该数字。所以你需要一个exec内置的 shell 来使用。

switch_root至少接受两个参数:要切换的根目录,以及切换后要运行的 init 可执行文件名。

所以你只需更换你的后备外壳:

exec switch_root /newroot /sbin/init,并/sbin/init在将root改为mounted后再次获得PID 1 /newroot,并可以继续进一步初始化。

相关内容