⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootdisk-howto-7.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>7</title>
</head>

<body>

<table>
  <tr>
    <td bgColor="#FFFFFF" vAlign="top"><a href="Bootdisk-HOWTO-8.html"><img alt="Next" src="next.gif" width="16" height="16"></a> 
      <a href="Bootdisk-HOWTO-6.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> <a href="Bootdisk-HOWTO.html#toc7"><img alt="Contents" src="toc.gif" width="16" height="16"></a>
      <hr>
      <h2><a name="s7">7. 問題解決 -- Troubleshooting, or The Agony of  
      Defeat</a></h2> 
      <p><a name="Troubleshooting"></a><!-- 
Troubleshooting 
--> 
      <p>當建造 bootdisks  
      時,開始的幾次嘗試結果常常是無法開機。建造一張 root  
      disk 的一般方法是組合來自你現有系統的元件 (compnents)  
      ,接著嘗試與得到這個以磁片為基礎的系統 (diskette-based  
      system) ,直到它在 console  
      上顯示訊息。一旦它開始與你交談,這場戰鬥就結束一半了,因為你可以了解它在抱怨什麼,而且你可以解決個別的問題直至系統能平順地運作。如果系統停止運作而沒有任何說明,要找到這原因會是一件困難的事。為了讓系統能啟動到能與你交談的階段,這需要使用到好幾種元件,而且這些元件要經過正確地組態。以下是調查系統無法與你交談之問題的建議程序: 
      <p>  
      <ul> 
        <li>你會看到一行訊息像這樣: 
          <pre>kernel panic: VFS: Unable to mount root fs on XX:YY
</pre> 
          這是常見的問題,而它只有一些原因。首先,請根據  
          device code 清單檢查 device <em>XX:YY</em> ;它是正確的 root  
          device 嗎 ?如果不是,那你可能沒有做過 <code>rdev -R</code>  
          ,或者是你是對錯誤的 image 執行rdev -R。如果 device  
          code 是正確的,那麼請仔細地檢查被編譯到你 kernel  
          內的 device 驅動程式。請確定它有內建軟碟片、 ext2  
          filesystem 支援。 
        <li>如果你看到許多錯誤訊息像是: 
          <pre>end_request: I/O error, dev 01:00 (ramdisk), sector NNN
</pre> 
          這是 ramdisk driver 所報告的 I/O 錯誤訊息,可能是因為  
          kernel 正嘗試寫入超越了設備的結尾。你的 ramdisk  
          因為太小而不能持有你的 root filesystem 。請檢查你的  
          bootdisk kernel 的初始化訊息,找一行像是: 
          <pre>        Ramdisk driver initialized : 16 ramdisks of 4096K size
</pre> 
          請針對 root filesystem<em> 未經壓縮的 </em>size檢查上述的  
          size 。如果 ramdisks 不夠大,那就讓它更大吧。 
        <li>請檢查 root disk  
          實際上有包含你所認為應該被包含的目錄。 Copy  
          到錯誤的 level 是容易犯的錯誤,以致於到最後在你的  
          root 磁碟片上,你會有像是 /rootdisk/bin 的目錄,而非  
          /bin。 
        <li>請檢查是否有 /lib/libc.so ,而它是否有與你硬碟內  
          /lib 目錄中所顯示之相同 link 。 
        <li>請檢查你既存系統 /dev 目錄內的 symbolic links  
          是否同時也存在於你的 root 磁碟片 filesystem  
          上,在此,那些 links 是連往你已包括在你 root  
          磁碟片上的 devices 。尤其是在很多情況下, /dev/console  
          links是最基本的。 <!-- 
