Boot, Init和Shutdown 過程的描述

火星人 @ 2014-03-09 , reply:0


本節描述紅帽子LINUX在Boot和shutdown時的內部處理過程.我們先叢討論 /etc/sysconfig下的文件開始.

11.9.1 有關Sysconfig的信息

以下內容將粗略的講述一下目錄/etc/sysconfg下的各種文件,它們的功能和內容.

11.9.1.1 /etc/sysconfig下面的文件

通常/etc/sysconfig目錄下面會有以下幾個文件:

/etc/sysconfig/clock

/etc/sysconfig/keyboard

/etc/sysconfig/mouse

/etc/sysconfig/network

/etc/sysconfig/pcmcia

/etc/sysconfig/amd

/etc/sysconfig/tape

讓我們分別了解一下每個文件的內容.

/etc/sysconfig/clock

-- 文件/etc/sysconfig/clock控制從系統時鐘讀出數據的解釋.紅帽子LINUX早先的版本使用以下數值(它們已經過時):

CLOCKMODE=mode, 這裡mode有以下各值:

GMT -- 表示時鐘被設置為UTC.

ARC--僅用在ALPHA系列機器上,表示ARC主控的每四十二年時間偏移有效

而目前使用的數值如下:

UTC=boolean, 其中boolean取值為:

true--表示時鐘被設置為UTC.任何其它值將表示時鐘被設置為當地時間.

ARC=boolean, 其中boolean取值為:

true--(僅適用於基於Alpha的系統)表示ARC主控的每四十二年時間偏移有效;任何其它值表示使用UNIX通常的開元計時.



/etc/sysconfig/keyboard


-- 文件/etc/sysconfig/keyboard控制鍵盤的功能.可以使用以下數值:



KEYTABLE=file,這裡file是定義鍵盤映射表的文件.例如:KEYTABLE=「/usr/lib/kbd/keytables/us.map


/etc/sysconfig/mouse


--文件/etc/sysconfig/mouse用以指定有關可用滑鼠的信息,可使用以下數值:

MOUSETYPE=type, 這裡type 使用下列之一:

microsoft --Microsoft滑鼠

mouseman --MouseMan 滑鼠

mousesystems -- Mouse Systems 滑鼠



ps/2 -- PS/2 滑鼠

msbm -- Microsoft匯流排滑鼠

logibm -- Logitech匯流排滑鼠

atibm -- ATI匯流排滑鼠

logitech -- Logitech 滑鼠

mmseries -- 老式的MouseMan滑鼠

mmhittab -- mmhittab滑鼠


XEMU3=emulation, 這裡emulation取下列數值之一:

yes -- 模擬三鍵滑鼠

no -- 三鍵滑鼠


補充一句,文件/dev/mouse是指向真正滑鼠設備的符號連接.



/etc/sysconfig/network


-- 該文件用以指定有關網路配置的信息.可以使用以下數值:



NETWORKING=answer, 這裡answer取以下值:

yes -- 應當配置網路.

no -- 不要配置網路.


HOSTNAME=hostname, 這裡hostname應當被設置為FQDN(完全域名),但可以為任何您想要的主機名.

請注意:為保證與用戶以前已安裝的軟體的兼容性,文件/etc/HOSTNAME應當與這裡設置的值相同.



FORWARD_IPV4=answer, 這裡answer取以下各值:

yes -- 做IP包轉發

no -- 不做IP包轉發


(當前的紅帽子LINUX在安裝時默認設置為「no」(符合RFC規範),如果FORWARD_IPV4 不加以設置的話,系統將允許轉發,以保持同紅帽子LINUX4.2及其以前版本的兼容性.)



GATEWAY=gw-ip, 這裡gw-ip設置為網關地址.

GATEWAYDEV=gw-dev, 這裡gw-dev設置為網關設備(如:eth0).

NISDOMAIN=dom-name, 這裡dom-name設置為NIS域名.


/etc/sysconfig/pcmcia


--該文件用來指定PCMCIA配置信息.使用以下數值:



PCMCIA=answer, 這裡answer取以下各值:

yes -- 支持PCMCIA設備. no -- 無須支持PCMCIA設備?



PCIC=pcic-type, 這裡pcip-type取以下各值:

i82365 -- 計算機擁有i82365類型的PCMCIA擴展槽晶元組.

tcic -- 計算機擁有tcic類型的PCMCIA擴展槽晶元組.




PCIC_OPTS=option, 這裡option為插槽驅動程序(i82365或tcic)的時鐘參數.

CORE_OPTS=option, 這裡option為pcmcia_core的設置選項.

CARDMGR_OPTS=option, 這裡option為PCMCIA cardmgr的選項.


/etc/sysconfig/amd


-- 該文件用以為amd指定操作參數.可以使用以下數值:



ADIR=path, 這裡path指向amd目錄.它應當是「/.automount」,通常不要改變.

