歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix教程

Solaris系統的啟動和關機


  Solaris 2.x 采用了基於UNIX系統System V Release 4.0標准的靈活的啟動過程, 使得很容易產生和定制在各個主機和系統上都通用的啟動和關機過程,這與Solaris 1.x所用的簡單的BSD風絡的啟動過程形成了對比,後者缺少針對不同的系統狀態的啟動腳本的不同組織形式。本章的目的是向讀者介紹一些基本術語和初始化參數,它們在將Solaris系統引入到單用戶和多用戶運行等級或者init狀態的過程中扮演了重要角色,其中init狀態是非常獨特的操作狀態,init狀態間的切換由init進程管理。閱讀本章後,Solaris 2.x的管理員們在診斷他們自已系統的啟動和關機過程時就會覺得有些自信了,並且在升級Solaris 1.x系統時,會對啟動時各過程的順序和之間的依賴關系有清楚的理解。
  
  在許多方面,Solaris的啟動和關機於許多其它系統有相似性,然而,認識和理解Solaris操作系統於其它服務器不同的特性也是非常重要的。SPARC硬件的一個重要的功能是稱為OpenBoot的固件監視系統,它負責啟動前的一些重要任務:
  
  · 通過鍵入下面的字符啟動Solaris操作系統:
  
  ok boot
  
  在 OpenBoot 提示符下, 它將啟動Solaris 內核 (在 Solaris x86上, boot命令必須通過Primary Boot Subsystem 菜單執行)
  
  · 設置系統配置參數,如啟動設備,它可以是幾個硬盤之一(由設備的全路徑名確定),或者是網絡上的一台其它主機,也可以是一個CD-ROM驅動器。
  
  · 通過執行下面這條命令監測網絡流量:
  
  ok watch-net
  
  在OpenBoot 提示符下運行
  
  · 對系統設備執行簡單的診斷和測試 (例如,檢測SCSI總線的終結狀態,或者執行稱為上電自檢的POST(Power-On Self Test POST )檢測)
  
  和許多Linux版本帶的LILO Linux加載器不一樣,OpenBoot不只是一個簡單的操作系統加載器,它還允許地啟動進程開始前寫入、加載和運行用基於堆棧的Forth編程語言寫的程序,當為一個大企業定制服務器時,常要求在啟動時顯示公司的標志而不是缺省的Sun標志,這時,OpenBoot的這一特性就非常有用了,可以生成一個用合適的象素構成的Forth數組,然後運行oem-logo命令。另外,在單用戶和多用戶init狀態中,也可以在啟動後對變量的值進行設定,這可以通過以超級用戶的身份運行eeprom命令實現。
  
  例如, eeprom 可以用來將啟動時自檢的RAM改成64M:
  
  L 4-3
  
  server# eeprom selftest-#megs=64
  
  在Solaris x86 系統中,固件不直接支持eeprom 這樣的功能: 每個PC廠商有不同的BIOS系統,使得很難做到這一點, 做用替代,用bootenv.rc文件中的變量集仿真內存。
  
  要想看OpenBoot為你的系統中的固件發布的信息,可以下面這一命令::
  
  L 4-4
  
  ok banner
  SPARCstation 10, Type 5 Keyboard
  ROM Rev. 2.4, 64 MB memory installed, Serial #6745644
  Ethernet address 6:3:10:a:cc:4a HostID 5767686
  
  如果OpenBoot的提示符不是ok (如,它顯業為>>),那麼只需簡單地鍵入n回到ok提示符:
  
  L 4-5
  
  >>
  n
  ok
  
  Solaris操作系統的第二個重要特性是通過高效的內核和用戶程序模式設計,達到up-time最大化的目的。在一些非Solaris服務器的環境中,每次安裝一個新應用時必須重起系統,或者需要重新配置內核。對Solaris系統來說,只在極少的情況下才需重起系統,因為應用程序從邏輯上與系統配置選項是分開的,許多系統級的配置選項可以在超級用戶的shell中設置,例如,許多TCP/IP選項可以用下面的命令動動修改:
  
  L 4-6
  
  server# ndd /dev/tcp
  
  在一些比較新的硬件配置中,甚至不需要重起就可以安裝新的硬件,這些優點可以減輕系統管員的工作,因此受到新的Solaris管理員的歡迎。
  
  (1)系統V啟動過程
  從OpenBoot啟動後,Solaris有幾個不同的操作模式,稱為“運行等級”或“init狀態”,之所以這麼叫是因為常用init命令來改變運行等級,當然也可以用init-wrapper腳本(如關機)。這些init狀態可以是單用戶的也可以是多用戶的,常常每一個狀態都代表不同的管理目的,而且是完全不相關的(也就是說,一個系統任何時候只能在一個init狀態上)。通常,一個設計成需不定期開機的Solaris系統將完成一系列預先定義好的步驟,以便啟動為提供基本系統服務、主要的用戶服務和可選應用服務所需的所有軟件程序。這些服務一般只在Solaris系統運行在多用戶狀態時才提供,它們都通過運行控制 ( rc ) shell腳本初始化。通常,在Solaris安裝過程中會為管理員自動生成一個運行控制腳本,然而,如果你想安裝第三方軟件(比如數據庫服務器),就需要在/etc/init.d目錄下生成你自已的運行控制腳本,以便在系統啟動時能自動加載這些服務。本章後面將全面介紹這個過程。
  
  如果因為某些原因(例如,定期的電源損耗)系統需要斷電或切換到一個特殊的管理模式來執行診斷測試,也可依據一系列預先定義好的控制腳本來殺死各個服務並保存用戶數據。保證這些事件的執行順序非常重要,因為這樣才能保證用戶數據的完整性。例如,對數據庫服務器的操作通常關系到服務器端的寫數據進程和後台的監聽進程之間的通信,監聽進程負責接受新的信息存儲請求。如果這個後台進程沒有在寫數據進程之前關閉,它可能從網絡客戶端繼續接受數據並將它存在一個已經被數據庫關閉的緩存裡,這將導致數據庫以一種不協調的狀態關閉,很可能會引起數據損壞或者記錄丟失。圖4-1說明了這個過程。Solaris管理員應利用他們的shell腳本知識嚴格管理系統的關機過程,就象利用運行控制腳本管理系統啟動過程那樣,這一點非常重要。
  
  管理員應注意三種類型的啟動方式。除了在超級用戶shell下用下面命令發起的正常重起過程
  
  L 4-7
  
  server# shutdown
  
  重配置啟動關系到在 /dev 和 /devices目錄下重新組織設備信息,恢復啟動關系到在系統對控制台輸入的命令不做響應時對毀壞的文件進行保存和分析。在早年的SPARC系統中,當有新的硬盤加入系統時,常需要重新配置啟動,在新一些的系統中就可能不需要這麼做了,比如E450就有hot-swapping 功能。在超級用戶shell下,在發出shuddown命令前輸入同的命令就可以執行重配置啟動:
  
  L 4-8
  
  server# boot -r
  at the OpenBoot monitor prompt, or by issuing the command:
  server# touch /reconfigure
  
  雖然在一個巨型系統中,硬件故障、內核模塊沖突和不正確的內核參數時有發生,但恢復啟動在Solaris系統中極少用到。如果在系統中發生了沖突經常會用堆棧跟蹤,它利用內核的診斷器(kadb)可以提供跟蹤系統錯誤原因的重要線索。
  
  運行等級
  雖然Solaris有八個init狀態,但在正常操作中管理員只用得到其中的五個,它們是:
  
  · 運行等級 S 這是一個用於系統管理任務和修復被損壞的文件系統的單用戶init狀態,可用這個命令:
  
  server# /usr/sbin/fsck
  
  · 運行等級 2 除了NFS exported network resources,這個運行等級第一次轉入多用戶狀態。
  
  · 運行等級 3 在這個運行等級下,所有的用戶都可以登錄,並可利用所有系統和NFS網絡資源。
  
  · 運行等級6 這個運行等級將停止操作系統運行並開始重起系統。
  
  · 運行等級 0 在這個運行等級下操作系統將關機並確保可安全地關電。
  
  在早一些的SPARC系弘中,要想安裝新的硬件,比如磁盤驅動器、外設或內存模塊,必須先讓系統進入運行等級0,但象E450這樣新一些的系統,當新硬盤“熱交換”到特定的驅動上去時可以繼續在多用戶init狀態下運行。這也就是說,這些機器可能根本用不著進行運行等級6,而且,連續開機幾個月的狀況也並不少見。
  
  用戶可以很容易地發現系統是在單用戶運行等級0、S和多用戶運行等級3,運行等級 S下將顯示Bourne shell的缺省提示符:
  
  L 4-10
  
  #
  
  運行等級0將顯示OpenBoot 的提示符:
  
  L 4-11
  
  ok
  
  運行等級3顯示如下提示:
  
  L 4-12
  
  server console login:
  
  要想確定系統當前的運行等級,也可用下面的命令:
  
  L 4-13
  
  server# who -r
  
  who命令的輸出也可以通過管道過濾去執行其它命令,具體命令決定與當前的運行等級,例如,如果一個數據庫應用要求在本地服務器上有NFS空間,如果當前的運行等級不是3,可以在數據庫的初始化腳本中快速地查一下當前的運行等級:
  
  L 4-14
  
  #!/bin/sh
  # Determine run-level
  set ‘/usr/bin/who -r'
  # Check third argument for current run-level
  if [ $3 != "3" ]
  then
   echo 'Error: NFS services are not available under run level 3.'
   echo 'NFS Volumes must be available to run this application.'
  exit
  fi
  # else execute database initialization here
  
  在表4-1中列出了所有運行等級,以及它們各自的運行控制腳本目錄。
  
  運行等級
   描述
   用戶狀態
   運行控制腳本目錄
  
  0
   硬件管理模式
   通過控制台訪問
   /etc/rc0.d
  
  1
Copyright © Linux教程網 All Rights Reserved