Unix系統具有很長的、不斷發展變化的歷史,從20世紀70年代初AT&T創造了Unix開始,System V版本的誕生、AT&T與Sun的合作、OSF/1(HP、Digital Equipment Corporation、IBM等廠家組成的開放軟件基金會)組織的加入、源於BSD的Mach的成熟,再加上Linux的誕生,Sun Solaris一直都在Unix領域處於市場的領先地位。特有的Sparc版和X86版的支持,到現在Solaris 10的發布和開源,Sun Solaris一直在不斷地改進和發展!
下面我們共同探討一下Solaris 2.x的啟動和關機。Solaris 2.x采用了基於Unix系統System V Release 4.0標准的靈活的啟動過程,這就使得可以很容易地產生和定制在各個主機和系統上都通用的啟動和關機過程,這與Solaris 1.x所用的簡單的BSD風格的啟動過程形成了鮮明的對比,後者缺少針對不同的系統狀態啟動腳本的不同組織形式。
談到啟動,首先要介紹一下Sun Sparc平台下的EEPROM OpenBoot固件監視系統,它類似於PC BIOS的芯片程序,其職責在於識別分區,文件系統和加載內核。在Solaris系統中,默認的內核文件存放在/platform/arch/kernel/unix位置,根據版本的不同可能略有差別。arch指令是指明系統的硬件結構體系,例如sun4u(sun ultrasparc)、i86pc(intel IA32)等。由於PC廠商有不同的BIOS系統,Sun Solaris X86版很難做到在其系統中有OpenBoot固件監控系統,只是提供了一個模擬EEPROM引導程序來負責內核的定位和加載。下面談到的OpenBoot固件監視系統功能都是針對Sparc硬件平台而言。
EEPROM OpenBoot固件監視系統(簡稱OBP),主要功能如下:
調整啟動設備和啟動參數
通過對命令對boot-device參數的設置,確定啟動的設備及啟動設備順序的調整。Sun SDS對根盤進行鏡像後的設置和Vertias VxVm等卷管理軟件對根盤進行封裝之後都需要在OBP進行設置。參數設置如下所示:
·printenv:顯示參數的當前值以及默認值。
·setenv variable value:設定參數variable的值為value(永久性修改,需要重啟之後生效)。
·set-default variable:將某個參數設定為出廠值。
·set-defaults:將所有參數設定為出廠值。
·password:設置密碼。
檢測硬件故障
OBP中提供了簡單的硬件檢測命令和模式。例如,檢測SCSI總線的終結狀態,或者執行稱為“上電自檢”的POST(Power-On Self Test,POST)檢測。OBP中提供了一些診斷工具以便測試系統中所安裝的硬件,ok help diag命令可以查看可用的test命令,部分命令如下所示:
·probe-scsi:檢測在scsi總線上的設備。
·test device-specifier:執行指定設備的自檢。
·test net:測試網絡連接。
·watch-clock:測試時鐘。
編寫啟動程序
和許多Linux版本自帶的LILO Linux 、GRUB linux等加載器不一樣,OpenBoot不僅僅是一個簡單的操作系統加載器,它還允許在啟動進程開始前寫入、加載和運行使用基於堆棧的Forth編程語言編寫的程序。當為一個大企業定制服務器時,通常要求在啟動時顯示公司的標志而不是缺省的Sun標志,這時,OpenBoot的這一特性就非常有用了。可以生成一個用合適的像素構成的Forth數組,然後運行oem-logo命令。另外,在單用戶和多用戶init狀態中,也可以在啟動後對變量的值進行設定,這可以通過以超級用戶的身份運行eeprom命令實現。
OBP用戶界面(熟稱OK態)
可通過如下方式進入OBP界面:
·halt系統(init 1,等等)。
·利用組合鍵 STOP+A。
·auto-boot?設置為false,開機自動進入。
·檢測到系統硬件錯誤。
OBP中提供了幾個命令來顯示系統的信息,通過這些命令就可以大概了解系統的配置信息,如下所示:
·banner:顯示電源狀態。
·show-sbus:顯示已安裝且檢測到的SBus設備列表。
·enet-addr:顯示當前的以太網地址。
·idprom:顯示經過格式化的ID PROM的內容。
·traps:顯示處理器相關的陷阱類型的列表。
·version:顯示啟動PROM的版本和日期。
·speed:顯示處理器和總線的速度。
設備樹與設備別名
設備樹的命名規則與Solaris設備的物理命名方式相同。顯示設備樹所用的命令如下所示:
·properties:顯示當前所在設備節點的屬性。
·dev device-path:選擇某個設備節點。
·dev node-name:在當前設備節點的下級樹中查找某個設備節點,且切換到第一個。
·dev ..:選擇當前設備節點的上一級設備。
·dev /:選擇設備的根節點。
·device-end:離開設備樹。
·ls:顯示當前設備的下級設備。
·pwd:顯示當前設備的物理連接路徑。
·show-devs [device-path]:顯示設備樹(show-devs將顯示整個機器的設備樹)。
·words:顯示當前設備的名字。
在日常應用中,設備名的格式(/sbus@1f,0/esp@0,40000/sd@3,0:a)導致其在使用上很不方便,而使用設備別名卻是解決方法之一,如下所示的命令可以對設備別名進行操作:
·devalias:顯示當前的別名設置。
·devalias alias:顯示特定設備別名對應的物理設備名。
·devalias alias:設置別名,如果alias有重復則覆蓋掉舊值。
OBP啟動順序
·上電自檢 (POST) 。
·執行系統初始化。
·執行nvramrc定義的腳本 (if use-nvramrc? is true) 。
·執行probe-all (evaluate FCode) 。
·執行install-console 。
·顯示banner 。
·執行二級診斷。
·啟動操作系統 (if auto-boot? is true)。
獲取在線幫助
在ok提示符下可以使用下面的命令獲取幫助:
·help:顯示幫助的分類。
·help category:顯示特定分類的可用命令,category使用提示的第一個單詞。
·help command:顯示特定命令的幫助。
從OpenBoot啟動後,Solaris有幾個不同的操作模式,稱為“運行等級”或“init狀態”。對於大多數系統來說,缺省的運行等級是init 3,它允許多個用戶登錄,並可運行各種程序,包括NFS。然而,要從OpenBoot轉入這個狀態,需要經過一系列預先規定的init狀態轉移,從單用戶(1,S)到多用戶 (2 , 3)運行狀態。
Solaris軟件環境提供了一系列詳細的運行控制腳本,來控制運行等級的轉換,每一個運行等級都在/sbin目錄下有一個相關的rc腳本,它們也分別鏈接到/etc目錄: rc0, rc1, rc2, rc3, rc5, rc6, rcS。
Solaris的啟動進程是按照SYS V格式控制的,當系統內核運行完畢,加載好所有的驅動之後,就會把控制權移交給/sbin/init進程(PID:1) ——即所有進程的父進程——然後由init讀取/etc/inittab,依次執行/etc/rc1(2,3)啟動腳本,最終到達inittab中指定的默認運行級別。整個系統啟動過程如下:
·init 0,openboot模式 -> (引導內核,加載硬件驅動)可以選擇從cdrom引導進入維護模式。
·init 1,單用戶模式 -> (加載/分區) 登陸進入維護模式,或按Ctrl+D進入多用戶模式。
·init 2, 網絡工作站模式 -> (連接網絡,運行網絡工作站服務) 運行/etc/rc2腳本連接網絡。
·啟動S69inet服務,運行部分inetd網絡服務。
·init 3, 網絡服務器模式 -> (運行各種網絡服務) 運行/etc/rc3腳本啟動網絡服務器。
下面是/etc中所有的啟動運行腳本簡要說明:
rc0.d: eeprom OpenBoot狀態,可以進入硬件維護模式或關閉機器。
rc1.d: 單用戶模式,可以對系統進行軟件維護。
S01MOUNTFSYS +加載文件系統。
S10lu =當運行live update後清理系統。
rc2.d: 多用戶模式,啟動網絡工作站服務(最後會啟動dtlogin允許圖形界面工作站)。
S01MOUNTFSYS
S05RMTMPFILES + 清空/tmp文件系統。
/tmp是系統緩存文件目錄,和swap分區共享空間,如果分區滿的話會對系統性能造成很大影響。
S10lu =
S20sysetup + 設置系統初始參數。
設置hostname等
S21perf = 性能記賬服務(無效)
開啟accton記賬服務,默認無效。
設置系統IP地址
S40llc2 + 啟動Class II logical link control driver
邏輯鏈路控制程序驅動
S42ncakmod = 啟動Solaris Network Cache and Accelerator (NCA)
NCA網絡緩存加速驅動,可以提高HTTP Server吞吐率。
S47pppd - 啟動撥號訪問服務器進程
串行線撥號訪問服務器
S69inet = 啟動inetd進程
s70uucp - 啟動uucp
S71rpc + 啟動rpcbind服務
rpcbind (RPC Portmap服務),如果需要CDE的話,這個進程是必需的。
S71sysid.sys + 配置一些系統參數
S71ldap.client - 啟動LDAP客戶端
S72directory - 啟動目錄服務
S72inetsvc + 啟動inet server
包含named/nis啟動名字解析服務,包含named和nis兩部分。
s72slpd - 啟動slpd
打印服務系統的一部分。
S72autoinstall = 啟動自動安裝守護進程
S73cachefs.daemon - 啟動cachefsd
NFS緩存服務,可以提高NFS吞吐率。
S73nfs.client = 啟動nfs客戶端
S74syslog + 啟動syslog
系統日志守護進程。
s74autofs - 啟動auto mount fsd
s74xntpd - 啟動網絡時間同步服務
S75cron + 啟動crontab服務
S75savecore +
S76nscd + 啟動nscd,名字服務緩存
S80kdmconfig = 啟動kdmconfig
S80spc - 啟動lpd打印守護進程
s80lp - 啟動lpd打印調度守護進程
S85lmgrd + 啟動flexlm license服務器
Solaris License管理服務器
S85power + 啟動電源守護進程
S88utmpd + 啟動utmpd
s88sendmail - 啟動sendmail
S89PRESERVE =“保留,無效”
S90wbem = 啟動wbem
S93cacheos.finish -
S94ncalogd = 啟動Solaris Network Cache and Accelerator LOGd
S95IIim + 啟動輸入法守護進程
Solaris國際化支持的一部分,啟動東亞語言輸入法
S95svm.sync + 啟動 devfsadm ,devfs同步進程。
S99audit + 啟動BSM審計進程
Solaris Base Securiey Modula,啟動Solaris C2安全審計(默認未啟動)。
S99dtlogin = 啟動CDE登錄進程
rc3.d: 多用戶模式,啟動網絡服務器模式
S13kdc.master - 啟動Kerberos服務器
S14kdc - 啟動Kerberos服務器
S34dhcp = 啟動dhcp
S50apache - 啟動apache服務器
S76snmpdx - 啟動snmp服務器
啟動snmp,允許遠程網絡管理
S77dmi - 啟動snmp - dmi服務
S89sshd + 啟動sshd服務器
S80mipagent - 啟動Mobile IP 代理
S90samba - 啟動samba服務器
注:+代表必須服務,系統正常運行必須;=代表可選服務,由用戶環境決定;-代表無效,不必要或不安全的服務。