device (dev) directory 
--> 
        <li>請檢查你是否已包括了 /dev/tty1, /dev/null, /dev/zero,  
          /dev/mem, /dev/ram 與 /dev/kmem 這些檔案。 
        <li>請檢查你的 kernel 組態設定 - 對於直到登錄點 (login  
          point)  
          所需之所有資源的支援必須被內建,不能使用模組。所以  
          <em>ramdisk 與 ext2 支援必須被內建 </em>。 
        <li>請檢查你的 kernel root device 與 ramdisk 設定是否正確。</li> 
      </ul> 
      <p>以上已經涵蓋一般部分,以下是一些更特定的檔案與檢查項目: 
      <p>  
      <ol> 
        <li>請確定 <code>init</code> 是以 /sbin/init 或 /bin/init  
          的形式被包括進來。並且確認它是可執行的。 
        <li>請執行 <code>ldd init</code> 以檢查 init  
          的函式庫。通常這個就是 libc.so  
          ,但是請無論如何還是檢查一下。請確定你已放入了必備的函式庫與  
          loaders。 
        <li>請確定你把正確的 loader 給你的函式庫 -- ld.so 是給  
          a.out 而 ld-linux.so 是給 ELF 。 <!-- 
loaders 
--> 
        <li>請針對 <code>getty</code> (或某種類似 <code>getty</code>  
          的程式,諸如 <code>agetty</code>, <code>mgetty</code> 或 <code>getty_ps</code>)的呼叫,檢查你bootdisk  
          filesystem上的 /etc/inittab。請針對你硬碟的 inittab  
          檢查兩次。再檢查你所使用的程式的 man pages  
          以確定這些是有意義的。 inittab  
          可能是最詭異的部分,因為它的語法與內容,依據所使用的  
          init  
          程式與系統本質而有所不同。解決的唯一之道就是去閱讀  
          <code>init</code> 與 <code>inittab</code> 的man pages,然後再正確地做出既存系統開機時所做的事。請檢查以確定  
          /etc/inittab 有一個系統初始化的記錄 (entry)  
          。它應該包括一個指令以執行必定存在的系統初始化  
          script 。 
        <li>如同 <code>init</code> ,對你的 <code>getty</code> 執行 <code>ldd</code>  
          以了解它需要什麼,同時確定必備的函式庫檔案與  
          loaders 是否被放入你的 root filesystem 。 
        <li>請確認你已放入一個 shell 程式 (e.g., <code>bash</code> or  
          <code>ash</code>),它能夠執行你所有的 rc scripts 。 <!-- 
shells 
--> 
        <li>如果在你的救援磁片上,有一個 /etc/ld.so.cache  
          的檔案,請重新製作 (remake) 它。</li> 
      </ol> 
      <p>如果 <code>init</code>  
      啟動,但是你卻得到一行訊息像是: 
      <pre>        Id xxx respawning too fast: disabled for 5 minutes  
</pre> 
      它是來自於 <code>init</code> ,通常指出 <code>getty</code> 或 <code>login</code>  
      被終結只要 init 啟動。請檢查 <code>getty</code> 與 <code>login</code>  
      的可執行檔與相依的函式庫。請確定在 /etc/inittab  
      內的呼叫 (invocations) 是正確的。如果你得到來自 <code>getty</code>  
      的奇怪訊息,它可能是指 /etc/inittab  
      內的呼叫格式是錯誤的。 
      <p>如果你得到一個 login 提示 (prompt)  
      ,然後你輸入一個有效的 login name  
      ,但是系統卻立即提示你要輸入另一個 login name  
      ,那麼這個問題可能是出在 PAM 或 NSS 。請看 <a href="http://www.linux.org.tw/CLDP/Bootdisk-HOWTO-4.html#PAMandNSS">PAM  
      and NSS</a> 這一節。問題也可能是你使用 shadow passwords  
      而你卻沒有 copy /etc/shadow 到你的 bootdisk 上。 
      <p>如果你嘗試去執行某個可執行檔,諸如 <code>df</code>  
      ,而這個執行檔是在你的救援磁片上,執行時卻出現像這樣的訊息:  
      <code>df: not found</code> ,這時請檢查兩件事:(1)請確定包含二進位檔的目錄有設定在你的  
      PATH ,(2)請確定你有程式所需的函式庫 (與 loaders)。 
      <p>  
      <hr> 
      <a href="Bootdisk-HOWTO-8.html"><img alt="Next" src="next.gif" width="16" height="16"></a> <a href="Bootdisk-HOWTO-6.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> 
      <a href="Bootdisk-HOWTO.html#toc7"><img alt="Contents" src="toc.gif" width="16" height="16"></a></td>
  </table>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -