7. 故障排除,或失败的痛苦

在构建启动盘时,最初几次尝试通常无法启动。构建根磁盘的一般方法是从现有系统中组装组件,并尝试使基于软盘的系统达到在控制台上显示消息的程度。一旦它开始与你对话,战斗就成功了一半,因为你可以看到它抱怨什么,并且你可以修复个别问题,直到系统平稳运行。如果系统只是挂起且没有解释,那么找到原因可能很困难。调查系统无法与你对话的问题的推荐步骤如下

一旦涵盖了这些一般方面,以下是一些更具体的文件要检查

  1. 确保包含 init 作为/sbin/init/bin/init。确保它是可执行的。

  2. 运行 ldd init 以检查 init 的库。通常这只是libc.so,但无论如何都要检查。确保你包含了必要的库和加载器。

  3. 确保你拥有适用于你的库的正确加载器——ld.so用于 a.out 或ld-linux.so用于 ELF。

  4. 检查/etc/inittab在你的启动盘文件系统上,查找对 getty(或某些类似 getty 的程序,例如 agettymgettygetty_ps)的调用。对照你的硬盘inittab仔细检查这些。查看你使用的程序的手册页,以确保这些有意义。inittab可能是最棘手的部分,因为它的语法和内容取决于所使用的 init 程序和系统的性质。解决它的唯一方法是阅读 initinittab的手册页,并弄清楚你的现有系统在启动时到底在做什么。检查以确保/etc/inittab有一个系统初始化条目。这应该包含一个命令来执行系统初始化脚本,该脚本必须存在。

  5. init 一样,在你的 getty 上运行 ldd 以查看它需要什么,并确保必要的库文件和加载器已包含在你的根文件系统中。

  6. 确保你已包含一个 shell 程序(例如,bashash),该程序能够运行你的所有 rc 脚本。

  7. 如果你的救援磁盘上有/etc/ld.so.cache文件,请重新制作它。

如果 init 启动,但你收到类似这样的消息
        Id xxx respawning too fast: disabled for 5 minutes  
它来自 init,通常表明 gettylogin 在启动后立即死亡。检查 gettylogin 可执行文件以及它们依赖的库。确保/etc/inittab中的调用是正确的。如果你从 getty 收到奇怪的消息,则可能意味着/etc/inittab中的调用形式不正确。

如果你获得登录提示,并且你输入了有效的登录名,但系统立即提示你输入另一个登录名,则问题可能出在 PAM 或 NSS 上。请参阅第 4.4 节。问题也可能是你使用了影子密码,但没有复制/etc/shadow到你的启动盘。

如果你尝试运行某些可执行文件,例如 df,它在你的救援磁盘上,但你得到类似这样的消息df: not found,请检查两件事:(1)确保包含二进制文件的目录在你的 PATH 中,并且(2)确保你拥有程序需要的库(和加载器)。