Linux 開機流程分析 來源: 鳥哥私房菜 2003-2-23 10:51:00 開機流程分析 開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由于 Linux 是一套多人多任務的操作系統,你難保你在關機時" name="description" />

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux 開機流程分析

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    ANT : normal" height="20"> Linux 開機流程分析 來源: 鳥哥私房菜 2003-2-23 10:51:00 開機流程分析 開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由于 Linux 是一套多人多任務的操作系統,你難保你在關機時

     
     
    ANT: normal" height="20">Linux 開機流程分析
    來源:鳥哥私房菜
    2003-2-23 10:51:00
     

      開機流程分析
      開機不是只要按一下電源鈕而關機只要關掉電源鈕就可以了嗎?有何大學問?話是這樣沒錯啦,但是由于 Linux 是一套多人多任務的操作系統,你難保你在關機時沒有人在線上,如果你關機的時候碰巧一大群人在線上工作,那會讓當時在線上工作的人馬上斷線的!那不是害死人了!一些資料可以無價之寶哩!另外,與 DOS 環境不同的是, Linux 在執行的時候,雖然你在畫面上只會看到黑壓壓的一片,完全沒有任何畫面,但其實他是有很多的程序在背景底下執行的,例如郵件程序、瀏覽器主機程序等,你如果隨便關機的話,是很容易傷害硬盤及數據傳輸的動作的!所以在 Linux 下關機可是一門大學問喔
       
      既然開機是很嚴肅的一件事,呵呵,那我們來了解一下整個開機的過程吧!好讓大家比較容易發現開機過程里面發生錯誤的地方,與解決之道!不過,由于開機的過程中,那個 Boot Loader 使用的軟件可能不一樣,例如 Mandrake 9.0 已經同時提供 Lilo 與 Grub 這兩個開機管理程序,雖然 lilo 與 grub 的激活過程或許有點不太相同,但是他的原理則都是一樣的哩!這里我們先介紹較老牌的 Lilo 啰! Lilo 是什么?!簡單的說,他是 LInux LOader 的縮寫,就是 Linux 開機時候加載的咚咚就對了!這東西可是控制了你的多重開機的命脈!底下的篇幅會再分別介紹這兩套開機管理程序!底下先開始來談談 Linux 是如何開機的呢?基本的流程為:
      1. 加載 BIOS 的硬件信息;
      2. 讀取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機信息;
      3. 加載 Kernel 的操作系統核心信息;
      4. Kernel 執行 init 程序并取得 run-level 信息;
      5. init 執行 /etc/rc.d/rc.sysinit 檔案;
      6. 激活核心的外掛式模塊 (/etc/modules.conf);
      7. init 執行 run-level 的各個批次檔( Scripts );
      8. init 執行 /etc/rc.d/rc.local 檔案;
      9. 執行 /bin/login 程序;
      10. 登入之后開始以 Shell 控管主機。
      大概的流程就是上面寫的那個樣子啦,而每一個程序的內容主要是在干嘛呢?底下就分別來談一談吧!
      · 尋找 BIOS 加載硬件信息:
      稍微有 PC 硬件經驗的人們大概都知道 BIOS ( Basic Input/Output Setup ) 的作用!他是第一個被加載計算機的資料!你主機的 CPU 資料、開機順序、硬盤大小、芯片組工作狀態、PnP 的開啟與否、內存的時脈等等等...這都記錄在 BIOS 當中!所以啦,開機之后,系統會先去找這個東西;
      · 可開機硬盤的 MBR 讀取 Kernel loader:
      再來呢?呵呵!當然就是硬盤的開機資料啰!由于個人計算機的系統在讀完 BIOS 之后,會先去讀取第一個開機硬盤的第一個扇區(就是 master boot record, MBR 啰?。?,還記得這個 MBR 嗎?嗄!忘記了?趕緊回到第二篇好好的再復習一遍ㄋㄟ?。而這個扇區主要就是在記錄開機的信息!還記得上面提到的 Lilo 及 grub 吧?他的紀錄就是在這里啰!所以啰,這個時候 Lilo 紀錄的信息就會被讀出來,系統并依 Lilo 的信息去不同的系統開機,這也就是多重開機設定的地方啦。
       
      好了,先再來回憶一下,如果你是以 grub 程序開機的話,那么在開機的時候會顯示什么資料呢?呵呵!會顯示蠻多的開機選單,沒錯?就是『選單』,然后選擇了你的選擇項目之后,系統就會跑到該扇區去讀取該操作系統的核心啰!呵呵!所以一個好的 boot loader 會具有兩個功能,就是:
       
      o 選單功能 ( menu )
      o 指向功能 ( pointer )
       
      那么為何要有 loader 呢?我想,我們得先來探討一下這個話題才行!要探討之前先來了解一下,曉不曉得 Windows 與 Linux 的檔案格式一不一樣?!呵呵!當然不一樣對不對,好了,那么再來說一說,請問,你的計算機怎么知道你的硬盤的資料是什么系統?哈哈!那就是 loader 的主要功能啰!在你能使用系統之前,一定需要加載核心對吧???但是怎樣讓你的硬件認識核心呢?那就是 kernel loader 的主要功能了!所以這里需要提出的是, Linux 的 loader ( lilo 或 grub ) 是可以認識 windows 的核心檔案的,但是 Windows 的 loader 卻不認識 Linux 的核心檔案,因此,作為一個多重開機的設定 loader ,就無法使用 Windows 所提供的 loader 啰!由于需要讓系統認識你的 kernel ,因此,就需要 kernel loader 啦!這樣想就對啦!
       
      這一部份的信息我們在后續的章節會再提及!
      · 加載核心( Kernel ):
      好了,等我們在 grub 的選單中選擇了 Linux 這個系統,然后主機跑到 Linux 所在的硬盤之下,就開始將他的核心加載啰。在 Linux 的系統下,通常開機的核心都擺在 /boot 底下,因此,這個時候的 boot loader 就會到 /boot 去尋找相關的核心。我們的 kernel 名稱通常就是 /boot/vmlinuz-xxxx 的格式,目前 Mandrake 9.0 的核心版本為 2.4.19,而 Mandrake 自行釋出的版本為 2.4.19-16mdk ,所以,使用 uname –r 會出現 2.4.19-16mdk 呦!然后 MDK 9.0 預設核心檔案就是: /boot/vmlinuz-2.4.19-16mdk 這一個!好了,加載這個檔案再往下繼續吧!
      · 核心執行 init 并由 /etc/inittab 取得系統登入狀態:
      核心加載之后,由核心執行的第一個程序就是 /sbin/init 啰!而這個程序第一個目標當然就是確定主機是要以怎樣的情況登入!這個時候就必須要以 /sbin/init 來加載 /etc/inittab 的信息啦!而 Linux 共有幾種登入模式呢?嗯!這里似乎有需要說明一下 Linux 有哪些登入的狀態!如果你進入 Linux 的 /etc/inittab 檔案的話( 可以使用 vi 啦 ),你應該會看到如下的信息:
       
      [root @test /root]# vi /etc/inittab #  0 - halt (Do NOT set initdefault to this) 關機 #  1 - Single user mode 單人使用(系統有問題時候的登入狀況) #  2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多人但無網絡 #  3 - Full multiuser mode 文字界面登入的多人系統 #  4 - unused   系統保留 #  5 - X11      X-Windows 圖形界面登入的多人系統 #  6 - reboot (Do NOT set initdefault to this) 重新開機 # id:3:initdefault:
      ·  
      上面顯示的就是目前可以登入的狀態了(就是 run-level 啦?。?,共有 0?6 的登入狀態,其中,我們比較常使用的是 3 與 5 , 因為我們需要 Linux 是多人多任務的情況,而較常登入的狀態就是文字與圖形界面啦!所以這里需要設定成 3 或者是 5 ,千萬不要設定成 0 或者是 6 喔!不然系統會一直直接重新開機或者是直接關機....預設的系統登入在上面這個表格的最底下一行紀錄著!就是『id:3:initdefault 』那一行!注意喔!因為 VBird 預設是以文字界面來登入,所以才會是 3 ,如果你要改成圖形界面登入的話(請確定你的 X-windows 沒有問題),那么就將 /etc/inittab 里面的上面那一行,將 3 改成 5 即可啰!
       
      那么什么是『單人維護模式 ( run-level 為 1 )』?如果你有玩過 Windows 的話,那么你在開機的時候如果按下 F8 時,不是會出現一些什么『安全模式』啦、『正常開機』啦或『 MS-DOS 模式』等等的進入 Windows 的狀態嗎?尤其是當你不正常關機的時候, Windows 預設就會以『安全模式』來激活 Windows 啰!Windows 的『安全模式』幾乎不加載一些復雜的模塊,讓你的 Windows 一定可以開機成功!那么 Linux 的維護模式狀態即是使用單人模式( 就是 run_level 為 1 啦?。┧哉f, Linux 的登入情況是如何呢?呵呵!沒錯,就是在這里加載的啦!
      · init 的第一個執行內容 /etc/rc.d/rc.sysinit :
      確定了登入狀態之后,再來當然就是需要將主機的信息給他讀進去 Linux 系統啰!而 Linux 系統的第一個資料內容就是 /etc/rc.d/sysinit 這個檔案啦!如果你有空進入這個檔案去看看的話,會發現這個檔案的內容包括了==>設定預設路徑( PATH )、設定主機名稱、執行 /etc/sysconfig/network 所記錄的網絡信息、掛載 /proc 這個保存在內存當中的主機基本訊息、以及其它幾個 Linux 操作系統最基本的幾個信息!大抵來說,他的基本工作是:
       
      1. 設定預設路徑:( PATH )
      2. 設定網絡狀態:系統會再去讀取 /etc/sysconfig/network,并將該檔案內的資料,如 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV 等等的設定讀入系統中。
      3. 激活系統的置換空間(簡單的可以想成是虛擬內存): swapping
      4. 檢查檔案系統:這個時候系統會去檢查一些可能會存在的目錄,例如 /fsckoptions 與 /forcfsck 及 /fastboot 等等的目錄,當你的系統有不正常關機的現象時(例如突然的斷電等等),那么 Linux 將會自動的強制去檢查 root 的檔案系統 ( checking root filesystems )。簡單的想一想,就好象是 Windows 系統下,當你不正常關機時,在開機的過程中就會出現掃瞄硬盤的情況相同啦!
      5. 周邊設定與系統設定的參數 ( /proc ):在 Linux 或者是 Unix 系統中,你會在根目錄中發現一個很奇怪的扇區,那就是 /proc 啰!其實這個目錄是記錄在內存當中的,每次開機的時候就會被建置起來。他的主要功能是記錄主機的一些接口設備的最新資料狀況!例如網絡周邊啦、輸入輸出周邊啦等等的。沒事的話,不要到里面亂砍喔!會有問題
      6. 設定 Plug and Play ( PNP )的一些參數資料;
      7. 清除 /etc/mtab ;
      8. mount root 及 /proc 檔案系統 :好了,將一些資料都設定好之后,當然就是需要將資料寫下來啰!這個時候就會將 root 與 /proc 資料給他 mount 上檔案系統啦!
      9. 決定是否使用模塊, 加載模塊
      10. 檢查檔案系統 :與前面相同的,當前面的 /fastboot 檢查的旗標開啟之后,就會以 fsck 檢查你的其它扇區啰! ( 使用 fsck )
      11. 掛上其它檔案系統
      12. 設定 console 字型
      13. 打開 quota
      14. 清除不必要的檔案, 如 lock, pid
      15. 設定 clock
      16. serial port 初始化
      17. 將開機訊息經由 dmesg 放入 /var/log/dmesg 中
       
      如此一來,在 /etc/rc.d/rc.sysinit 就已經將基本的系統設定資料都寫好了,也將系統的資料設定完整!而如果你想要知道到底開機的過程中發生了什么事情呢?那么就使用第十六章學會的 dmesg 就可以知道啰
      · 激活核心的外掛式模塊 (/etc/modules.conf):
      由于我們的核心越來越聰明,所以呢,我們可以選擇使用模塊的型態 ( 這個在后面也會繼續說明 ) 來進行驅動程序的加載!那么如果系統原本找不到的模塊 ( 例如早期的 via-rhine 芯片組 ) 就可以在這個檔案里面 /etc/modules.conf 寫入呢!
      · init 執行 run-level 的各個 scripts :
      由于不同的 run-level 所需要加載的模塊并不相同,所以系統早就為不同的 run-level 設定了一些批次檔( scripts )來做這件事啰!而 run-level 早就在前面的時候以 /etc/inittab 當中取得啰!好了,如果你知道如何進入到 /etc/rc.d 的目錄中的話,那么你將會看到該目錄下應該有八個目錄跟三個檔案,目錄 rc0.d ~ rc6.d 分別代表了各個 run-level 的 scripts !而在這些目錄中的檔案都是以 S 及 K ( 大寫 ) 為開頭的檔案,并接兩位數的數字與該服務的名稱所組合而成的!如下所示為 Mandrake 9.0 的 /etc/rc.d/rc3.d 的內容:
       
      [root @test /root]# ll /etc/rc.d/rc3.d total 0 lrwxr-xr-x  1 root   root      16 Oct 19 11:05 K55routed -> ../init.d/routed* lrwxr-xr-x  1 root   root      18 Oct 19 10:58 S03iptables -> ../init.d/iptables* lrwxr-xr-x  1 root   root      17 Oct 19 11:26 S10network -> ../init.d/network* lrwxr-xr-x  1 root   root      16 Oct 19 11:26 S12syslog -> ../init.d/syslog* lrwxr-xr-x  1 root   root      16 Oct 19 11:26 S20random -> ../init.d/random* lrwxrwxrwx  1 root   root      13 Oct 28 15:22 S40atd -> ../init.d/atd* lrwxr-xr-x  1 root   root      19 Oct 19 10:59 S40saslauthd -> ../init.d/saslauthd* lrwxrwxrwx  1 root   root      14 Oct 19 21:28 S55ntpd -> ../init.d/ntpd* lrwxrwxrwx  1 root   root      14 Oct 19 12:11 S55sshd -> ../init.d/sshd* lrwxrwxrwx  1 root   root      16 Oct 19 12:00 S56xinetd -> ../init.d/xinetd* lrwxr-xr-x  1 root   root      18 Oct 19 11:26 S75keytable -> ../init.d/keytable* lrwxr-xr-x  1 root   root      17 Oct 19 11:12 S80prelude -> ../init.d/prelude* lrwxr-xr-x  1 root   root      17 Oct 19 11:03 S85numlock -> ../init.d/numlock* lrwxr-xr-x  1 root   root      18 Oct 19 11:35 S89internet -> ../init.d/internet* lrwxr-xr-x  1 root   root      15 Oct 19 11:26 S90crond -> ../init.d/crond* lrwxr-xr-x  1 root   root      17 Oct 19 11:26 S95kheader -> ../init.d/kheader* lrwxr-xr-x  1 root   root      14 Oct 19 11:38 S99adsl -> ../init.d/adsl* lrwxr-xr-x  1 root   root      19 Oct 19 11:04 S99linuxconf -> ../init.d/linuxconf* lrwxr-xr-x  1 root   root      11 Oct 19 10:41 S99local -> ../rc.local*
      ·  
      在這個目錄下的檔案都是連結檔,均指向到 /etc/rc.d/init.d 這個目錄下,而這個 /etc/rc.d/init.d 目錄則是以 Linux 的 rpm 安裝方法時,設定一些服務的激活目錄。舉個例子來說,如果你要重新激活 sendmail 的話,而且你的 sendmail 是以 rpm 來安裝的,那么下達 /etc/rc.d/init.d/sendmail restart 就可以直接激活 sendmail 啰!所以你即可知道 /etc/rc.d/init.d 里面檔案的主要功能!因此,當你的 run-level 內的 scripts 要激活哪寫服務呢,呵呵!就將檔案連結到該 init.d 目錄下的檔案并加以激活即可啰!也就是說『當你以 文字模式 ( run-level=3 ) 激活 Linux 時,你的系統在經過 BIOS、 MBR、 Kernel、 init、/etc/rc.d/rc.sysinit 之后,就會進入 /etc/rc.d/rc3.d 來激活一些服務』啰!不過,需要注意的是,在 rc3.d (或其它目錄下 rc0.d ~ rc6.d )目錄中 S 開頭的檔案為執行該服務, K 為開頭的檔案則是殺掉該服務的意思。那么那些數字代表的意義為何?那就是激活的順序啦!例如S12syslog 會比S90crond 更早被執行呢!那么為什么要有這些順序呢?這是有原因的!例如您的主機有要激活 WWW 好了,那么您的網絡設定應該要先激活才對吧!所以啰,如果 WWW 先激活,才驅動網絡,那么 WWW 自然就一定起不來啦!所以各項服務的激活順序也是相當重要的!目前 Mandrake 當中,可以使用 chkconfig 來設定開機要激活的服務選項呢!
      · init 執行 /etc/rc.d/rc.local
      在 DOS 或 Windows 的系統中,對于 autoexec.bat 與 config.sys 這兩個檔案您應該不陌生吧?!這兩個檔案是 DOS 或 Windows 在完成開機之后,第一個要去讀取的內容!那么 Linux 有沒有該檔案?!有的!在 Linux 系統執行完了大部分的開機程序之后,接著下來就是要執行你的 Linux 主機的個人化設定啰!舉個例子來說,由于 Red Hat 7.2 預設是將 CDROM 視為一個模塊激活的裝置,因此你的 cdrom 將必須要加載兩個模塊之后才能使用,分別是 modprobe cdrom, modprobe ide-cd 這兩個指令!而如果你想每次都使用 cdrom 的話,那么你每次開機都必須記得手動加載這兩個模塊!粉累耶....這個時候就可以將這兩行指令加入到 /etc/rc.d/rc.local 當中去啰!也就是說,不論你有什么需要在開機的時候寫進去的指令,都可以在這里寫入喔! ( 通常為了避免麻煩,我們都將開機完之后必須要做的幾件事情,例如激活 NAT 主機的命令,使用 tarball 安裝的一些軟件的激活指令都寫在這個檔案來,那么系統開機完成之后,你所需要執行的指令也都執行完畢啰?。?
       
      前面的步驟都被主機執行之后,開機的程序就已經完全的激活完畢了!也就是說,如果你已經有網絡的服務激活的話(通常在 /etc/rc.d/init.d 時就加載啰),那么你的主機已經在 Internet 上面提供服務了!所以根本就不需要你登入 Linux 系統你的主機也能正確的提供相關的服務喔!
      
      · 開機設定檔 /etc/sysconfig
      不過,在開機的過程中,到底使用了多少設定檔呢?呵呵!使用最多的設定檔大多放置在 /etc/sysconfig 這個目錄底下呢!來看一下 Mandrake 9.0 在這個設定檔底下有哪些東西?
       
      [root @test root]# ll /etc/sysconfig total 100 -rw-r--r--  1 root   root     511 Sep 19 17:48 alsa -rw-r--r--  1 root   root     239 Sep 19 17:48 autofsck -rwxr-xr-x  1 root   root      41 Oct 19 11:39 autologin* -rwxr-xr-x  1 root   root      36 Oct 19 11:35 clock* drwxr-xr-x  4 root   root     4096 Oct 19 11:27 console/ -rw-------  1 root   root      35 Oct 19 11:35 drakconnect -rw-------  1 root   root      29 Oct 19 11:35 drakconnect.adsl_pppoe -rw-------  1 root   root     363 Oct 19 11:35 drakconnect.netc -rwxr-xr-x  1 root   root     275 Oct 19 11:47 i18n* -rw-r--r--  1 root   root     952 Sep 19 17:47 init -rw-r--r--  1 root   root     1407 Sep 19 17:48 installkernel -rwxr-xr-x  1 root   root     446 Aug 26 23:37 ipvsadm* -rwxr-xr-x  1 root   root      39 Oct 19 11:27 keyboard* -rwxr-xr-x  1 root   root     114 Oct 18 11:43 mouse* -rwxr-xr-x  1 root   root      53 Oct 19 11:39 msec* -rw-r--r--  1 root   root      0 Sep 17 22:16 msec.rpmnew -rwxr-xr-x  1 root   root     100 Oct 19 13:35 network* drwxr-xr-x  5 root   root     4096 Oct 19 10:41 networking/ drwxr-xr-x  2 root   root     4096 Oct 19 13:36 network-scripts/ -rwxr-xr-x  1 root   root      10 Oct 19 11:26 pcmcia* -rw-r--r--  1 root   root     153 Jul 25 2000 rawdevices -rw-r--r--  1 root   root     336 Jul 26 20:35 saslauthd -rw-r--r--  1 root   root     455 Aug 14 09:30 syslog -rwxr-xr-x  1 root   root      56 Oct 19 11:39 system* -rw-r--r--  1 root   root     337 Sep 19 17:48 usb -rw-r--r--  1 root   root      41 Aug 22 18:11 xinetd
      ·  
      上面具有黃色字體的哪幾個項目尤其重要!
       
      o clock 在設定我們 Linux 主機的時區,可以使用格林威治時間,也就是標準時間,也可以使用臺灣的本地時間 ( local );
      o i18n 在設定一些語系的使用方面,例如最麻煩的文字接口下的日期顯示問題!如果您是以中文安裝的,那么預設語系會被選擇 big5 ,所以在純文字接口之下,你的檔案日期顯示就會呈現亂碼!這個時候就需要更改一下這里啦!更動這個 i18n 的檔案,將里面的 LC_TIME 改成 en 即可??!
      o Keyboard 與 mouse 就是在設定鍵盤與鼠標的形式;
      o network 可以設定主機名稱,以及 GATEWAY 這兩個重要信息呢!
      o 至于 network-scripts 里面的檔案,則是主要用在設定網絡卡~這部份我們在網絡架設篇才再次提到!
      
      總之,這個目錄下的檔案都是很重要的啦!
      
      變換預設的登入模式
      剛剛在上面說了登入主機的方式最少有六種,不過常使用的是 run-level 3 的文字接口模式與 run-level 5 的圖形接口模式!如果你在安裝的過程中選擇了文字接口登入,但是后來卻想以圖形接口登入系統,應該怎么做?!簡單的很!就直接修改 /etc/inittab 這個檔案的內容即可!如何做呢?!以 vi 或者是其它的文書編輯軟件,進入 /etc/inittab 這個檔案,檔案的內容有點像這樣:
       
      # Default runlevel. The runlevels used by Mandrake Linux are: #  0 - halt (Do NOT set initdefault to this) #  1 - Single user mode #  2 - Multiuser, without NFS (The same as 3, if you do not have networking) #  3 - Full multiuser mode #  4 - unused #  5 - X11 #  6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Things to run in every runlevel. ud::once:/sbin/update # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
       
      在上面的資料中,將 id:3:initdefault: 里頭的 3 改成 5 ,那么在下次的登入時就會變成是圖形接口啰!同理,要由圖形接口變成文字接口來登入時,也是將上面那行改成 3 即可!此外,不知道您有沒有經驗,在你的 Linux 主機當中, Linux 共提供了六個終端機接口與 一 個圖形接口的登入點,你可以按下 『 Ctrl 』+ 『 Alt』 加上『F1』 ~ 『F6』 功能鍵 來變換不同的文字接口登入點!至于圖形接口則僅使用于『 Ctrl + Alt + F7 』這一個喔!不過,如果你只想要提供四個文字接口呢?該如何是好?!呵呵!只要將上面的最后兩行刪掉,只剩下 1:2345:....至 4:2345:...,只剩下這四行然后重新開機之后,你的 F5 與 F6 功能鍵的作用就會消失啰!就這么簡單啦!不過,需要注意的是,圖形接口只有一個,當你使用圖形接口登入時,那么將直接進入 tty7 那一個圖形接口的登入屏幕喔!而當你在 tty1 輸入 startx 激活 X-Windows 時,你的控制權將會跑到 tty7 (就是在 F7 功能鍵),此時,若您的 X-windows 掛了!那么直接按下『 Ctrl + Alt + F1 』 回到 tty1 之后,直接刪除該 X-Windows 的程序即可關閉 X-Windows 啰!很不錯吧!
      
      Lilo
      好了,要開始來搞定 boot loader 啰!第一個介紹的事較老牌的 lilo 這個玩意兒!他算是最標準的 Linux boot loader 啰!目前我的幾部主機里面,用的也大部分都是他呢!Lilo 的設定與安裝方面必需要分成兩個步驟,分別是設定 /etc/lilo.conf 這個設定檔,設定完畢之后,還必需要給他改寫進去 MBR 或者是 Super block 才行!
       
      
      · 設定檔 /etc/lilo.conf
      基本上, lilo 是加載 Linux 核心的重要開機資料的安裝程序,他的參數設定檔案就放在 /etc/lilo.conf 里頭,那么我們來看一看里面有什么設定參數吧,基本上他的設定參數有點像底下這樣,可以分為兩部分,一個是整體的設定方面,一個則是每一個開機設定的核心檔案:
       
      [root @test linux]# vi /etc/lilo.conf # 第一部份,整體的設定部分 prompt  <==強制出現 boot 的開機訊息啰! Compact  <==可以整合一些讀取的扇區,可以保持 map 較小,相當適合軟盤開機時使用 delay=50 <==如果有多重開機的話,可以設定這個延遲時間,單位0.1秒 timeout=50 <==與 delay 有類似的關系!也是 0.1 秒,如果 5 秒內沒有按鍵盤,直接以第一個 image 開機?!efault=linux-2.4.18 <==如果開機的過程中,出現了boot之后,使用者沒有動作,              則以此設定的核心開機,與底下的label需對應 boot=/dev/had     <==Lilo 的開機信息寫入到 /dev/hda 這顆硬盤的 MBR 當中?!ap=/boot/map     <==用來說明 local 主機的地圖信息啰! install=/boot/boot.b <==關于開機區的訊息(boot sector),不用理他沒關系! Linear        <==在較大容量的硬盤使用時,可以加入這一個參數試試看! lba32         <==這個東西也是在大容量的硬盤使用時候會需要的參數! password=1234567   <==設定密碼!如果為了安全起見,可以設定您的 lilo 密碼哩! message=/boot/message <==那個 LILO 的訊息就是在里面出現的啦! # 第二部分,個別的開機設定部分,一個 image 或 other 均代表一個開機設定! image=/boot/vmlinuz-2.4.7-10   <==核心檔案啦!     label=linux-2.4.7    <==請注意!label 前面以 [tab] 按鍵來作為分隔!                   這個字眼則是顯示在 boot 里頭挑選項目?!    nitrd=/boot/initrd-2.4.7-10.img     read-only        <==開機扇區掛載為只讀!這是預設狀況,實際在                   掛加載 Linux 系統時,會重新掛載成可寫!     root=/dev/hda1      <==掛載成 / 這個 root 目錄的磁盤! other=/dev/hdb1         <==如果是『非 Linux 核心』就以 other 來設定                   開機的磁盤扇區!     label=Windows2k     <==同樣的要有 label 來表示這個開機扇區的名稱!
      ·  
      注意一下上面那幾個咚咚:
       
      o delay 與 timeout 的設定是 0.1 秒,所以 delay=50 表示延遲時間為 5 秒!
      o linear 與 lba32 通常用在 SCSI 或者是較大的硬盤,例如扇區超過 1024 磁道的硬盤,可以使用這個項目來除錯!不過,如果是小于 8GB 的硬盤,這兩個東西有沒有設定就沒有什么影響了!
      o default 需要設定成底下幾個 image 或者是 other 的 label 才成!這個地方最常被忘記!因為常常會記得修改 label ,但是忘記跟著改變 default 的內容!此外,如果你想要修正開機預設的操作系統選項,在這里改啦!
      o password 的用途在于安全防護方面,不過有個困擾,就是『如果你的計算機因為不正常關機(如斷電后重開)而在電源恢復的時候重新開機時,則會卡在這個階段無法直接進入 Linux 系統』,因為你必須提供 password 才能繼續的工作呀!
      o boot 顯示的是開機的扇區選擇! 這里也蠻重要的,如果你想要安裝在 MBR 里面的話,如同上面的書寫模式,就是寫入 /dev/hda ,后面不要加上每個 partition 的代碼!但是,如果你是想寫入 Super Block ,例如我想要寫入的是 had5 這個 Logical 的 partition 時,那么這里就必需要改寫為 /dev/hda5 啰!所以,您應該只要一看到這個 boot 后面接的內容,就會知道那個安裝的扇區是 MBR 還是 Super Block 啰!
      o image 可以設定成多數個!如果你的 Linux 系統有多個核心檔案的時候,例如我們剛剛編譯完成的一個新的核心,然而你又不想丟掉舊核心,就可以設定成兩個不同核心的開機系統啰!
      
      大致上就是這樣吧!其它不明了是什么東西的選項,可以使用 man lilo.conf 來看看里頭的設定!因為還有很多開機時后需要加載的參數可以來設定一番呢!
      
      · 以預設的 lilo.conf 新增一個開機檔
      好啦!為了測試一下您是否已經知道了 lilo.conf 的設定方式,所以我們來做個實驗吧!請在您的『實驗主機』上面,不要在提供服務的主機上面完呦!否則死掉了不要怪我沒警告您…我們先試圖安裝在 super block 上面好了!以下面為例,黃色字體的部分是經過我的修改之后的結果,您的 /etc/lilo.conf 應該會長的跟我的差不多才是!
       
      boot=/dev/hda1 map=/boot/map vga=normal default=linux keytable=/boot/us.klt prompt nowarn timeout=100 message=/boot/message menu-scheme=wb:bw:wb:bw image=/boot/vmlinuz     label=linux     root=/dev/hda1     initrd=/boot/initrd.img     append="devfs=mount"     read-only image=/boot/vmlinuz     label=failsafe     root=/dev/hda1     initrd=/boot/initrd.img     append="devfs=nomount failsafe"     read-only image=/boot/vmlinuz         <==就給他新增加一個 label ,但是內容不變!     label=linux-test     root=/dev/hda1     initrd=/boot/initrd.img     append="devfs=mount"     read-only
      ·  
      這樣就設定好了!接著下來看一下怎么安裝他吧!
      ·
      · 安裝 lilo
      既然設定好了,自然就是要安裝他啰!安裝的方式很簡單,直接輸入 lilo 即可!
       
      [root @test root]# lilo Added linux *    <==有打星號的是『預設的開機設定檔!』 Added failsafe Added linux-test
      ·  
      看到沒有!要像上面這樣才是安裝成功呦!如果出現了錯誤的訊息,那么肯定是有地方沒有安裝好!這個時候請特別的再重新設定一次 /etc/lilo.conf 呢!有打星號的是『預設的開機設定檔!』
      · 而如果您還要看看更多的訊息,那么就需要這樣:
       
      [root @test root]# lilo -v LILO version 22.3.2, Copyright (C) 1992-1998 Werner Almesberger Development beyond version 21 Copyright (C) 1999-2002 John Coffman Released 11-Jul-2002 and compiled at 21:48:42 on Aug 13 2002. Reading boot sector from /dev/hda1 Using MENU secondary loader Calling map_insert_data Mapping message file /boot/message -> message-text Calling map_insert_file Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux * Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added failsafe Boot image: /boot/vmlinuz -> vmlinuz-2.4.19-16mdk Mapping RAM disk /boot/initrd.img -> initrd-2.4.19-16mdk.img Added linux-test /boot/boot.0301 exists - no backup copy made. Writing boot sector.
      ·  
      如果你需要更多的訊息,那么就使用『 lilo –v –v –v 』多一點 –v 就對啦!
      ·
      · 一些問題的解決之道
       
       
       
       
      好了! lilo 安裝完成之后,總是會有一些問題會發生吧!那么如何來解決問題呢?嗯!可以看一下底下的一些解決之道:
       
      o 我要如何選擇不同的開機設定檔?開機的時候我只看的到 boot: 而已?
      開機之后,如果是以 lilo 來激活 kernel 時,那么他會出現 boot: 的字樣,出現這個字樣之后,馬上按下 按鍵,那么就會出現目前 lilo 所記憶的開機設定文件啰!然后在 boot 后面輸入想要的開機檔案,就可以啰!
      o 安裝好了 Linux 之后,在開機的過程中卻只出現『 LI 』就停止了!該如何是好?
      這個問題可能發生的原因是 Lilo 沒有設定好,或者是由于 Linux 安裝在非 /dev/hda ( MBR )的硬盤之中,解決的方法可以如下:
      1. 用 Linux 光盤開機,然后在出現 boot: 處輸入
      linux root=/dev/hda1 (這個與你的 Linux 安裝的 partition 有關)
      順利開機之后,以 vi 修改 /etc/lilo.conf 將
      linear
      這一行取消(如果沒有這一行的話,那就在 lilo.conf 中加入吧?。┤缓髨绦?
      lilo
      再取出光盤并重新開機試試看;
       
      2. 進入 BIOS ,將硬盤的 mode 改成 LBA 試看看;
      3. 將Linux往前面一點的扇區安裝,例如你可能安裝在 /etc/hdc1 ,那你可以重新安裝 Linux 在 /dev/hda2 試看看
      o 安裝Linux完成之后,卻是出現 010101... 等數字在屏幕上,無法進入 Linux ...
      這個問題的發生很有可能是硬盤出了問題了!這個時候可以使用 fsck 來掃瞄啰!
      1. 用軟盤或者是光盤開機后,使用fsck這個硬盤修正軟件掃瞄一下您的 root partition ,例如:fsck /dev/hda1
      2. 進入 BIOS ,將硬盤的 mode 改成 LBA 試看看;
      o 我們知道 DOS 需要在第一顆硬盤的第一個扇區才能正常開機使用!那要是他并非在第一個扇區呢?例如當 DOS 系統在 /dev/hdb1 (第一條排線的 slave )?
      解決知道就是以 lilo 修正磁盤的配置啦!如下所示來修改 /etc/lilo.conf
      other=/dev/hdb1
         label=DOS
         map_drive=0x80
         to=0x81
         map_drive=0x81
         to=0x80
      然后再執行 lilo 寫入 MBR 當中!
      o 我不要玩 Linux 了,如何移除 lilo ?
      只要以 Windows 的開機片開機,然后以 Windows 系統的 fdisk 下達:
      fdisk /mbr
      就可以將 Lilo 自 MBR 當中移除啰!
      o 無法正常的進入 Lilo 怎么辦?
      這的時候開機片就很重要啦!使用開機片,在出現 boot: 的時候,輸入
      linux -s
      就可以進入啦!這里請特別留意!那個 linux 指的是 label 呢!就像剛剛我們有三個 label ,分別是 linux, linux-test 與 failsafe ,那么如果我要以 linux-test 這個開機設定文件的單人維護模式登入,就必需要改寫成
      linux-test –s
      linux-test single
      請特別留意??!
      
      Grub
      grub 是較新的 boot loader 程序,他具有相當多的優點,這里不一一列舉啦!無論如何, lilo 能做的, grub 幾乎都可以做的到,包括選單、密碼、指向等等的功能!不過, grub 比 lilo 要先進的幾點是:
      1. 他可以讓您在開機的時候『自行編輯與修改開機設定項目』,有點像是 bash 的指令模式;
      2. 他可以自動『動態尋找設定文件』,亦即他可以依據 /boot/grub/menu.lst 的設定而改變其設定!因此,修改設定只要改 /boot/grub/menu.lst 即可,不需要再重新安裝 grub !
      很棒吧!不過,在設定底下的工作之前,請先確認您的 grub 這個套件已經安裝上來來!如果還沒有安裝的話,那么先查閱一下 RPM 的安裝方法再說!底下假設 grub 這個套件已經安裝在您的主機上啰!
      
      · 設定檔 /boot/grub/menu.lst
      Grub 的設定檔也很簡單,就是 /boot/grub/menu.lst 這個檔案,請注意,那個 lst 是 L 的小寫呢!如果有興趣的話,可以使用 info grub 好好的去看一下他的所有功能,底下僅列出一些我們常用的功能與設定而已喔!
       
      o 關于硬盤的代號:
      在 grub 里面,有一點是比較讓人覺得不適應的,那就是他的硬盤代號與 lilo 還有 Linux 傳統的代號不一樣~他的代號主要有點像這樣:
       
      (hd0,0)
      
      hd 指的是 IDE 的硬盤,而里面的 0,0 代表什么呢?第一個 0 代表他是第一個 IDE 的 master ,而第二個 0 代表他是第一塊 partition 的代號,所以呢,這個代號就是 hda1 啦!所以,我們可以得到底下這個對應表:
       
      裝置 Lilo Grub
      IDE1 master hda, hda1, hda2 (hd0), (hd0,0), (hd0,1)
      IDE1 slave hdb, hdb1, hdb2 (hd1), (hd1,0), (hd1,1)
      IDE2 master hdc, hdc1, hdc2 (hd2), (hd2,0), (hd2,1)
      IDE2 slave hdd, hdd1, hdd2 (hd3), (hd3,0), (hd3,1)
      這里需要先記憶一下啰!
      ·
      好了,那么將我的 menu.lst 列出來一下吧先!
       
      [root @test root]# vi /boot/grub/menu.lst timeout 10    <==多久之后鍵盤沒有動靜,就直接以 default 的設定開機,這里是秒數! Color black/cyan yellow/cyan   <==設定顏色的參數 i18n (hd0,0)/boot/grub/messages <==設定 i18n 多國語系的訊息提示 keytable (hd0,0)/boot/us.klt  <==設定鍵盤形式,通常使用美規的鍵盤即可! Default 0            <==預設的開機選項,依照底下的排序,第一個為 0 ! title linux           <==這是第一個開機設定檔,亦即排序為 0 號!   kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=mount   initrd (hd0,0)/boot/initrd.img                 <==上面兩個則是開機設定檔的基本內容,分別是核心檔案所在地與 Ramdisk 的設定內容! title failsafe          <==這是第二個開機設定檔,亦即排序為 1 號!   kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe   initrd (hd0,0)/boot/initrd.img title windows   chainloader (hd1,0) +1
      ·  
      o default 與 title 的計算方式:
      基本的說明已經在上表當中了,這里需要在說明的是關于 default 開機檔的計算。如果今天我有四個開機設定檔,那么 default 算的是什么呢?就是『排序』啦!假如我底下依序出現的設定檔 title 分別是 linux, linux-test, windows, failsafe 的話,那么開機的時候, grub 的選單就會顯示:
        linux
        linux-test
        windows
        failsafe
      其中,linux 就是 0 ,而 failsafe 就是 3 ,如果您要調整開機時后的選單順序,就在 /boot/grub/menu.lst 修改一下他們的順序即可!但是記得 default 要跟著變,因為他也是依據排序而變的呦!這點請不要忘記了?
      o title 內容的設定方式:
      基本上,如果是一般的硬盤環境中,我們僅需要兩行就可以設定好 title 的內容了,分別是:
       
      root  [開機根目錄 / 所在的磁盤代號] kernel [開機檔案的所在地完整檔名] [root=/dev/硬盤代號] 范例: root  (hd0,0) kernel /boot/vmlinuz-2.4.19-16mdk root=/dev/hda1 設定上面就是這樣而已!所以,開機完畢之后,請將您的 kernel 文件名稱(完整檔名)與開機的根目錄所在的磁盤代號記憶一下,那么下次就可以手動設定開機設定項目呢!但如果是 windows 方面的設定時,那就直接使用 chainloader 這個項目即可,有點像這樣: chainloader [硬盤代號] +1 范例: chainloader (hd1,0) +1
      
      ·安裝 grub 在系統中
      要安裝 grub 跟 /boot/grub/menu.lst 并沒有相關性!因為剛剛我們就提過了, grub 為動態去搜尋設定文件的,所以寫入 MBR 或 super block 時,并沒有將 menu.lst 寫入ㄋㄟ?好了,那我們就來安裝看看吧!安裝的方式主要也是分為安裝在 MBR 與 super block 呢!底下我們就來談談這兩種安裝的方式:基本上的動作就是:
       
      1.使用 root [磁盤代號] 選擇開機根目錄 / 所在磁盤代號;
      2.使用 setup [磁盤代號] 選擇 MBR 或 Super block 直接安裝進去!
      3.使用 quit 就可以離開 grub 了!
        
      [root @test root]# grub # 先安裝在 Super Block 底下試看看: grub> root (hd0,0)   <==這里輸入我要的 root 硬盤扇區! Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0,0)   <==實際安裝上來!使用 setup 指令! Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 p /boot/grub/menu .lst "... suclearcase/" target="_blank" >cceeded Done. # 再安裝在 MBR 試看看: grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. grub> quit       <==離開 grub 啰!
       
      這樣就安裝進去啰!很方便吧!并不難吧!
      
      ·開機手動設定選項
      事實上,每次動手修改完 /boot/grub/menu.lst 就已經完成了 grub 的設定啰!因為他相當的聰明!但是,如果我設定錯誤怎么辦?沒關系!有很多的方法可以使用呢!如果您可以順利的以硬盤進入 grub 畫面,那么恭喜您,可以繼續下面的行動了!但是如果您的 Linux 竟然無法順利的開機了,也就是說,使用硬盤開不了機!那么也沒有關系,別擔心,就直接給他使用 CD 開機,然后在進入 grub 畫面之后,再繼續下面的動作!
       
      o在 grub 畫面下進行手動加入的動作:
      在 grub 畫面中,通常畫面的最下方都會顯示一些基本的訊息,例如下方的 Mandrake 預設文字接口 grub 登入圖標:
       javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">
      在這個畫面中,您可以輸入 e 或 c 來選擇『編輯』或『進入指令列模式』,無論如何,這兩個選項將使您進入指令列模式當中啦!所以您就可以看到一個大大的 grub> 提示字符,然后就可以修改或者是自訂一些項目啦!而這些修改或者設定的項目,并不會主動的去覆蓋您的 /boot/grub/menu.lst ,而是這次登入所做的修改而已呢!通常我都是選擇 e 進入編輯的畫面,然后選擇 kernel 與 root 那兩項內容進行編輯即可!例如我們上面提過的,我的 root 與 kernel 已經知道了正確的訊息,所以我就可以按下 c 來輸入底下的字樣:
       
      grub> root (hd0,0)
      grub> kernel /boot/vmlinuz-2.4.19-16mdk root=/dev/hda1
      
      這樣就可以進入我們的主機了呢!很厲害吧!
      
      
      --------------------------------------------------------------------------------
      可開機磁盤與救援磁盤制作
      不論任何時候,制作可以開機的磁盤與救援的磁盤,都是一件很值得鼓勵的事情!這里我們提供簡單的方式來讓您的磁盤可以開機呦!
         # 制作軟盤開機片:
      [root @test root]# mkbootdisk --device /dev/fd0 `uname -r`
      Insert a disk in /dev/fd0. Any information on the disk will be lost.
      Press to continue or ^C to abort:
      # 制作救援磁盤:
      [root @test root]# mkrescue --device /dev/fd0
      
       
      不過, mkrescue 比較麻煩的一點是,這個程序僅支持 lilo 這個 loader 的 image file ,所以如果剛剛您是使用 grub 來設定 MBR 的話,那么 mkrescue 就無法動作了?
      
      --------------------------------------------------------------------------------
      本章習題練習 ( 要看答案請將鼠標移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
      我有個朋友跟我說,他想要讓一個程序在 Linux 系統下一開機就激活,但是在關機前會自動的先結束該程序,我該怎么建議他?
      答:
      由于 /etc/rc.d/rc[0-6].d 里面有的 Sxxname 與 Kxxname 可以設定開機激活與關機結束的事項!所以我就可以輕易的寫一個 script 放在 /etc/rc.d/init.d 里面,并連結到我的 run-level 里頭,就可以讓他自由自在的激活與結束了!
      萬一不幸,我的一些模塊沒有辦法讓 Linux 的核心捉到,但是偏偏這個核心明明就有支持該模塊,我要讓該模塊在開機的時候就被加載,那么應該寫入那個檔案?
      答:
      應該寫入 /etc/modules.conf 這個檔案,他是模塊加載相關的地方呢

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>