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