MOUNTPTS=mountpts, 這裡mountpts設置如:「/net /etc/amt.conf」

AMDOPTS=options, 這裡options是針對AMD的附加設置.


/etc/sysconfig/tape


-- 該文件用以指定磁帶相關的配置信息.可以使用下列信息:



DEV=devnam, 這裡devnam為磁帶設備文件(例如:「/dev/nst0」).這裡要使用無反卷設備.對於SCSI磁帶來說是「/dev/nst#」,#表示磁帶驅動器的代號,如果您只有一台,那麼就使用「/dev/nst0」.對IDE磁帶機來說您使用「/dev/ht#」,而#表示您要使用的磁帶機的代號.如果您只有一台,那就用「/dev/ht0」.對於磁碟磁帶設備就使用「/dev/ftape」.

ADMIN=account,這裡account是用來在備份失敗時向該用戶發送郵件.通常設置為root.

SLEEP=time,這裡time是指兩個磁帶操作之間的睡眠時間.有些驅動器需要的時間更長一些,但是設置為「5」好象對8mm,4mm和DLT磁帶機都沒問題.

BLOCKSIZE=size, 這裡size是指磁帶驅動器的最佳塊大小.設置為「32768」對 8mm,4mm和DLT磁帶機來說均能工作.最優的設置大概是磁帶機一次可以寫入的最大數據量.

SHORTDATE=date,這裡date是指一個字元串,用以計算出簡短的日期,被用在備份文件時的日誌文件名中.其默認的設置為:「$(date %y:%m:%d:%H:%M)」

DAY=date,這裡date是指一個字元串,用以計算出日期,被用以作為日誌文件目錄.默認設置為:「$(date log-%y:%m:%d)」



DATE=date, 這裡date是指一個字元串,用以計算出日期,用於日誌文件中.默認的設置為``$(date)『『.

LOGROOT=path, 這裡path是指日誌存放的根目錄.

LIST=file,這裡file是由增量備份用來存放增量清單的文件名.它後面綴以序號.

DOTCOUNT=count,這裡count是指一個用作計數的文件名,用以決定增量備份時使用哪個增量清單.

COUNTER=count-file, 這裡count-file被用於備份完成後的回卷(可能不用).

BACKUPTAB=file, 這裡是指我們要備份清單名.


11.9.1.2 Files in /etc/sysconfig/network-scripts/


/etc/sysconfig/network-scripts下通常存在以下文件:



/etc/sysconfig/network-scripts/ifup

/etc/sysconfig/network-scripts/ifdown

/etc/sysconfig/network-scripts/network-functions

/etc/sysconfig/network-scripts/ifcfg-

/etc/sysconfig/network-scripts/ifcfg--

/etc/sysconfig/network-scripts/chat-

/etc/sysconfig/network-scripts/dip-

/etc/sysconfig/network-scripts/ifup-post

/etc/sysconfig/network-scripts/ifdhcpc-done


讓我們分別加以討論.



/etc/sysconfig/network-scripts/ifup, /etc/sysconfig/network-scripts/ifdown


--它們是分別指向/sbin/ifup和/sbin/ifdown的符號連接,這是該目錄下唯一可以直接調用執行的腳本,由這兩個腳本來調用其它的腳本程序.這裡的這兩個符號連接僅為了一致才放在這裡.它們可能從未來的版本中刪去,因此當前應當僅使用/sbin/ifup,/sbin/ifdown 命令.它們需要使用一個命令行參數:設備的名稱(如:eth0).它們在boot時還指定第二個參數「boot「,這樣可以忽略被設置成無需在boot時激活的的設備(ONBOOT=no).



/etc/sysconfig/network-scripts/network-functions


--這並不是一個真正公開的命令文件.它包括了用於激活和關停介面設備的腳本函數.特別的,其中大多數代碼被用來處理第二種介面配置和以網路報告的形式進行介面配置變化通知.





/etc/sysconfig/network-scripts/ifcfg-, /etc/sysconfig/network-scripts/ifcfg--


--第一個文件定義了一介面信息,第二個文件用以定義與一個「克隆」(也就是第二可用的)介面配置不同的信息.舉個例子,除了網路號不同外,也許別的都一樣,於是「克隆」的文件中只包含有網路號,而所有的設備信息都被放在基本的ifcfg 文件中.

ifcfg文件中可以定義的條目與介面類型有關.

以下各值常見於所有的基本配置文件中:

