Linux系統(tǒng)啟動的基本過程和步驟_第1頁
Linux系統(tǒng)啟動的基本過程和步驟_第2頁
Linux系統(tǒng)啟動的基本過程和步驟_第3頁
Linux系統(tǒng)啟動的基本過程和步驟_第4頁
Linux系統(tǒng)啟動的基本過程和步驟_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Linux系統(tǒng)啟動的基本過程和步驟:最近在某個版塊看到有人討論GRUB的問題,這里是我個人的一些理解。我想大部分還是正確的,但肯定也有理解錯誤的地方,在這里拋磚引玉了!Linux系統(tǒng)啟動過程大致按照如下步驟進行(這是一個簡述):第一階段:BIOS啟動引導階段; 在該過程中實現硬件的初始化以及查找啟動介質; 從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理第二階段:GRUB啟動引導階段; 裝載stage1 裝載stage1.5 裝載stage2 讀取/boot/grub.conf文件并顯示啟動菜單; 裝載所選的kernel和initrd文件到內存中第三階段:內核階段: 運行內核啟動參

2、數; 解壓initrd文件并掛載initd文件系統(tǒng),裝載必須的驅動; 掛載根文件系統(tǒng)第四階段:Sys V init初始化階段: 啟動/sbin/init程序; 運行rc.sysinit腳本,設置系統(tǒng)環(huán)境,啟動swap分區(qū),檢查和掛載文件系統(tǒng); 讀取/etc/inittab文件,運行在/et/rc.d/rc.d中定義的不同運行級別的服務初始化腳本; 打開字符終端1-6號控制臺/打開圖形顯示管理的7號控制臺同時在上述過程中各階段所需要讀取的文件和操作的對象:BIOS啟動引導階段 GRUB啟動引導階段 內核階段 /init/sysinit階段=None /boot/grub/grub.conf /b

