歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> linux系統啟動過程詳解

linux系統啟動過程詳解

日期:2017/2/27 16:06:31   编辑:Linux教程
Linux系統的啟動分5個階段,每個階段都完成不同的啟動任務。本章以RHEL5平台為例,剖析從打開計算機電源到計算機屏幕出現登錄歡迎界面的整個Linux啟動過程,並重點介紹啟動中涉及的主要配置文件以及管理工具。

1 Linux系統啟動過程簡介

由於在Linux系統的啟動過程中會出現非常多的提示信息,而且很多啟動信息都是在屏幕上一閃而過,所以對於很多Linux系統的初學者來說,可能會覺得Linux的啟動過程非常神秘和復雜。其實Linux系統的啟動過程並不是想象中的那麼復雜,其過程可以分為5個階段。
1.BIOS加電自檢
2.加載主引導加載程序(MBR)
3.加載次引導加載程序(GRUB)
4.Linux內核映像
5.init進程

2 BIOS加電自檢

X86計算機在啟動後首選會進行BIOS的加電自檢,檢測計算機的硬件設備,然後按照CMOS設置的順序搜索處於活動狀態並且可以引導的設備。引導設備可以是軟盤、光驅、USB設備、硬盤設置是網絡上的某個設備。

3 引導加載程序

GRUB是RHEL5默認的引導加載程序,其引導過程又可以分為啟動主引導加載程序和啟動次引導加載程序兩個階段。本節將介紹GRUB在這兩個階段中的啟動過程,以及介紹GRUB配置文件/boot/grub/grub.conf中的各種選項的使用。

3.1 引導加載程序的啟動

RHEL5默認安裝的引導加載程序是GRUB,是目前最常用的Linux引導加載程序。其引導過程分為兩個階段,第一階段是保存在MBR中的主引導加載程序的加載。MBR中的主引導加載程序是一個512字節大小的映像,其中包含有機器的二進制代碼和一個小分區表。主引導加載程序的任務就是查找並加載保存在硬盤分區上的次引導加載程序,它通過分區表查找活動分區,然後將活動分區的次引導加載程序從設備讀入內存中並運行,進入引導加載程序的第二階段。
次引導加載程序也被稱為內核加載程序,這個階段的任務是加載Linux內核。一旦次引導加載程序被加載到內存中後,便會顯示GRUB的圖形界面,在該界面中用戶可以通過上下方向鍵選擇需要加載的操作系統以及它們的內核。

3.2 GRUB配置

GRUB的配置主要通過修改/boot/grub/目錄下的grub.conf文件來完成,用戶可以通過VI或者在圖形界面中使用文件編輯工具打開該文件進行編輯。
1.default選項
2.timeout選項
3.splashimage選項
4.hiddenmenu選項
5.title選項
6.root (hdx,y)
7.kernel選項

4 內核映像

當用戶選擇啟動Linux操作系統後,GRUB會根據/boot/grub.conf配置文件中所設置的信息,從/boot/所在的分區上讀取Linux內核映像,然後把內核映像加載到內存中並把控制權交給Linux內核。Linux內核獲得控制權後,將會按以下步驟繼續引導系統。
(1)內核映像首先會檢測系統中的硬件設備,包括內存、CPU、硬盤等,對這些設備進行初始化並配置。
(2)內核映像是經過壓縮的,接下來它要對自身進行解壓,同時加載必要的設備驅動。
(3)初始化與文件系統相關的虛擬設備,如LVM或者軟件RAID等。
(4)裝載根文件系統(/),把根文件系統掛載到根目錄下。
(5)完成引導後,Linux內核會在其進程空間內加載init程序,並把控制器交給init進程,由init進程繼續完成接下來的系統引導工作。

5 init進程

init進程是Linux系統所有進程的起點,內核在完成內核引導後,便會加載init進程,其進程號是1。init進程啟動後,會初始化操作系統,並啟動特定的運行級別(Runlevel)下的自動運行程序。用戶可以通過更改相關的配置文件或使用圖形化配置工具“服務配置”,自定義需要在系統啟動時自動運行的服務。

5.1 init進程簡介

內核映像在完成引導後,便會啟動init進程。init進程對應的執行文件為/sbin/init,它是系統中所有進程的發起者和控制者,所有的進程都是由它所衍生。如果init進程出現問題,系統中的其他進程也會隨之而受影響。
1.作為所有進程的父進程參照對象
2.運行不同級別的程序

