返回   ShareGet 社群討論 > ≡ 電腦網路 ≡ > □ -- Unix & Linux

發表新主題 回覆
 
主題工具 顯示模式
  #1  
舊 2005-12-04, 01:19 PM
kazaya 的頭像
原來傷害最深的
 
註冊日期: 2004-05-31
來自: 是那些不肯同你說真話的人
文章: 8,847
給予: 45 | 感謝 222 | 共 123 篇
積分: 25189 | 給分能力: 98
[轉貼] 第五章 Boot,Initialization,Shutdown,and Runlevels

第五章 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...  我們是穿梭在網際網路中的盜版大隊~~
拷貝 拷貝的明天正等著我們~~
就是這樣....喵~~@@
回覆時引用此文章
發表新主題 回覆

書簽

主題工具
顯示模式

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用
論壇跳轉


所有時間均為GMT -5。現在的時間是 09:38 PM


Powered by vBulletin® Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.