然後進入 BIOS 檢查各種硬體設備 ,
BIOS 跑完後 , 則進入硬碟的 MBR 區域將開機程序轉交給 Boot loader (開機程序).
若是 Boot loader 區內沒有資料 , 則直接尋找 Partition Table(硬碟分割表)四筆資料中 ,
唯一註記為 Active 的那筆 , 依此找到Boot Partition(可開機的 Partition) 內的 Boot loader .
MBR(Master Boot Record) 主要啟動記錄 , 共 512 Bytes ,
它位在硬碟的第一個磁區 ,
共分三個區段 ,
1. Boot Loader (446Bytes) .
這裡可以存放程式 , 用來載入可以啟動系統的磁區位置 .
2. Partition Table (64Bytes) .
硬碟分割表 , 此表分四等份 , 可記錄四筆資料 ,
每筆資料記錄著一個 Partition 的啟迄位址 , 及其它相關資訊
所以一顆硬碟最多只能切四個主要分割區(Parmary) , 若 Partition 不夠用 ,
就必須把其中一個主要分割區做成延伸分割區(Extended) ,
然後在延伸分割區中 , 規劃邏輯磁區(Logical) .
3. Verify Data (2Bytes) .
驗証用 .
我們在安裝 Linux 時 , 其中一個選項就是選擇 Boot loader(Grub) ,
並確認 Boot loader 要寫在 MBR 或者是要寫在 Boot Partition 內 .
那我們到底要把 Boot loader 裝在 MBR 還是 Boot Partition 呢 ?
請依個人需求來規劃 .
(我再這樣寫 , 可能會被打吧 ! ……….. >_<||| …..)
若您這台電腦內 , 只裝這一個作業系統 , 那不管是裝在哪裏都無坊(MBR or Partition) .
反正 , 若 MBR 內沒有 Boot loader , 它自己會去找 Boot Partition 內的 Boot loader .
若您裝的這台電腦內 , 有裝或要裝其它系統 , 但並沒有打算安裝其它 Boot loader 程式 ,
這個時候 , Linux 的 Boot loader(Grub) 不管是裝在 MBR 或 Boot Partition 也都可以 .
反正 , 若 MBR 內沒有 Boot loader , 它自己會去找 Boot Partition 內的 Boot loader .
而 Boot loader 程式內 , 則可以設定各作業系統的開機位置(開機選單) ,
所以可以開機沒問題 .
若您裝的這台電腦已有或要裝其它作業系統 , 且您打算使用其它程式來做開機選單 ,
如國人寫的 SPFdisk 等開機軟體 ,
那您就得把 Boot loader(Grub) 裝在 Boot Partition ,
然後把另外的 boot loader(SPFdisk) 裝在 MBR , 製作開機選單 .
這時 , 當電腦跑完 BIOS 後 , 進入 MBR 即會讀到 SPFdisk 的開機選單 ,
再依據您選擇要開機的系統 , 找到相對應的 Partition 開機區來開機 .
Fedora Core 4 的 Grub 多重開機選單 :
SPFdisk 的多重開機選單 :
如果您已經決定把 Grub 裝在 Boot Partition 內 ,
但裝完 Linux 系統後 , 第一次開機發現 , MBR 內有其它的 Boot loader 殘存在內 ,
這時 , 只要把 MBR 清空即可 .
而清空 MBR 的方式有幾種 , 這裏介紹兩種工具程式 .
1. Fdisk : 利用 Dos or Windows 附的 Fdisk 程式 , 用磁片或光碟片開機 ,
執行 fdisk /mbr
2. SPFdisk : 利用 Download 來的 SPFdisk 程式 , 用磁片或光碟片開機 ,
執行 spfdisk /mbr
3. 利用 linux 安裝光碟進入 Rescue 模式 ,
執行 dd if=/dev/zero of=/dev/hda bs=446 count=1
注意 : 此指令的 bs 及 count 兩個參數的數值不可輸入錯誤 , 否則將造成系統開不了機 .
以上三個都是可以清空 MBR 內容的工具 .
不管您把 Boot loader(Grub) 裝在哪 .
當電腦讀取到 Boot loader 的資訊 , 便會依 Boot loader 的指示找到系統 Kernel ,
然後把開機程序交給 Kernel .
Kernel 載入 , 並載入 initrd.img 檔 , 初始化各硬體設備 ,
執行 init 執行檔(第一支執行檔) ,
執行 rc.sysinit ,
設定主機名稱 ,
檢查 Root FileSystem (e2fsck) ,
讀取 /etc/fstab
重新掛載 Root FileSystem ,
掛載其它設備 ( partition ... etc.) ,
建立各個環境變數 ,
讀取 inittab , 取得 runlevel 號碼 ,
執行該 runlevel 下要啟動的各 Service ,
執行 rc.local ,
執行 login .
到此 , 開機算是完成 , 系統等待使用者登入 , 或者是要求服務 .
中間有些步驟這裡先把它省略掉 , 等有空再補上來吧 !
我們從讀取 inittab 開始好了 , 其中有一段很重要的資訊 ,
有一行是這樣寫的 :
id:3:initdefalut:
........ 我們還是看圖來說明好了 , 請見下圖 , /etc/inittab 的部份檔案內容 :
沒有 “ # “ 字開頭的那一行 , 則是有效的參數設定 .
我們要說明的是 runlevel 那段 , 請您看到第九行開始 ,
它說有七種 runlevels 可選 , (0 ~ 6 共七種) 代表著 runlevel 0~6 ,
0 為關機( halt ) ,
1 為單人模式( Single user mode ) ,
2 為多人模式 , 没有 NFS ,
3 為多人模式 ,
4 保留 , 没有使用 ,
5 為 X-Window 模式 ,
6 為重新開機( reboot ) .
在這說明的下面 , 有一行寫著 “ id:3:initdefalut: “ ,
也就是說 , 目前系統預設要以 runlevel 3 的模式開啟 .
如果您要系統開機開進單人模式 , 就把其中的 3 改成 1 , 存檔後重開機即可 .
(不過一般不會用此方式進入 Single mode , 這裡只是舉例說明而已)
如果您要系統開機開進 X Window 模式 , 就把其中的 3 改成 5 , 存檔後重開機即可 .
其實 , 每個 runlevel 模式不同的地方 , 只是啟動的服務不同而已啦 !
我們來看看 /etc/rc.d 的資料夾 :
這 7 個資料夾下 , 分別存放了 runlevel 0~6 中 , 各個服務的啟動檔 .
剛剛提到 , 系統預設是開啟至 runlevel 3 的模式 , 也就是會啟動 rc3.d 資料夾內
的那些啟動檔 , 我們來看看 rc3.d 這個資料夾吧 !
檔案都是 “連結檔(link file)” , 目標檔案的位置是在 /etc/rc.d/init.d 資料夾內 .
且這些連結檔的檔名 , 也都是與 init.d 下的檔案同名 , 然後在連結檔案名稱的前面加上
一些識別字 , 下面來解釋這些識別字 , 以 S85httpd 這個檔名來說明吧 !
S85httpd S 代表開機時要啟動 . ( 把 S 改成 K 就變成開機不要啟動 )
85 代表啟動的順序 , ( 這麼多服務都要啟動 , 那誰要先啟動 ?
數字越小的越先啟動 , 如有關網路的服務 , 當然要等網路先啟動才行 . )
httpd 就是 Service 的名稱 .
這樣子說明不知道您有了解了嗎 ?
也就是說 , 開機時 , Kernel 讀取到 /etc/inittab 這個檔 , 取得應開啟的 runlevel 號碼 ,
進入 /etc/rc.d/rcN.d/ 資料夾內 , 依照啟動順序 , 把檔名是 S 開頭的檔案啟動 .
就醬 .
所以說 , 如果我們要調整哪些服務要在開機時啟動 , 可以直接把 /etc/rc.d/rcN.d/ 內的
檔名給改掉 , 譬如 , 把 S85httpd 改成 K85httpd , 重開機後 , 原本在開機時會啟動的
httpd 服務 , 就不會啟動起來了 . 簡單吧 !
嫌麻煩 ?
介紹您一支工具 – chkconfig
請在提示符號後面輸入 chkconfig --list
它會把各個服務 , 在各 runlevel 下 , 是否要啟動 , 給 list 出來給操作者看 .
若是要修改 httpd , 讓它在開機到 runlevel 3 時不要啟動 ,
那就輸入下面指令即可 :
chkconfig --level 3 httpd off
簡單吧 ! ……………. 還是嫌麻煩 ? ................................!%*^%#@%$#(^
那還有這個工具 : setup
請在命令提示符號後面輸入 setup , 然後選擇 System Services 進入 .
這就簡單了吧 ! 小弟不再附圖了哦 !
開機時要啟動哪個服務 , 就把那個服務選起來便是 .
如果您是在 runlevel 3 之下設定的 , 那它就只會修改 runlevel 3 下的服務 ,
如果您是在 runlevel 5 之下設定的 , 那它就只會修改 runlevel 5 下的服務囉 .
請注意一下 S99local 這個檔案 ,
它是執行 /etc/rc.d/rc.local 這個檔 , 它是最後一個執行的 .
有的時候 , 您可能須要在開機時 , 啟動某某程序 , 你可以把要執行程序寫在
/etc/rc.d/rc.local 這個檔案內 , 那它就會在開機的時候執行囉 !
您可以把這個檔案當作 Dos 下的 Autoexec.bat 檔來使用 .
好啦 ! 當 runlevel N 的服務該啟動的都啟動完了 , 開機程序也到此結束啦 ,
再來 Kernel 會把程序交給 /bin/login , 等待使用者的登入 .
開機流程大致就這樣了 .
沒有留言:
張貼留言