3、oot/vmlinuz- /etc/rc.d/rc.sysinit /boot/grub/stage1_5 /boot/initrd- /etc/inittab /boot/grub/stage2 /etc/rc.d/rc.d /etc/rc.d/init.d/* (下面是詳細的過程) 第一階段:系統(tǒng)上電開機后,主板BIOS(Basic Input / Output System)運行POST(Power on self test)代碼,檢測系統(tǒng)外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)。硬件配置信息及一些用戶配置參數存儲在主板的CMOS( Complementary Meta

4、l Oxide Semiconductor)上(一般64字節(jié)),實際上就是主板上一塊可讀寫的RAM芯片,由主板上的電池供電,系統(tǒng)掉電后,信息不會丟失。執(zhí)行POST代碼對系統(tǒng)外圍關鍵設備檢測通過后,系統(tǒng)啟動自舉程序, 根據我們在BIOS中設置的啟動順序搜索啟動驅動器(比如的硬盤、光驅、網絡服務器等)。選擇合適的啟動器,比如通常情況下的硬盤設備,BIOS會讀取硬盤設備的第一個扇區(qū)(MBR,512字節(jié)),并執(zhí)行其中的代碼。實際上這里BIOS并不關心啟動設備第一個扇區(qū)中是什么內容,它只是負責讀取該扇區(qū)內容、并執(zhí)行,BIOS的任務就完成了。此后將系統(tǒng)啟動的控制權移交到MBR部分的代碼。注: 在我們的現行

5、系統(tǒng)中,大多關鍵設備都是連在主板上的。因此主板BIOS提供了一個操作系統(tǒng)(軟件)和系統(tǒng)外圍關鍵設備(硬件)最底級別的接口,在這個階段,檢測系統(tǒng)外圍關鍵設備是否“準備好”,以供操作系統(tǒng)使用。第二階段:BIOS通過下面兩種方法之一來傳遞引導記錄:第一, 將控制權傳遞給initial program loader(IPL),該程序安裝在磁盤主引導記錄(MBR)中第二, 將控制權傳遞給initial program loader(IPL),該程序安裝在磁盤分區(qū)的啟動引導扇區(qū)中無論上面的哪種情況中,IPL都是MBR的一部分并應該存儲于一個不大于446字節(jié)的磁盤空間中,因為MBR是一個不大于512字節(jié)的空

6、間。因此IPL僅僅是GRUB的第一個部分(stage1),他的作用就是定位和裝載GRUB的第二個部分(stage2);stage2對啟動系統(tǒng)起關鍵作用,該部分提供了GRUB啟動菜單和交互式的GRUB的shell。啟動菜單在啟動時候通過/boot/grub/grub.conf文件所定義的內容生成。在啟動菜單中選擇了kernel之后,GRUB會負責解壓和裝載kernel image并且將initrd裝載到內存中。最后GRUB初始化kernel啟動代碼。完成之后后續(xù)的引導權被移交給kernel。假設Boot Loader為grub (grub-0.97),其引導系統(tǒng)的過程如下:grub分為stage

7、1 (stage1_5) 和stage2兩個階段。stage1可以看成是initial program loaderI(IPL),而stage2則實現了grub的主要功能,包括對特定文件系統(tǒng)的支持(如ext2,ext3,reiserfs等),grub自己的shell,以及內部程序(如:kernrl,initrd,root)等。stage 1:MBR(512 字節(jié),0頭0道1扇區(qū)),前446字節(jié)存放的是 stage1,后面存放硬盤分區(qū)表信息,BIOS將stag1載入內存中0x7c00處并跳轉執(zhí)行。stage1(/stage1/start.S)的任務非常單純,僅僅是將硬盤0頭0道2扇區(qū)讀入內存。0

8、頭0道2扇區(qū)內容是源代碼中的/stage2/start.S,編譯后512字節(jié),它是stage2或者stage1_5的入口。注:此時stage1是沒有能力識別文件系統(tǒng)的,其定位硬盤0頭0道2扇區(qū)過程如下:BIOS將stage1載入內存0x7c00處并執(zhí)行,然后調用BIOS INIT13中斷,將硬盤0頭0道2扇區(qū)內容載入內存0x7000處,然后調用copy_buffer將其轉移到內存0x8000處。定位0頭0道2扇區(qū)有兩種尋址方式:LBA、CHS。start.S的主要功能是將stage2或stage1_5從硬盤載入內存,如果是stage2,則載入0x820處;如果是 stage1_5,則載入0x2

9、200處。注:這里的stage2或者stage1_5不是/boot分區(qū)/boot/grub目錄下的文件,這個時候grub還沒有能力識別任何文件系統(tǒng)。分以下兩種情況:(1)假如start.S讀取的是stage1_5,它存放在硬盤0頭0道3扇區(qū)向后的位置,stage1_5作為stage1和stage2中間的橋梁,stage1_5有識別文件系統(tǒng)的能力,此后grub才有能力去訪問/boot分區(qū)/boot/grub目錄下的 stage2文件,將stage2載入內存并執(zhí)行。(2)假如start.S讀取的是stage2,同樣,這個stage2也不是/boot分區(qū)/boot/grub目錄下的stage2,這個

10、時候start.S讀取的是存放在/boot分區(qū)Boot Sector的stage2。這種情況下就有一個限制:因為start.S通過BIOS中斷方式直接對硬盤尋址(而非通過訪問具體的文件系統(tǒng)),其尋址范圍有限,限制在8GB以內。因此這種情況需要將/boot分區(qū)分在硬盤8GB尋址空間之前。假如是情形(2),我們將/boot/grub目錄下的內容清空,依然能成功啟動grub;假如是情形(1),將/boot/grub目錄下stage2刪除后,則系統(tǒng)啟動過程中grub會啟動失敗。這個地方經常要進行的操作:是關于grub常用的幾個指令對應的函數:grubroot (hd0,0) root指令為grub指定

11、了一個根分區(qū) -grubkernel /xen.gz-2.6.18-37.el5 kernel指令將操作系統(tǒng)內核載入內存 -grubmodule /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 module指令 -加載指定的模塊grubmodule /initrd-2.6.18-37.el5xen.img 指定initrd文件 -grubboot boot - 指令調用相應的啟動函數啟動OS內核第三階段:如階段2所述,grubboot指令后,系統(tǒng)啟動的控制權移交給kernel。Kernel會立即初始化系統(tǒng)中各設備并做相關配置工作,其中包括CPU、I/O、

12、存儲設備等。關于設備驅動加載,有兩部分:一部分設備驅動編入Linux Kernel中,Kernel會調用這部分驅動初始化相關設備,同時將日志輸出到kernel message buffer,系統(tǒng)啟動后dmesg可以查看到這部分輸出信息。另外有一部分設備驅動并沒有編入Kernel,而是作為模塊形式放在initrd(ramdisk)中。在2.6內核中,支持兩種格式的initrd,一種是2.4內核的文件系統(tǒng)鏡像image-initrd,一種是cpio格式。以 cpio 格式為例,內核判斷initrd為cpio的文件格式后,會將initrd中的內容釋放到rootfs中。 initrd是一種基于內存的文

13、件系統(tǒng),啟動過程中,系統(tǒng)在訪問真正的根文件系統(tǒng)/時,會先訪問initrd文件系統(tǒng)。將initrd中的內容打開來看,會發(fā)現有bin、devetc、lib、procsys、sysroot、init等文件(包含目錄)。其中包含了一些設備的驅動模塊,比如scsi ata等設備驅動模塊,同時還有幾個基本的可執(zhí)行程序 insmod, modprobe, lvm,nash。主要目的是加載一些存儲介質的驅動模塊,如上面所說的scsi ideusb等設備驅動模塊,初始化LVM,把/根文件系統(tǒng)以只讀方式掛載。initrd中的內容釋放到rootfs中后,Kernel會執(zhí)行其中的init文件,這里的init是一個腳本

14、,由nash解釋器執(zhí)行。這個時候內核的控制權移交給init文件處理,我們查看init文件的內容,主要也是加載各種存儲介質相關的設備驅動。 驅動加載后,會創(chuàng)建一個根設備,然后將根文件系統(tǒng)/以只讀的方式掛載。這步結束后釋放未使用內存并執(zhí)行switchroot,轉換到真正的根/上面去,同時運行/sbin/init程序,開啟系統(tǒng)的1號進程,此后系統(tǒng)啟動的控制權移交給 init 進程。關于switchroot是在nash中定義的程序。Linux Kernel需要適應多種不同的硬件架構,但是將所有的硬件驅動編入Kernel又是不實際的,而且Kernel也不可能每新出一種硬件結構,就將該硬件的設備驅動寫入內

15、核。實際上Linux Kernel僅是包含了基本的硬件驅動,在系統(tǒng)安裝過程中會檢測系統(tǒng)硬件信息,根據安裝信息和系統(tǒng)硬件信息將一部分設備驅動寫入 initrd 。這樣在以后啟動系統(tǒng)時,一部分設備驅動就放在initrd中來加載。第四階段:init進程起來后,系統(tǒng)啟動的控制權移交給init進程。/sbin/init進程是所有進程的父進程,當init起來之后,它首先會讀取配置文件/etc/inittab,進行以下工作:1)執(zhí)行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysinit),對系統(tǒng)進行基本的配置,以讀寫方式掛載根文件系統(tǒng)及其它文件系統(tǒng),到此系統(tǒng)基本算運行起來了,后面需要進行運行級別的確定及相

16、應服務的啟動;2)確定啟動后進入的運行級別;3) 執(zhí)行/etc/rc.d/rc,該文件定義了服務啟動的順序是先K后S,而具體的每個運行級別的服務狀態(tài)是放在/etc/rc.d/rcn.d(n=06)目錄下,所有的文件均鏈接至/etc/init.d下的相應文件。4)有關key sequence的設置5) 有關UPS的腳本定義6)啟動虛擬終端/sbin/mingetty 7)在運行級別5上運行X這時呈現給用戶的就是最終的登錄界面。至此,系統(tǒng)啟動過程完畢:)說明:1)/etc/rc.d/rc.sysint - System Initialization Tasks 它的主要工作有:配置selinux,

17、系統(tǒng)時鐘,內核參數(/etc/sysctl.conf),hostname,啟用swap分區(qū), 根文件系統(tǒng)的檢查和二次掛載(讀寫),激活RAID和LVM設備,啟用磁盤quota檢查并掛載其它文件系統(tǒng)等等。GRUB的基本原理以及對GRUB的操作控制方法:GRUB全稱為Grand Unified Boot Loader,是Linux操作系統(tǒng)主流的啟動引導管理器。主要作用是啟動和裝載Linux操作系統(tǒng)。系統(tǒng)啟動過程中一旦完成了BIOS自檢,GRUB會被立刻裝載。在GRUB里面包含了可以載入操作系統(tǒng)的代碼以及將操作系統(tǒng)引導權傳遞給其他啟動引導管理器的代碼。GRUB可以允許用戶選擇使用不同的kernel啟

18、動系統(tǒng),或者在啟動系統(tǒng)的過程中設置不同的啟動參數。而通常BIOS會以下面兩種方法之一來調用啟動引導管理器:將控制權移交給于驅動器主引導記錄的initial program loader(IPL);將控制權移交給其他啟動引導管理器,再由他們將控制權移交給安裝在分區(qū)引導扇區(qū)的IPL通常情況下啟動引導管理器GRUB由兩部分組成(stage1和stage2):stage1比較小,通??梢择v留在MBR或者各個磁盤分區(qū)的啟動扇區(qū)中,主要作用是裝載stage2。stage2比較大,從磁盤的啟動引導分區(qū)讀取至于在stage1和stage2之間存在一個stage1.5,是因為starge1.5具有識別文件系統(tǒng)的

19、能力。在Linux系統(tǒng)中對GRUB的配置有兩種方法:主要引導管理器:會將啟動引導管理器的stage1安裝在MBR上,這時啟動引導管理器必須被配置為可以傳遞控制權到其他操作系統(tǒng);次要引導管理器:會將啟動引導管理器的stage1安裝在一些分區(qū)的引導扇區(qū)上,而其他的啟動引導管理器會被安裝在MBR上,由他們來向Linux啟動引導管理器傳遞控制權。GRUB在啟動過程中可以提供命令行交互界面,可以從ext系列,reiserfs,fat等多種文件系統(tǒng)引導系統(tǒng),并且可以提供密碼加密功能,其內容在/boot分區(qū)下,系統(tǒng)啟動過程中由配置文件/boot/grub/grub.conf來定義啟動方式,對該配置文件的更改

20、會立即生效。在配置文件/boot/grub/grub.conf文件中定義的內容包括:grub所在的分區(qū),引導系統(tǒng)所使用的kernel文件位置,硬件初始化使用的initrd文件位置,以及啟動參數。例如:grubroot (hd0,0) root指令為grub指定了一個根分區(qū) -grubkernel /xen.gz-2.6.18-37.el5 kernel指令將操作系統(tǒng)內核載入內存-grubmodule /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 module指令加載指定的模塊-grubmodule /initrd-2.6.18-37.el5xen.im

21、g 指定initrd文件 -grubboot boot - 指令調用相應的啟動函數啟動OS內核可見其指定的內容大多數在/boot分區(qū),如果切換到/boot分區(qū)之后會看到這些內容:/boot/vmlinuz-* linux kernel的一個copy;/boot/initrd*.img 初始化的ram disk文件/boot/grub/device.map linux設備名和grub設備名的映射文件/boot/grub/grub.conf 主配置文件通常GRUB出錯幾率不是很大,但一旦出現問題恐怕采用最多的方式是重裝grub到MBR中。在這種時候需要注意的問題有:首先,設備映射關系:GRUB里面

22、對設備名稱的定義和系統(tǒng)中對設備名稱的定義方法不一樣: (fd0) /dev/fd0 (hd0) /dev/sda /dev/hda (hd1) /dev/sdb /dev/hdb如夠進入系統(tǒng)或者救援模式,可執(zhí)行命令/sbin/grub-install /dev/sda(或者hda)進行GRUB重裝: # /sbin/grub-install device處于某種原因MBR中信息出錯可以使用上面的命令將其重裝到磁盤主引導記錄中;但是如果在不能進入系統(tǒng)的情況下就需要通過grub的命令行界面進行手動設置,這個時候就要注意上面所提到的映射關系。同時,在grub命令行中對grub進行手動設置的時候需要注

23、意所使用的命令: 指定啟動分區(qū) # root (hd0,0) - # 表示將grub安裝在主引導記錄上setup(hd0) - # 退出grub quit - shell下面是一個完整的grub.conf文件內容:rootdhcp-0-195 # cat /etc/grub.conf # grub.conf generated by anaconda# Note that you do not have to rerun grub after making changes to this file# NOTICE:You have a /boot partition.This means th

24、at# all kernel and initrd paths are relative to /boot/, eg.# root (hd0,0)# kernel /vmlinuz-version ro root=/dev/VolGroup001/LogVol00# initrd /initrd-version.img#boot=/dev/sdadefault=0timeout=30splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenupassword -md5 $1$apEcJWbA$DTJ8a6mKn/3yrTTSXBtdH0title Red H

25、at Enterprise Linux Client (2.6.18-8.1.1.el5) root (hd0,0) kernel /vmlinuz-2.6.18-8.1.1.el5 ro root=/dev/VolGroup001/LogVol00 crashkernel=128M16M initrd /initrd-2.6.18-8.1.1.el5.img系統(tǒng)啟動運行級別的概念以及服務的定制方法;當initrd可以正常檢測和裝載之后,最后的工作就基本上由操作系統(tǒng)來進行了。當系統(tǒng)的init進程起來之后系統(tǒng)啟動的控制權移交給init進程。/sbin/init進程是所有進程的父進程,當init起

26、來之后,它首先會讀取配置文件/etc/inittab,進行以下工作:1)執(zhí)行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysinit),對系統(tǒng)進行基本的配置,以讀寫方式掛載根文件系統(tǒng)及其它文件系統(tǒng),后面需要進行運行級別的確定及相應服務的啟動,(從這個角度可以看出如果要定義系統(tǒng)的init動作,需要修改/etc/rc.d/rc.sysinit腳本)2)通過對/etc/inittab文件的讀取確定啟動后進入的運行級別;3) 在相應的運行級別中執(zhí)行/etc/rc.d/rcx.d目錄下的腳本名稱,該文件定義了服務啟動的順序是先K后S,而具體的每個運行級別的服務狀態(tài)是放在/etc/rc.d/rcn.d(n

27、=06)目錄下,但這些文件均是到/etc/init.d下的相應文件的鏈接。系統(tǒng)會按照在該目錄下的文件名稱和優(yōu)先級執(zhí)行對應運行級別目錄下的腳本:在某個運行級別的對應目錄下,K開頭的服務被關閉,S開頭的服務被開啟,K在S開始之前執(zhí)行,在執(zhí)行過程中按照數字來定義優(yōu)先級,數字越低優(yōu)先級越高。4)按照/etc/rc.d/rcX.d目錄中的定義,系統(tǒng)會于后臺啟動相應的服務,如果要對某個運行級別中的服務進行更具體的定制,通過chkconfig命令來操作,或者通過setup/ntsys/system-config-services來進行定制。5)在/etc/inittab文件中存在有關key sequence

28、,UPS的腳本定義,啟動虛擬終端/sbin/mingetty的設置,這時呈現給用戶的就是最終的登錄界面。也就是說后臺啟動的服務完畢之后,如果系統(tǒng)默認進入字符界面,則運行mgetty進入1-6號終端控制臺,如果系統(tǒng)默認進入圖形界面,則開啟gdm服務進入7號虛擬圖形控制臺。至此,系統(tǒng)啟動過程完畢。對于/etc/rc.d/rc.sysinit文件的說明:/etc/rc.d/rc.sysint - System Initialization Tasks 執(zhí)行系統(tǒng)初始化任務的腳本。它的主要工作有:配置selinux,系統(tǒng)時鐘,內核參數(/etc/sysctl.conf),hostname,啟用swap分

29、區(qū), 根文件系統(tǒng)的檢查和二次掛載(讀寫),激活RAID和LVM設備,啟用磁盤quota檢查并掛載其它文件系統(tǒng)這是其基本要實現的工作內容:#!/bin/bash# /etc/rc.d/rc.sysinit - run once at boot time# Taken in part from Miquel van Smoorenburgs bcheckrc.# Check SELinux status # Because of a chicken/egg problem, init_crypto must be run twice./var may be# encrypted but /var/lib/random-seed is needed to initialize swap.# Only read this once.# Initialize hardware# Set default affinity# Load other user-defined modules# Load modules (for backward compatibility with VARs)# Start the graphical boot, if necessary; /usr may not be mounted yet, so we#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論