2009年1月13日 星期二

開機流程簡介

開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由於 Linux 是一套多人多工的作業系統,你難保你在關機時沒有人在線上,如果你關機的時候碰巧一大群人在線上工作, 那會讓當時在線上工作的人馬上斷線的!那不是害死人了!一些資料可是無價之寶哩!

另外,與 DOS 環境不同的是, Linux 在執行的時候,雖然你在畫面上只會看到黑壓壓的一片,完全沒有任何畫面, 但其實他是有很多的程式在背景底下執行的,例如登錄檔管控程式、前面兩章提到的例行性命令, 當然還有一大堆網路服務,如郵件伺服器、WWW伺服器等等。你如果隨便關機的話, 是很容易傷害硬碟及資料傳輸的動作的!所以在 Linux 下關機可是一門大學問喔。

既然開機是很嚴肅的一件事,呵呵,那我們來瞭解一下整個開機的過程吧! 好讓大家比較容易發現開機過程裡面發生錯誤的地方,與解決之道!不過,由於開機的過程中,那個開機管理程式 ( Boot Loader ) 使用的軟體可能不一樣,例如目前各大 Linux distributions 的主流為 grub, 但早期 Linux 預設是使用 LILO ,台灣地區則很多朋友喜歡使用 spfdisk 。 但無論如何,我們總是得要瞭解整個 boot loader 的工作情況,才能瞭解為何進行多重開機的設定時, 為何老是聽人家講要先安裝 Windows 再安裝 Linux 的原因~

我們先來想一想, Linux 整個開機的程序是怎樣呢?還記得我們提過,開機時要載入核心, 讓核心來驅動整個硬體,這樣才能算是一個最陽春、最基礎的作業系統吧?然後才能夠執行各種程式的運作。 同樣的,開機的流程也是需要先載入核心的。不過,載入核心前,卻需要一些前置作業,才能夠正確無誤的載入核心嘛! 所以,整個開機的程序是這樣的:
  1. 載入 BIOS 的硬體資訊,並取得第一個開機裝置的代號;
  2. 讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊;
  3. 載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置;
  4. Kernel 執行 init 程式並取得 run-level 資訊;
  5. init 執行 /etc/rc.d/rc.sysinit 檔案;
  6. 啟動核心的外掛模組 (/etc/modprobe.conf);
  7. init 執行 run-level 的各個批次檔( Scripts );
  8. init 執行 /etc/rc.d/rc.local 檔案;
  9. 執行 /bin/login 程式,並等待使用者登入;
  10. 登入之後開始以 Shell 控管主機。
大概的流程就是上面寫的那個樣子啦