FreeBSD連載(09):系統啟動過程

1999年11月11日 16:03 王波

第3章 系統管理和維護

  當使用安裝程序Sysinstall完成了系統安裝和基本配置任務之後,系統需要重新啟動。在系統從硬碟上重 新啟動之後,一個完好的FreeBSD系統就展現在使用者面前了。系統將出現登錄提示,允許使用者登錄進入FreeB SD操作系統。

  Unix是一種多用戶、多任務的操作系統,它支持並能管理多個用戶使用系統,其用戶分為普通用戶和管理員兩類 。普通用戶只能使用系統提供的具體應用功能,而只有管理員才能更改系統的配置、維護整個系統。FreeBSD系統的擁 有者不但是僅僅使用系統的普通用戶,同樣也是整個系統的管理員,要負責系統維護的任務。

  Unix下系統維護的任務具有相當大的伸縮性,按照不同的系統的要求,可以非常簡單,僅僅使用系統初始提供的 管理策略即可,也能是一種相當複雜的任務,對訪問的客戶進行更嚴格、更全面的限制。無論如何,FreeBSD的使用和 維護都是一件富有挑戰性的任務。

  • 系統的啟動與關閉

  不象個人電腦上的其他幾種操作系統,FreeBSD被設計為一種可以永久運行的系統,正常情況下不需要也不 應該頻繁的啟動和關閉。然而,FreeBSD的啟動過程從電腦系統自檢到載入FreeBSD系統核心,其中經過了幾 個不同的階段,這些階段的操作都涉及到系統維護,因此相當重要,需要系統管理員加以了解。同樣,由於FreeBSD是 一個多用戶系統,在後台運行著相當多對系統而言非常重要的進程,系統關閉時就需要首先關閉這些進程,因而FreeBS D的關閉過程也必須按照一定的要求來操作,否則就會對系統造成破壞。

  • 系統啟動過程
  •   普通個人電腦的啟動過程相當簡單,首先是系統BIOS自檢,自檢之後將載入啟動硬碟上的主引導區,由主引導 區上的引導程序再載入具體操作系統。標準的主引導區將按照啟動分區的設置,引導該分區上的操作系統,FreeBSD也 可以使用這種方式。但更常見的引導FreeBSD的方式,是使用FreeBSD Boot Manager,來管理和 負責引導包括FreeBSD在內的多個操作系統。

    • 多操作系統引導程序

      按照電腦啟動硬碟第一個扇區的系統主引導程序的不同,電腦有不同的啟動過程。FreeBSD最常使用 FreeBSD Boot Manager,它可以讓使用者在系統中共存的不同操作系統進行選擇。

      如果使用了Boot Manager用於多操作系統的引導,則系統自檢後首先進入Boot Manager的 引導界面。

      F1: FreeBSD

      F2: Dos

      F5: Disk 2

      Default F1

      Boot Manager使用電腦的功能鍵來啟動各個分區的操作系統,使用F1將啟動第一個分區wd0s1 上的操作系統,F2啟動wd0s2,F3對應wd0s3,等等,F5啟動另一個硬碟上主引導區的引導程序。這樣可以在 第二個磁碟上也安裝Boot Manager,由它來引導自己硬碟上各分區的操作系統。只有在分區的確存在的情況下, Boot Manager才顯示相應的啟動熱鍵,並從分區的類型判斷它是那種操作系統。在使用者選擇了某個選項,或者 經過了一定的延遲時間之後,Boot Manager就啟動FreeBSD系統。

      使用Boot Manager作多操作系統引導需要注意的是:一旦在這台電腦中重新安裝Dos/Windo ws系統,則主引導區就被重寫,需要重新安裝BootManager。

      當不想使用Boot Manager引導系統,而打算回到標準引導區的方式(不再需要引導多操作系統)時,可 以使用DOS程序fdisk.exe來恢復主引導區的內容。也可以使用FreeBSD的sysinstall程序來重 新安裝標準主引導區。

      A:> fdisk /mbr

      但是,Boot Manager仍然使用BIOS調用來獲得分區上的數據,由於BIOS只能訪問硬碟1024 柱面內的分區,因此FreeBSD的引導分區必須在1024柱面以內才能正常啟動系統。新的BIOS中使用LBA等方 式對硬碟數據進行了重新映射,來避免這個問題。然而就需注意不能隨意更改BIOS中的硬碟映射方式不可隨便更改,必須 與硬碟進行分區時的設置一致,否則BIOS就不能正確找到以前設置的分區。

    • boot loader

      無論是標準引導程序,還是FreeBSD Boot Manager,都將載入FreeBSD基本分區的第一 個扇區,這裡放置著FreeBSD的啟動程序Boot Block,它將載入FreeBSD檔案系統中的boot l oader程序,不需進行任何操作,boot loader程序將引導系統核心來啟動系統。但在這個過程中也可以中斷 自動啟動進程,進入交互模式,從而更改啟動核心、進行硬體設置、甚至提供了選擇不同的boot loader程序的機 會。

      FreeBSD 3.1-release中更新了系統的boot loader程序,這個新boot loa der程序與FreeBSD 2.2.x和3.0版本使用的boot loader不同,升級的原因之一是老版本的b oot loader不能啟動ELF格式的核心,此外新版本的boot loader功能更強大。因此老版本的boo t loader的行為與下面描述的不同。

      通常沒有必要改變Boot Loader,如果要更改使用的Boot Loader程序,就要在啟動螢幕最先 印出一個簡單的斜線 “/” 時,在幾秒時間內按下空格鍵,否則啟動過程將略過這個步驟,直接進入下一步。如果按下空 格,則系統將出現boot提示符。

      /

      >>FreeBSD/i386 BOOT

      Default: 0:wd(0,a)/boot/loader

      boot:

      此時輸入 “?” ,可以列出對應的硬碟分區中根目錄下的所有檔案。這時可以在boot提示符下輸入另一個b oot loader程序,啟動該boot loader程序,也可以直接輸入某個核心檔案名,從而略過boot l oader而直接啟動相應的核心。然而,通過boot loader能完成更多的任務,包括進行硬體資源設置。

      此時也可以列出、選擇不同的硬碟分區上的不同啟動檔案,正如之前的提示信息,0:wd(0,a)用於一個包含 FreeBSD根檔案系統的子分區,其中第一個0為硬碟控制器的序號,而wd(0,a)為硬碟分區wd0a,根據硬碟 分區情況,這對應第一個UFS分區上的根檔案系統。而後面可以跟隨目錄和檔案名,以及可以使用?來列出目錄下的檔案, 當然選擇啟動核心的任務可以在boot loader內部中更好的完成,一般情況下不需要進入這個階段改變boot loader程序。

      此後系統將進入Boot Loader程序中,由Boot Loader將核心/kernel和核心模塊載入 內存,接著Boot Loader就等待10秒間隔,在這個時間內可以讓用戶按下了除回車之外的其他任意鍵,進入Bo ot Loader的交互模式。

      /

      BTX loader 1.00 BTX version is 1.01

      Console: internal video/keyboard

      BIOS drive A: is disk0

      BIOS drive C: is disk1

      BIOS drive D: is disk2

       

      FreeBSD/i386 bootstrap loader, Revision 0.5 638/64512kB

      (wb@email.online.ha.cn, Web Mar 3 02:54:38 CST 1999)

      /kernel text=0x1697f2 data=0x168d0+0x1f17c syms=[0x4+0x1eb70+0x4+0x2014a]

      /modules/splash_bmp.ko text=0x1025 data=0xc+0x634 syms=[0x4+0x400+0x4+0x213]

       

      Hit [Enter] to boot immediately, or any other key for command prompt.

      Booting [kernel] in 8 seconds...

       

      Type ‘?’ for a list of commands, ‘help’ for more detiled help.

      disk1s3a:>

      新的Boot Loader使用BIOS的硬碟表示順序,沒有區分SCSI硬碟da和IDE硬碟wd,而直接 使用disk0、disk1、disk2按BIOS中的順序表示硬碟。本例中的提示符為disk1s3a,由於本例中 使用的硬碟為IDE接口,因此這實際就代表wd1s3a分區。

      在boot loader提示符下有很多相當有用的命令,例如使用ls命令可以列出disk1s3a中各級目 錄下的檔案,使用lsdev可以列出目前核心中的設備驅動,使用lsmod可以列出已經載入的核心模塊,使用load 可以載入另外的需要載入的核心模塊,使用autoboot可以在給定時間之後啟動系統,而使用boot命令可以立即啟 動系統核心,或者使用pnpscan命令掃描目前系統中的PNP卡。一般boot命令比較常用,例如使用 “boot -s” 命令,將啟動系統並進入單用戶模式,在這個模式下可以執行系統維護任務。通常由於只有可以信任的管理人員才能 訪問控制台,因此預設狀況下進入單用戶模式不需要使用密碼認証。

      在boot命令之後使用其他核心名字作參數,用來使用預設核心/kernel之外的其他核心來啟動系統。每個 FreeBSD系統都至少具備一個備用的通用核心kernel.GENERIC,在目前系統核心被破壞的情況下可以使 用它來啟動系統。因此在引導程序被破壞而系統完好的情況下(通常是由於重新安裝了Windows的原因),可以使用安 裝軟碟或光碟啟動,進入Boot Loader的交互模式,選擇硬碟上的核心啟動,然後進行修復而不需要重新安裝。當 在boot loader提示符下使用 “boot -c” 命令,在其後的啟動過程中將進入UserConfig中 ,用於對核心中的硬體資源參數進行配置。與系統初始安裝時進入UserConfig的方式不同,這將直接進入User Config的命令行模式,核心將出現UserConfig的提示符:

      config>

      此時可以使用help命令查詢可以使用的UserConfig命令,如果輸入visual指令,表示使用vi sual方式配置系統硬體,則會進入UserConfig的全螢幕界面,否則就使用這個命令行方式進行硬體參數配置。 命令行模式中可以使用ls命令列出不同的設備驅動程序,使用irq、drq、iomem等命令查看硬體的相應資源設置 。

      命令行模式比全螢幕界面更強大的地方是能夠對ISA PNP設備進行控制,這是通過pnp命令進行的。當IS A PNP卡由BIOS分配資源的時候,核心能以非PNP的驅動去探測它,這也是為何要在BIOS中關閉相關的PNP 選項的原因。但如果在編譯核心支持了PNP控制器,也可以在BIOS中設置為由OS(即FreeBSD)來管理硬體資 源,這就需要使用pnp命令手工為ISA PNP硬體分配資源,以便非PNP的驅動能檢測並正確設置資源。但是手工設 置要求對PNP卡硬體相當了解,否則還是讓BIOS來完成資源的分配更為適合。

      當退出UserConfig之後,或者在boot loader的交互模式下執行了boot命令,或者在bo ot loader提示進入交互模式的時候10秒鐘內沒有任何輸入,則boot loader就會載入核心,並自動將 控制權交給已經載入的FreeBSD核心程序,由核心探測電腦中的各個硬體,並將探測結果打印到螢幕上。使用鍵碟右 上角的Pause鍵可以暫停螢幕輸出,並可以使用Page Up,Page Down鍵上下滾動螢幕上的信息進行查看 ,最後再使用一次Pause鍵將打開螢幕輸出,繼續系統啟動過程。核心的啟動信息也可以在登錄系統之後使用dmesg 命令查看。

      FreeBSD 3.0以前的FreeBSD版本使用的Boot Loader為一個較老的版本,因此提示信 息與命令輸入方式也略有不同,但基本實現同樣的功能,舊Boot Loader程序的提示符直接就為 “boot:” ,可以直接輸入 “-s” 、 “-c” 等參數進入單用戶模式或進入UserConfig。啟動時boot loa der都會在螢幕上打印提示信息,解釋了基本用法和具體參數對應的含義。

      FreeBSD 3.1之後可以設定系統啟動標志圖象(如同Windows9x的啟動標志),那麼核心的探測 信息就不會顯示在螢幕上,而是被這個啟動圖象遮住。