如果删除init会怎样?


22

只是一个理论问题...

但是,如果删除init(中的/sbin/init)会发生什么?


不要尝试ln- -L它不会起作用。cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/init虽然有效。使用APT重新安装新贵并不像那样明显dpkg,因为它不知道默认情况下它已经消失了。“程序包新贵已经在当前版本中。” 你可以dpkg --force-depends --force-remove-essential -r upstart先。
2014年

1
apt-get install --reinstall upstart。另外,我没有/proc/fd目录。我刚刚检查了一下,将ln -L /proc/1/exe /tmp/init/sbin/init重命名为/sbin/init.bak,即可以在没有问题的情况下阅读/tmp/init
Ruslan 2014年

@muru好。然后,我将添加标签同义词。
卡兹·沃尔夫

Answers:


31

引导加载程序将加载内核,内核将尝试运行init,但未找到并引起恐慌。

解决方法是重新引导,编辑引导参数,添加init=/bin/bash并以这种方式引导。内核将bash用作init。这将使您有机会运行命令并修复系统。

更正
显然,内核(文件init / main.c)可以:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");

因此,它将找到/ bin / sh(这是破折号的链接),这将为您提供一个shell,并且有机会在不使用init=/bin/bashboot参数的情况下对其进行修复。


好答案。不知道内核搜索的内容不止于/sbin/init
Ruslan 2014年

如果没有/bin/sh文件?或/bin/bash或其他/bin/dash?不知道如何同时删除所有这些,但是理论上会发生什么?
trysis 2014年

好吧,那么您将看到内核恐慌,这是更正行上方答案的一部分。但是不要在您需要的系统上这样做。说真的,不要。如果您想进行实验(这是一个很好的练习),请创建Virtualbox VM,将其断开并尝试对其进行修复。顺便说一句,200_success的答案也不错。
sмurf

12

在尝试重新启动之前,什么都不会发生。只要系统正在运行,并且您不尝试通过运行/sbin/init n来切换运行级别,您甚至都不会意识到它已经消失了。

实际上,/sbin/init如果您及早意识到错误并保持冷静,则删除是不可撤消的。在保持操作系统运行的同时,系统管理员已从许多棘手的“大灾难”中恢复过来

恢复删除状态的一种方法/sbin/initupstart使用APT 重新安装软件包。

恢复的主要方法是仅使用计算机本身上的资源。对您有利的一个因素是它/sbin/init始终在运行。因此,当您运行时rm /sbin/init,该文件仅与文件系统断开链接。索引节点和文件内容保留在磁盘和内存中,直到PID 1退出。您只需/sbin/init要从适当的inode 重新创建即可 。

最简单的方式来实现这一目标是:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.