当前位置: 首页>>技术教程>>正文


kernel – 如果删除init会怎样?

,

问题描述

只是一个理论问题…

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

最佳方法

引导加载程序将加载内核,内核将尝试运行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/bash引导参数的情况下对其进行修复。

次佳方法

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

实际上,如果您及早意识到错误并保持冷静,则无法删除/sbin/init。系统管理员在保持操作系统运行的同时拥有recovered from much nastier “lobotomies”

从删除/sbin/init中恢复的一种方法是使用APT重新安装upstart软件包。

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

easiest way完成的任务是:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11604.html,未经允许,请勿转载。