DEVICE=name,這裡name是物理設備的名字(動態分配的PPP設備應當除外,它的名字是「邏輯名」.

IPADDR=addr, 這裡addr是IP地址.

NETMASK=mask, 這裡mask是網路掩碼.

NETWORK=addr, 這裡addr是網路地址.

BROADCAST=addr, 這裡addr是廣播地址.

GATEWAY=addr, 這裡addr是網關地址.

ONBOOT=answer, 這裡answer取下列值之一:

yes -- 該設備將在boot時被激活.

no -- 該設備不在boot時激活.


USERCTL=answer, 這裡answer取下列值之一:

yes --非root用戶可以控制該設備.

no -- 非root用戶不允許控制該設備.


BOOTPROTO=proto, 這裡proto取下列值之一:

none -- 不使用boot時協議.

bootp -- 使用bootp協議.

dhcp --使用dhcp協議.


以下是所有PPP和SLIP文件所使用的數值:



PERSIST=answer, 這裡answer取下列值之一:

yes --該設備將一直維持激活態,即便是modem被掛斷而導致非激活態.

no -- 該設備不一直維持激活態.


MODEMPORT=port, 這裡port是modem埠的設備名稱(如「/dev/modem」).

LINESPEED=baud, baud是modem的線速率(例如,「115200「).

DEFABORT=answer, 這裡answer取下列值之一:

yes -- 在創建或編輯該介面的腳本時插入默認的終止字元串.



no -- 在創建或編輯該介面的腳本時不要插入默認的終止字元串.


以下數值適用於所有的PPP文件:



DEFROUTE=answer, 這裡answer取下列值之一:

yes -- 將該介面設置為默認路由.

no -- 不要將該介面設置為默認路由.


ESCAPECHARS=answer, 這裡answer取下列值之一:

yes -- 使用預定義的asyncmap.

no -- 不要使用預定義的asyncmap.


(這裡代表了一種簡化的介面;它不讓用戶指定使用escape字元.然而,幾乎任何情況下都可以使用一個00000000的asyncmap,而且如果需要的話,可以通過設置 PPPOPTIONS來使用任意的asyncmap.)

HARDFLOWCTL=answer, 這裡answer取下列值之一:

yes -- 使用硬體流控制.

no -- 不使用硬體流控制.


PPPOPTIONS=options,這裡options是任意的選項字元串.它被放置在命令行的末尾,以覆蓋前面的選項(如asyncmap).

PAPNAME=name,這裡name是pppd命令行中「name $PAPNAME」的一部分.

注意選項「remotename」總是指定為邏輯ppp設備名,如「ppp0」(如果先前有其它ppp設備被激活的話,這就可能是物理設備ppp1)這樣做便於管理pap/chap 文件--name/passwd對與邏輯ppp設備名關聯,因此它們可以被一起管理.理論上說,為邏輯PPP設備起除「ppp0」--「pppN」之外的如「worldnet」或」myISP「 的名字是可行的.



REMIP=addr, 這裡addr設置為遠端的ip地址(通常不加以指定)

MTU=value, 這裡value是MTU的數值.

MRU=value, 這裡value設置為MRU的值.

DISCONNECTTIMEOUT=value,這裡value表示當一個成功的連接被終止后要等多少秒后再進行連接.

RETRYTIMEOUT=value, 這裡value指企圖連接失敗后要等多少秒之後以進行下一次連接.


/etc/sysconfig/network-scripts/chat-




-- 該文件是建立PPP或SLIP連接的chat腳本.對於SLIP設備,要據chat腳本寫出一個DIP 腳本,而對於PPP設備chat腳本將被直接使用.



/etc/sysconfig/network-scripts/dip-


--這個只寫的腳本是由netcfg從chat腳本建立的.請不要改動這個文件.在未來的版本中該文件將消失,代之以「運行時構造」於chat的腳本.



/etc/sysconfig/network-scripts/ifup-post


--當任何網路設備(SLIP設備除外)被激活時就會調用該文件.調用 /etc/sysconfig/network-scripts/ifup-routes以根據該設備裝載靜態路由.裝載該設備的別名.如果未設置主機名時,設置主機名.該設備的每個ip將會有一主機名.向任何要求網路事件通知的程序發送SIGIO信號.還可以按照需要被括展為用以修正名字服務配置,調用任意腳本等等.



/etc/sysconfig/network-scripts/ifdhcpc-done


--當dhcp配置一旦完成,dhcpd將調用該文件;根據dhcpd放置於/etc/dhcpc/resolv.conf的版本設置/etc/resolv.conf..

11.9.2 系統V的Init過程

這一節簡要講述boot的內部過程.基本上詳細描述了Sys V init的boot過程及與以往版本的LINUX init的差別.Init是由核心在系統boot時運行的程序.由它負責啟動所有的需要在boot時運行的進程.其中包括供您登入的getty,NFS守護進程,FTP守護進程,以及任何需要機器在boot時啟動的進程.

Sys V init迅速成為LINUX世界中boot時啟動進程的標準.它比BSDinit更容易使用也更為強大和靈活.

Sys V init與BSD init不同,其配置文件位於/etc下面的一個名為rc.d子目錄中,而不是直接放在/etc下.在rc.d下您會發現rc.sysinit以及以下目錄:

init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d



init.d下面有許多腳本程序.一般來說,針對每一項需要在boot或轉變運行級時啟動的服務均需要一個腳本程序.這些服務包括網路,NFS,sendmail,httpd等等.服務中不包括那些象setserial一樣只運行一次就退出的命令.而那些東西應當放在 rc.local或rc.serial中.如果您需要rc.local的話,就把它放在/etc/rc.d下.大多數系統都包括這樣一個腳本,即便也沒什麼用.您需要的話還可以在/etc/rc.d下放置一個rc.serial,用於boot時做與串口相關的操作.事件的執行過程是這樣的:





系統核心在幾個地方查找init並開始執行第一個發現的init.

由init來執行/etc/rc.d/rc.sysinit

rc.sysinit執行了一系列的操作後接著運行rc.serial(如果存在的話)

由init執行所有默認運行級下的腳本程序

init執行rc.local

默認的運行級由/etc/inittab控制.在該文件前面應有一行:

id:3:initdefault:

對於大多數系統,您將會發現第二列的值被設置為3,也就是默認運行級為3.如果您想改變默認運行級,就編輯/etc/inittab,將3改為其它數值.對於這種操作一定要小心.如果您搞糟了,可以重新啟動機器並執行如下操作:

LILO boot: linux single

這可以使您以單用戶方式boot,以修正inittab文件.

那麼,那些腳本是如何運行的呢?您在rc3.d下鍵入ls -l 會看到下列文件:

lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local

您會發現這個目錄下沒有「真正」的文件.全都是一些指向init.d目錄下腳本的符號連接.符號連接由字母「S」或「K」和字母組成,S表示啟動某個腳本而K表示停止.這裡的數字僅用來安排執行的先後次序.Init將依次啟動所有的服務.數字可以重複,但這隻會把自己給搞糊塗.您只需使用兩位數字連同大寫的「S」或「K」來指示啟動或停止服務.

Init是如何啟動和停止服務的呢?很簡單,每個腳本被書寫成接受一個「start」或 「stop」的參數.實際上您可以以手工的執行以下的命令:



/etc/rc.d/init.d/httpd.init stop

來停止httpd伺服器.Init僅僅讀出文件名,如果它有字母「K」就以stop為參數調用該腳本,而有字母「S」時就以stop為參數調用該腳本.那麼為什麼設置那麼多的運行級呢?一些人是想將機器設置成為多種目的服務.比如我可以有一個僅運行httpd,sendmail, 網路服務等的運行級,還可以有一個只運行xdm,網路服務等的運行級.

11.9.3 Init 的運行級

Generally, Red Hat Linux runs in run level 3---full multiuser mode. The following runlevels are used in Red Hat Linux:

0

停機t.

1

單用戶模式

2

多用戶模式,但不提供NFS服務

3

全功能多用戶模式

6

重新啟動機器


如果您的機器進入了這樣一種狀態,系統損壞的/etc/inittab而不能boot,受損的/etc/passwd而不能登入,或者乾脆就是忘記了口令.在LILO boot 提示符下鍵入 linux 1 而boot進入單用戶模式,這是一個幾乎沒有裝載任何服務的狀態,您可以在提供的shell下執行修復命令.


11.9.4Initscript 工具

chkconfig命令提供了一個簡單的命令行方式來維護/etc/rc.d下的文件樹.它減輕系統管理員直接以手工方式維護/etc/rc.d下的符號連接的勞動.作為補充還有一個名為 ntsysv的基於屏幕交互的工具.請查看chkconfig和ntsysv的man手冊以獲得詳細信息.

11.9.5 在Boot時執行程序

腳本/etc/rc.d/rc.local是在boot時,於一切其它初始化操作之後或改變運行級別時執行的.例如,您可能要啟動其它的守護進程或者初始化印表機.補充一點,如果您需要進行串口的設置,可以編輯加入/etc/rc.d/rc.serial,系統會在boot時自動執行.

默認的/etc/rc.d/rc.local僅僅創建了一個顯示有核心版本號和機器類型的登入畫面.



11.9.6 Shutting Down

執行shutdown以關閉紅帽子LINUX.您可以閱讀shutdown的man手冊以獲得詳細信息.下面給出兩個常用的命令形式:

shutdown -h now shutdown -r now

任何一個命令都可以安全的關閉系統,前一個關閉系統后停機,后一個關閉系統后將重新啟動機器.

儘管reboot和halt命令現在可以在系統運行於運行級1-5時「聰明」的調用shutdown來關閉系統,但是這麼做並不是一個好的習慣,並不是所有的LINUX都支持這一功能.




[火星人 via ] Boot, Init和Shutdown 過程的描述已經有88次圍觀

http://www.coctec.com/docs/linux/show-post-57918.html