Next Previous Contents

7. 问题解决 -- Troubleshooting, or The Agony of Defeat

当建造 bootdisks 时,开始的几次尝试结果常常是无法开机。建造一张 root disk 的一般方法是组合来自你现有系统的元件 (compnents) ,接著尝试与得到这个以磁片为基础的系统 (diskette-based system) ,直到它在 console 上显示信息。一旦它开始与你交谈,这场战斗就结束一半了,因为你可以了解它在抱怨什么,而且你可以解决个别的问题直至系统能平顺地运作。如果系统停止运作而没有任何说明,要找到这原因会是一件困难的事。为了让系统能启动到能与你交谈的阶段,这需要使用到好几种元件,而且这些元件要经过正确地组态。以下是调查系统无法与你交谈之问题的建议程序:

以上已经涵盖一般部分,以下是一些更特定的文档与检查项目:

  1. 请确定 init 是以 /sbin/init 或 /bin/init 的形式被包括进来。并且确认它是可执行的。
  2. 请执行 ldd init 以检查 init 的函式库。通常这个就是 libc.so ,但是请无论如何还是检查一下。请确定你已放入了必备的函式库与 loaders。
  3. 请确定你把正确的 loader 给你的函式库 -- ld.so 是给 a.out 而 ld-linux.so 是给 ELF 。
  4. 请针对 getty (或某种类似 getty 的程序,诸如 agetty, mgettygetty_ps)的呼叫,检查你bootdisk filesystem上的 /etc/inittab。请针对你硬盘的 inittab 检查两次。再检查你所使用的程序的 man pages 以确定这些是有意义的。 inittab 可能是最诡异的部分,因为它的语法与内容,依据所使用的 init 程序与系统本质而有所不同。解决的唯一之道就是去阅读 initinittab 的man pages,然后再正确地做出既存系统开机时所做的事。请检查以确定 /etc/inittab 有一个系统初始化的记录 (entry) 。它应该包括一个指令以执行必定存在的系统初始化 script 。
  5. 如同 init ,对你的 getty 执行 ldd 以了解它需要什么,同时确定必备的函式库文档与 loaders 是否被放入你的 root filesystem 。
  6. 请确认你已放入一个 shell 程序 (e.g., bash or ash),它能够执行你所有的 rc scripts 。
  7. 如果在你的救援磁片上,有一个 /etc/ld.so.cache 的文档,请重新制作 (remake) 它。

如果 init 启动,但是你却得到一行信息像是:

        Id xxx respawning too fast: disabled for 5 minutes  
它是来自于 init ,通常指出 gettylogin 被终结只要 init 启动。请检查 gettylogin 的可执行档与相依的函式库。请确定在 /etc/inittab 内的呼叫 (invocations) 是正确的。如果你得到来自 getty 的奇怪信息,它可能是指 /etc/inittab 内的呼叫格式是错误的。

如果你得到一个 login 提示 (prompt) ,然后你输入一个有效的 login name ,但是系统却立即提示你要输入另一个 login name ,那么这个问题可能是出在 PAM 或 NSS 。请看 PAM and NSS 这一节。问题也可能是你使用 shadow passwords 而你却没有 copy /etc/shadow 到你的 bootdisk 上。

如果你尝试去执行某个可执行档,诸如 df ,而这个执行档是在你的救援磁片上,执行时却出现像这样的信息: df: not found ,这时请检查两件事:(1)请确定包含二进位档的目录有设定在你的 PATH ,(2)请确定你有程序所需的函式库 (与 loaders)。


Next Previous Contents