5.2 init進程的引導過程

當init進程獲得控制權後,它首先會執行/etc/rc.d/rc.sysinit腳本,根據腳本中的代碼配置環境變量、配置網絡、啟用Swap、檢查並掛載文件系統、執行其他系統初始化所必須的步驟等。

5.3 配置自動運行服務

配置自動運行服務涉及的文件較多,如果完全由用戶手工配置,其過程比較繁瑣,所以在RHEL5中提供有一個圖形配置工具,可以有效地簡化配置過程。用戶首先要創建服務對應的啟動關閉腳本,腳本的格式一般為:
#!/bin/bash
# chkconfig: -
# description:
#
case "$1" in
start)
stop)
status)
reload)
restart)
*)
esac
exit $RETVAL

6 重啟和關閉系統

Linux下常用的關機/重啟命令有shutdown、root、halt以及init,它們都可以達到重啟系統的目的,但每個命令的過程過程都有所不同。在本節的內容中將會介紹這些命令的使用方法,以及它們之間的區別,希望讀者經過本節的學習後可以靈活使用這些命令,完成系統的關機和重啟。

6.1 shudown命令:關閉或重啟系統

使用shutdown命令可以安全地重啟或關閉系統。當用戶執行shutdown命令後,系統會通知所有已經登錄的用戶系統將要關閉,然後拒絕任何新的用戶登錄,同時向系統中進程發送SIGTERM信號,這樣就可以讓應用程序有足夠的時間提交數據。啟動或關閉系統是通過向init進程發送信號,要求它改變運行級別來實行的。其中,級別0被用來關閉系統,級別6為重啟系統,級別1為單用戶模式。shutdown命令的格式如下:
shutdown [-t sec] [-arkhncfFHP] time [warning-message]

6.2 halt命令:關閉系統

halt是關閉系統的快捷命令。執行halt命令其實是相當於執行帶“-h”選項的shutdown命令。halt命令的格式如下所示。
halt [-n] [-w] [-d] [-f] [-i] [-p] [-h]

6.3 reboot命令:重啟系統

reboot是重啟系統的快捷命令。執行該命令,相當於執行帶“-r”選項的shutdown命令。該命令的格式如下:
reboot [-n] [-w] [-d] [-f] [-i] [-p] [-h]

6.4 init命令:改變運行級別

Linux系統共有7個不同的運行級別:0、1、2、3、4、5、6,使用init命令,可以改變系統當前的運行級別。其命令格式如下:
init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]

6.5 通過圖形界面關閉系統

7 系統啟動時常見的問題處理

Linux救援模式是解決系統無法正常引導的最有效的解決方法,用戶應該要熟練掌握進入Linux救援模式的方法。對於安裝了多系統的環境,經常會由於重裝Windows或者重新進行分區,導致GRUB被覆蓋或者無法引導Linux,本節也會對這些問題給出具體的解決方法。

7.1 進入Linux救援模式

當因為某些原因導致無法通過正常引導進入系統(例如GRUB損壞或者誤刪除了某些重要的系統配置文件)或需要進行某些特殊的系統維護任務(例如忘記了root用戶的口令需要進行重置)時,就需要使用Linux救援模式。

7.2 GRUB被Windows覆蓋

當安裝雙系統環境時,如果先安裝Linux,再安裝Windows;或者已經安裝好雙系統環境後,對Windows進行了重裝,那麼保存在MBR中的GRUB就會被Windows系統的引導裝載程序NTLDR所覆蓋,導致Linux系統無法引導。
這時候可以通過以下步驟恢復GRUB。
(1)使用7.1節中所介紹的方法進入Linux救援模式,並執行“chroot /mnt/sysimage”命令切換根分區到硬盤的根分區。
(2)在Shell中執行GRUB進入“grub>”提示符。
(3)執行“exit”命令退出硬盤的根分區,然後再執行一次該命令重啟計算機。

7.3 重新分區後GRUB引導失敗

如果系統中已經安裝了Linux,用戶使用分區工具對分區進行更改後,可能會導致Linux無法正常引導。例如,系統中有兩個分區,其中第一個分區安裝了Windows(hda1),第二個分區安裝了Linux(hda5)。





Copyright © Linux教程網 All Rights Reserved