|
#1
| ||||
| ||||
| [轉貼] 第五章 Boot,Initialization,Shutdown,and Runlevels 一. Linux開機流程: 1. 當我們將電腦電源打開時,BIOS會先載入相關硬體資訊,BIOS內記載著開機順序、晶片組狀態、PnP開啟與否、cpu相關訊息 (cpu及系統溫度、風扇rpm等)、IDE HDD AUTO DETECTION (如PRI Master、PRI Slave、SEC Master…)、硬碟大小、記憶體大小、主機板相關訊息等。所以開機後,系統會先去讀取BIOS的資料。 2. 接著依BIOS設定的開機順序 (如 cdrom → floppy → HD) 依序讀取,若主機上沒放光碟片及磁碟片的話,就會從硬碟開機,這裡就假設從硬碟開機,所以接著下來便會先去讀取硬碟的第一個磁區,即是MBR。MBR所佔用的磁區空間為512 bytes,而磁區內分兩部分,第一部份放開機程式碼,空間大小約446 bytes,第二部分放partition table,空間大小約66 bytes。 3. 此時若將lilo置MBR,lilo就會被執行,接著就會有lilo的選單畫面出現, 看您選擇要開啟哪個作業系統,若選擇linux,便載入linux核心,若選擇 windows,就載入windows的核心。但若當初lilo不是放MBR,而是放 super block,那這時候就會由MBR上面的開機程式碼去尋找哪個分割區 設定為啟動 (Active),如果是linux分割區設定啟動的話,就會出現lilo 的選單畫面。 4. LILO (LInux LOader):linux的開機程式兼具boot manager。LILO工作為載入linux核心或其它OS。 一般人習慣將kernel loader置MBR上,這樣在系統讀取BIOS的相關訊息後,就可直接讀取這裡的開機資訊 (如lilo、grub、spfdisk)。 (1) 將LILO置Linux分割區的第一磁區: 此時可搭配其它Boot Manager,如spfdisk、Boot Magic來製作啟動選單,另可將Linux OS設為Active,而由LILO擔任Boot Manager工作。(partition須為primary partition) (2) 將LILO置MBR: 若Linux分割區 ( /boot ) 置Extended 時,由於MBR不支援Extended,所以會無法開啟linux OS,解決之道便是將LILO放置於MBR。 註:欲清除MBR內容可於DOS下執行fdisk /MBR。 (3) 將LILO置磁片:可從磁片開機。 <note>Linux核心位於 /boot內。 註: 製作開機片 redhat: # mkbootdisk --device /dev/fd0 `uname –r` openlinux: X-WINDOW下: K → preference → system → startup → Rescue Disc 文字介面下: # dd if=/boot/vmlinuz-2.4.13 of=/dev/fd0 # rdev /dev/fd0 /dev/hda3 → boot partition ˙Linux的開機程式分LILO.GRUB(Grand Unified Boot loader) 其相關設定檔為 /etc/lilo.conf /boot/grub/menu.lst (或grub.conf) 若將LILO或GRUB放MBR,則其除具本身的開機啟動程式外,亦可做Boot Manager功能。 <補充> 安裝Windows及linux共存一顆硬碟。 (1)先安裝Windows OS (2)再安裝linux: 安裝Linux最少須有兩個partition,即 / 及swap,一般習慣將 /boot也獨立一partition。 此時將 /boot置主分割區上並設定啟動(Active),reboot後便可看到開機選單,此時選DOS便載入windows的核心,選linux便載入linux核心 (位於 /boot 下)。 (3)若您使用其它Boot Manager,如spfdisk,就要注意LILO須安裝於分割區 (如 /boot partation)上,而非MBR上。 (4)OS loader(開機載入核心的程式)一般放MBR上,若先放Windows loader再放Linux loader,則MBR的loader便是LILO(MBR上,每次只能放一個loader)。若先放linux再放Windows,則loader為Windows的,此時便無開機選單可選,因Windows loader只能開啟Windows的OS,其並不認得linux的檔案系統,所以自然也就無法載入linux核心。 (5) /boot分割區不要超過1024 cylinder,因LILO無法載入此範圍外的核心(無論lilo放MBR或 /boot上皆同),不過話雖如此,還是有解決之道, 首先,要確定硬碟有使用LBA ( Logical Block Address )模式,再來就是 你的BIOS需支援LBA模式。不過若您使用的是較新版的lilo或grub,就比較不需擔心這類的問題了。 註:LBA是一種硬碟設備的定址技術,也就是將原本磁柱、磁頭、磁區編號定義成邏輯區塊位址,當硬碟容量超過8.4G以後,就會轉為以LBA 方式表示。 二. Linux開機執行步驟(硬碟開機) 1. 由LILO載入Linux Kernel。 2.Kernel載入後,執行的第一支程式為 /sbin/init (initial),此即為系統的第一個行程,其PID為1。 3.接著init會去讀取 /etc/inittab,在這個檔案裡,可看到幾個系統啟動的執行等級(run level): 0- halt (Do not set initdefault to this) 關機。 1- Single user mode單人模式(系統出問題時,便可進入單人維護模式)。 2- Multiuser,without NFS(networking)多人使用,無網路。 3- Full multiuser mode文字界面,多人使用,有網路。 4- unused 系統保留不使用。 5- X11 圖形界面,多人使用,有網路。 6- reboot重新開機。 再來針對內容中的各欄位作說明: /etc/inittab內,每一列有四個欄位,用:隔開。 id:run level:action:process 第一欄位為每個項目的識別碼id,1或2個字元(有的版本1-4字元)。系統設定的識別碼,不要更改。 第二欄位為run level,0~6,若空白,表所有run level皆適用(0除外)。 第三欄位為action,此欄告之init程式要如何處理此項目。 valid actions: ˙respawn:程序終止後,會重新啟動程序。若無此項設定,使用者 登出又登入時,便無法執行。 ˙wait:一旦指定run level後,程序將被執行,且init會等待至程序停止。 ˙boot:在系統開機期間,程序被執行 (忽略run level欄)。 ˙bootwait:接上,且init程式會等待至程序停止 (忽略run level欄)。 ˙initdefault:指定系統開機後,預設的run level (忽略process欄位)。 ˙once:一旦指定runlevel後,程序將被執行。 ˙sysinit:程序在系統開機期間執行,且其執行是在boot及bootwait紀錄之前(忽略runlevel欄)。 ˙ctrlaltdel:user按下ctrl+alt+del後便reboot,故建議此功能勿開放(可將此行註解起來)。 由上可知boot、bootwait、sysinit的runlevel欄為空白的,即run level 1~6皆適用。 第四欄位為process:要執行的程式及參數。 4. init讀取 /etc/inittab內的順序 (redhat) (1) id:3:initdefault: → 系統預設開機時執行runlevel 3,即以文字介面登入,若想以圖形介面登入,可將3改5即可。 (2) si::sysinit:/etc/rc.d/rc.sysinit → rc.sysinit為系統執行的第一個script,其執行的工作如啟動swap、執行fsck、mount fs、load modules…等。 若想要讓一般使用者無法進入單人維修模式,可於該行後補上: pw:S:wait:/sbin/sulogin → pw為自訂的id,只要不跟系統id重複即可,如此設定完後,任何 人在進入單人模式時,都需輸入root密碼,如此設定的好處是可防 止有心人士利用進入單人模式來滲入系統,但身為管理者的你,就 千萬不能忘記root密碼了。 此項設定,不論對硬碟或磁片開機都有效,但對使用光碟開機進入 rescue模式來說,就無法生效了。 (3) 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 12:2:wait:/etc/rc.d/rc 2 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/rc.d/rc 4 15:5:wait:/etc/rc.d/rc 5 16:6:wait:/etc/rc.d/rc 6 →因系統預設runlevel 3,所以會去執行13:3:wait: /etc/rc.d/rc 3這一行,並由rc程式執行 /etc/rc.d/rc3.d內相關檔案。 我們仔細看rc3.d目錄,發覺其下都是連結檔,並連結至 /etc/rc.d/init.d目錄下的服務程式,這些服務程式都是script file。 如:S55 named→../init.d/named K25squid →.. /init.d/squid S (Startup.Source):指系統在啟動時,會執行S開頭的link file所指向的scripts,其後所接數字大小表執行先後順序,小的先,而這些數字勿任意更動,因script間會有相依關係。 K (Kill):指系統於結束時會執行的相關檔案。而開機時,以K開頭的scripts將不會被執行。 我們若切換至rc0.d目錄,可看出其下除halt、killall為S開頭,餘皆K開頭。 另外 /etc/rc.d/init.d目錄內的shell scripts都可提供相關命令參數來指 定、得知相關狀態。如以下: start 啟動 stop 停止 restart 重新啟動 status 顯示目前狀態 舉例: # /etc/rc.d/init.d/named stop # /etc/rc.d/init.d/httpd status # /etc/rc.d/init.d/network restart (4) /etc/rc.d/rc.local此為系統最後執行的script file,在系統完成大部份的開機程序後,接著便執行您個人化的系統設定,例如您想在開機時執行一些工作,便可將命令行(或寫成script)寫在這個檔案內,最常用者為模組額外掛載及防火牆。 <note>以上設定勿放rc.sysinit,避免upgrade後,造成資料遺失。 5. 當init工作執行告一段落後,就交棒由login程式執行,這時候就等您輸入使用者帳號密碼來讓系統做確認的動作。 6. # runlevel =>可看出系統預設runlevel為何,又如您想於命令列上變換執行runlevel,可輸入: # init 0 或 # telinit 0 : : # init 6 或 # telinit6 註:openlinux在init讀取 /etc/inittab的順序: ˙執行預設runlevel。 ˙執行相關scripts:/etc/rc.d : rc.modules、rc.serial、rc.boot、rc.local。 其主要執行項目與上面所提及的rc.sysinit差不多。 ˙/etc/rc.d/rc 開始啟動相關服務,以runlevel 5為例,rc 程式會執行 /etc/rc.d/rc5.d相關連結檔,啟動 /etc/rc.d/init.d/ 下的scripts,而這些 scripts最後再根據 /etc/sysconfig/daemons來決定啟動哪些服務。 三. 開機故障排除: 1. 當系統因斷電、不正常關機造成資料損壞時,系統於開機過程會嘗試修復,若無法自動修復時便要實施手動修復。 假設您損壞區塊為 /dev/hda3 ( 非 / ),此時開機中途,screen會顯示press root password,您就照做,以便進行單人維護工作,接著輸入 fsck /dev/hda3,screen會顯示開始修復訊息,若有找到錯誤,會詢問 clear〔Y/N〕,此時輸入Y,等都完成後,便可reboot。 2. 進入單人模式修復: 在LILO開機選單中,按下ctrl+x時便可看見boot: 提示號,此時輸入boot:linux 1或linux single或linux –s就可進入單人模式。 若於開機選單中,按下ctrl+x後,再按下tab鍵,系統會將可開啟的os名稱列出 (redhat)。 ˙當root密碼忘記時,可先進入單人模式後再執行: # passwd root <註>當LILO載入核心時,核心會將開機訊息寫入 /var/log/messages內,亦可用 # dmesg ∣less來看這些訊息。 四. 關機:shutdown.init.halt.reboot(ctrl+alt+del) 1. shutdown:其後若沒接參數,預設會reboot至單人模式。 # shutdown 2 →系統2分鐘後,將reboot至單人模式,也可寫成下式: # shutdown +2 # shutdown –r 5 →系統5分鐘後reboot。在等待期間若按ctrl+c可取消。 # shutdown -h 3 ”note” →系統3分鐘後關機,screen並顯示note字樣。 # shutdown –Fr now =>reboot時,force fs check。 # shutdown –h 18:30 ”system will halt at 18:30” 2. 其它關機或重開機指令: # halt (# init 0) # reboot (# init 6) 以上指令雖簡單,但不建議使用,因其不似shutdown指令,能透過廣播通知正在使用系統的user,諸如系統即將關機或重開機的訊息。 補充:在 /etc/inittab的後面還有以下敘述: 1:2345:respawn: /sbin/mingetty tty1 ↓ ↓ 6:2345:respawn: /sbin/mingetty tty6 以上乃意謂著有6個終端機可供切換,可按下ctrl+alt+(F1~F6)來選擇使用哪個終端機,若只想提供1~4 (F1~F4),可於5.6行前面加註#,再執行 # init q 或 # telinit q 以便重讀inittab,使其改變立即生效。 telinit為一soft link file,link至init。 而respawn用意,在於當使用者登出後,要再登入 (或其它user login) 時, /sbin/mingetty可重新執行,以便能順利登入終端機,否則會造成登入失敗。
__________________ 如果您覺得"文章小說討論區"所發的主題不錯 請不要吝嗇 在主題 " 點閱" 及 並給予 發文者一些鼓勵 --------------------------------------------- 為了防止世界被破壞 為了保護世界的和平 貫徹下載與燒錄的邪惡 可愛又迷人的盜版角色 MP3....Program... 我們是穿梭在網際網路中的盜版大隊~~ 拷貝 拷貝的明天正等著我們~~ 就是這樣....喵~~@@ |