亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 134514 | 回復(fù): 219
打印 上一主題 下一主題

(原創(chuàng))Linux 操作系統(tǒng)啟動(dòng)流程以及trouble shooting思路 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-06-26 23:19 |只看該作者 |倒序?yàn)g覽
Linux系統(tǒng)啟動(dòng)的基本過(guò)程和步驟:


Linux系統(tǒng)啟動(dòng)過(guò)程大致按照如下步驟進(jìn)行(這是一個(gè)簡(jiǎn)述):
第一階段:BIOS啟動(dòng)引導(dǎo)階段;
                     在該過(guò)程中實(shí)現(xiàn)硬件的初始化以及查找啟動(dòng)介質(zhì);
                     從MBR中裝載啟動(dòng)引導(dǎo)管理器(GRUB)并運(yùn)行該啟動(dòng)引導(dǎo)管理
第二階段:GRUB啟動(dòng)引導(dǎo)階段;
                     裝載stage1
                     裝載stage1.5
                     裝載stage2
                     讀取/boot/grub.conf文件并顯示啟動(dòng)菜單;
                     裝載所選的kernel和initrd文件到內(nèi)存中
第三階段:內(nèi)核階段:
                     運(yùn)行內(nèi)核啟動(dòng)參數(shù);
                     解壓initrd文件并掛載initd文件系統(tǒng),裝載必須的驅(qū)動(dòng);
                     掛載根文件系統(tǒng)
第四階段:Sys V init初始化階段:
                     啟動(dòng)/sbin/init程序;
                     運(yùn)行rc.sysinit腳本,設(shè)置系統(tǒng)環(huán)境,啟動(dòng)swap分區(qū),檢查和掛載文件系統(tǒng);
                     讀取/etc/inittab文件,運(yùn)行在/et/rc.d/rc<#>.d中定義的不同運(yùn)行級(jí)別的服務(wù)初始化腳本;
                     打開(kāi)字符終端1-6號(hào)控制臺(tái)/打開(kāi)圖形顯示管理的7號(hào)控制臺(tái)

同時(shí)在上述過(guò)程中各階段所需要讀取的文件和操作的對(duì)象:
BIOS啟動(dòng)引導(dǎo)階段                          GRUB啟動(dòng)引導(dǎo)階段                    內(nèi)核階段                         /init/sysinit階段
==================================================================================================
None                                         /boot/grub/grub.conf             /boot/vmlinuz-<version>    /etc/rc.d/rc.sysinit
                                             /boot/grub/stage1_5             /boot/initrd-<version>       /etc/inittab
                                             /boot/grub/stage2                                                       /etc/rc.d/rc<#>.d
                                                                                                                              /etc/rc.d/init.d/*
                                                                                                                                         



(下面是詳細(xì)的過(guò)程)                                                                                                                  
第一階段:
系統(tǒng)上電開(kāi)機(jī)后,主板BIOS(Basic Input / Output System)運(yùn)行POST(Power on self test)代碼,檢測(cè)系統(tǒng)外圍關(guān)鍵設(shè)備(如:CPU、內(nèi)存、顯卡、I/O、鍵盤(pán)鼠標(biāo)等)。硬件配置信息及一些用戶(hù)配置參數(shù)存儲(chǔ)在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字節(jié)),實(shí)際上就是主板上一塊可讀寫(xiě)的RAM芯片,由主板上的電池供電,系統(tǒng)掉電后,信息不會(huì)丟失。
執(zhí)行POST代碼對(duì)系統(tǒng)外圍關(guān)鍵設(shè)備檢測(cè)通過(guò)后,系統(tǒng)啟動(dòng)自舉程序, 根據(jù)我們?cè)贐IOS中設(shè)置的啟動(dòng)順序搜索啟動(dòng)驅(qū)動(dòng)器(比如的硬盤(pán)、光驅(qū)、網(wǎng)絡(luò)服務(wù)器等)。選擇合適的啟動(dòng)器,比如通常情況下的硬盤(pán)設(shè)備,BIOS會(huì)讀取硬 盤(pán)設(shè)備的第一個(gè)扇區(qū)(MBR,512字節(jié)),并執(zhí)行其中的代碼。實(shí)際上這里BIOS并不關(guān)心啟動(dòng)設(shè)備第一個(gè)扇區(qū)中是什么內(nèi)容,它只是負(fù)責(zé)讀取該扇區(qū)內(nèi)容、 并執(zhí)行,BIOS的任務(wù)就完成了。此后將系統(tǒng)啟動(dòng)的控制權(quán)移交到MBR部分的代碼。
注: 在我們的現(xiàn)行系統(tǒng)中,大多關(guān)鍵設(shè)備都是連在主板上的。因此主板BIOS提供了一個(gè)操作系統(tǒng)(軟件)和系統(tǒng)外圍關(guān)鍵設(shè)備(硬件)最底級(jí)別的接口,在這個(gè)階段,檢測(cè)系統(tǒng)外圍關(guān)鍵設(shè)備是否“準(zhǔn)備好”,以供操作系統(tǒng)使用。

第二階段:
BIOS通過(guò)下面兩種方法之一來(lái)傳遞引導(dǎo)記錄:
第一, 將控制權(quán)傳遞給initial program loader(IPL),該程序安裝在磁盤(pán)主引導(dǎo)記錄(MBR)中
第二, 將控制權(quán)傳遞給initial program loader(IPL),該程序安裝在磁盤(pán)分區(qū)的啟動(dòng)引導(dǎo)扇區(qū)中
無(wú)論上面的哪種情況中,IPL都是MBR的一部分并應(yīng)該存儲(chǔ)于一個(gè)不大于446字節(jié)的磁盤(pán)空間中,因?yàn)镸BR是一個(gè)不大于512字節(jié)的空間。
因此IPL僅僅是GRUB的第一個(gè)部分(stage1),他的作用就是定位和裝載GRUB的第二個(gè)部分(stage2);stage2對(duì)啟動(dòng)系統(tǒng)起關(guān)鍵作 用,該部分提供了GRUB啟動(dòng)菜單和交互式的GRUB的shell。啟動(dòng)菜單在啟動(dòng)時(shí)候通過(guò)/boot/grub/grub.conf文件所定義的內(nèi)容生 成。在啟動(dòng)菜單中選擇了kernel之后,GRUB會(huì)負(fù)責(zé)解壓和裝載kernel image并且將initrd裝載到內(nèi)存中。最后GRUB初始化kernel啟動(dòng)代碼。
完成之后后續(xù)的引導(dǎo)權(quán)被移交給kernel。

假設(shè)Boot Loader為grub (grub-0.97),其引導(dǎo)系統(tǒng)的過(guò)程如下:
grub分為stage1 (stage1_5) 和stage2兩個(gè)階段。stage1可以看成是initial program loaderI(IPL),而stage2則實(shí)現(xiàn)了grub的主要功能,包括對(duì)特定文件系統(tǒng)的支持(如ext2,ext3,reiserfs 等),grub自己的shell,以及內(nèi)部程序(如:kernrl,initrd,root)等。
stage 1:MBR(512 字節(jié),0頭0道1扇區(qū)),前446字節(jié)存放的是 stage1,后面存放硬盤(pán)分區(qū)表信息,BIOS將stag1載入內(nèi)存中0x7c00處并跳轉(zhuǎn)執(zhí)行。stage1(/stage1/start.S)的任 務(wù)非常單純,僅僅是將硬盤(pán)0頭0道2扇區(qū)讀入內(nèi)存。0頭0道2扇區(qū)內(nèi)容是源代碼中的/stage2/start.S,編譯后512字節(jié),它是stage2 或者stage1_5的入口。
注:此時(shí)stage1是沒(méi)有能力識(shí)別文件系統(tǒng)的,其定位硬盤(pán)0頭0道2扇區(qū)過(guò)程如下:
BIOS將stage1載入內(nèi)存0x7c00處并執(zhí)行,然后調(diào)用BIOS INIT13中斷,將硬盤(pán)0頭0道2扇區(qū)內(nèi)容載入內(nèi)存0x7000處,然后調(diào)用copy_buffer將其轉(zhuǎn)移到內(nèi)存0x8000處。定位0頭0道2扇區(qū)有兩種尋址方式:LBA、CHS。
start.S的主要功能是將stage2或stage1_5從硬盤(pán)載入內(nèi)存,如果是stage2,則載入0x820處;如果是 stage1_5,則載入0x2200處。
注:這里的stage2或者stage1_5不是/boot分區(qū)/boot/grub目錄下的文件,這個(gè)時(shí)候grub還沒(méi)有能力識(shí)別任何文件系統(tǒng)。分以下兩種情況:
(1)假如start.S讀取的是stage1_5,它存放在硬盤(pán)0頭0道3扇區(qū)向后的位置,stage1_5作為stage1和stage2中間的橋 梁,stage1_5有識(shí)別文件系統(tǒng)的能力,此后grub才有能力去訪(fǎng)問(wèn)/boot分區(qū)/boot/grub目錄下的 stage2文件,將stage2載入內(nèi)存并執(zhí)行。
(2)假如start.S讀取的是stage2,同樣,這個(gè)stage2也不是/boot分區(qū)/boot/grub目錄下的stage2,這個(gè)時(shí)候 start.S讀取的是存放在/boot分區(qū)Boot Sector的stage2。這種情況下就有一個(gè)限制:因?yàn)閟tart.S通過(guò)BIOS中斷方式直接對(duì)硬盤(pán)尋址(而非通過(guò)訪(fǎng)問(wèn)具體的文件系統(tǒng)),其尋址范 圍有限,限制在8GB以?xún)?nèi)。因此這種情況需要將/boot分區(qū)分在硬盤(pán)8GB尋址空間之前。
假如是情形(2),我們將/boot/grub目錄下的內(nèi)容清空,依然能成功啟動(dòng)grub;假如是情形(1),將/boot/grub目錄下stage2刪除后,則系統(tǒng)啟動(dòng)過(guò)程中g(shù)rub會(huì)啟動(dòng)失敗。
這個(gè)地方經(jīng)常要進(jìn)行的操作:
是關(guān)于grub常用的幾個(gè)指令對(duì)應(yīng)的函數(shù):
grub>root (hd0,0)                                                                                            --root指令為grub指定了一個(gè)根分區(qū)
grub>kernel /xen.gz-2.6.18-37.el5                                                                  --kernel指令將操作系統(tǒng)內(nèi)核載入內(nèi)存
grub>module /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2                           --module指令加載指定的模塊
grub>module /initrd-2.6.18-37.el5xen.img                                                      --指定initrd文件
grub>boot                                                                                                       --boot 指令調(diào)用相應(yīng)的啟動(dòng)函數(shù)啟動(dòng)OS內(nèi)核


第三階段:
如階段2所述,grub>boot指令后,系統(tǒng)啟動(dòng)的控制權(quán)移交給kernel。Kernel會(huì)立即初始化系統(tǒng)中各設(shè)備并做相關(guān)配置工作,其中包括CPU、I/O、存儲(chǔ)設(shè)備等。
關(guān)于設(shè)備驅(qū)動(dòng)加載,有兩部分:一部分設(shè)備驅(qū)動(dòng)編入Linux Kernel中,Kernel會(huì)調(diào)用這部分驅(qū)動(dòng)初始化相關(guān)設(shè)備,同時(shí)將日志輸出到kernel message buffer,系統(tǒng)啟動(dòng)后dmesg可以查看到這部分輸出信息。另外有一部分設(shè)備驅(qū)動(dòng)并沒(méi)有編入Kernel,而是作為模塊形式放在 initrd(ramdisk)中。
在2.6內(nèi)核中,支持兩種格式的initrd,一種是2.4內(nèi)核的文件系統(tǒng)鏡像image-initrd,一種是cpio格式。以 cpio 格式為例,內(nèi)核判斷initrd為cpio的文件格式后,會(huì)將initrd中的內(nèi)容釋放到rootfs中。
initrd是一種基于內(nèi)存的文件系統(tǒng),啟動(dòng)過(guò)程中,系統(tǒng)在訪(fǎng)問(wèn)真正的根文件系統(tǒng)/時(shí),會(huì)先訪(fǎng)問(wèn)initrd文件系統(tǒng)。將initrd中的內(nèi)容打開(kāi)來(lái)看, 會(huì)發(fā)現(xiàn)有bin、devetc、lib、procsys、sysroot、init等文件(包含目錄)。其中包含了一些設(shè)備的驅(qū)動(dòng)模塊,比如scsi ata等設(shè)備驅(qū)動(dòng)模塊,同時(shí)還有幾個(gè)基本的可執(zhí)行程序 insmod, modprobe, lvm,nash。主要目的是加載一些存儲(chǔ)介質(zhì)的驅(qū)動(dòng)模塊,如上面所說(shuō)的scsi ideusb等設(shè)備驅(qū)動(dòng)模塊,初始化LVM,把/根文件系統(tǒng)以只讀方式掛載。
initrd中的內(nèi)容釋放到rootfs中后,Kernel會(huì)執(zhí)行其中的init文件,這里的init是一個(gè)腳本,由nash解釋器執(zhí)行。這個(gè)時(shí)候內(nèi)核的控制權(quán)移交給init文件處理,我們查看init文件的內(nèi)容,主要也是加載各種存儲(chǔ)介質(zhì)相關(guān)的設(shè)備驅(qū)動(dòng)。
驅(qū)動(dòng)加載后,會(huì)創(chuàng)建一個(gè)根設(shè)備,然后將根文件系統(tǒng)/以只讀的方式掛載。這步結(jié)束后釋放未使用內(nèi)存并執(zhí)行switchroot,轉(zhuǎn)換到真正的根/上面去,同 時(shí)運(yùn)行/sbin/init程序,開(kāi)啟系統(tǒng)的1號(hào)進(jìn)程,此后系統(tǒng)啟動(dòng)的控制權(quán)移交給 init 進(jìn)程。關(guān)于switchroot是在nash中定義的程序。
Linux Kernel需要適應(yīng)多種不同的硬件架構(gòu),但是將所有的硬件驅(qū)動(dòng)編入Kernel又是不實(shí)際的,而且Kernel也不可能每新出一種硬件結(jié)構(gòu),就將該硬件 的設(shè)備驅(qū)動(dòng)寫(xiě)入內(nèi)核。實(shí)際上Linux Kernel僅是包含了基本的硬件驅(qū)動(dòng),在系統(tǒng)安裝過(guò)程中會(huì)檢測(cè)系統(tǒng)硬件信息,根據(jù)安裝信息和系統(tǒng)硬件信息將一部分設(shè)備驅(qū)動(dòng)寫(xiě)入 initrd 。這樣在以后啟動(dòng)系統(tǒng)時(shí),一部分設(shè)備驅(qū)動(dòng)就放在initrd中來(lái)加載。

第四階段:
init進(jìn)程起來(lái)后,系統(tǒng)啟動(dòng)的控制權(quán)移交給init進(jìn)程。
/sbin/init進(jìn)程是所有進(jìn)程的父進(jìn)程,當(dāng)init起來(lái)之后,它首先會(huì)讀取配置文件/etc/inittab,進(jìn)行以下工作:
1)執(zhí)行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysinit),對(duì)系統(tǒng)進(jìn)行基本的配置,以讀寫(xiě)方式掛載根文件系統(tǒng)及其它文件系統(tǒng),到此系統(tǒng)基本算運(yùn)行起來(lái)了,后面需要進(jìn)行運(yùn)行級(jí)別的確定及相應(yīng)服務(wù)的啟動(dòng);
2)確定啟動(dòng)后進(jìn)入的運(yùn)行級(jí)別;
3) 執(zhí)行/etc/rc.d/rc,該文件定義了服務(wù)啟動(dòng)的順序是先K后S,而具體的每個(gè)運(yùn)行級(jí)別的服務(wù)狀態(tài)是放在/etc/rc.d/rcn.d(n=0~6)目錄下,所有的文件均鏈接至/etc/init.d下的相應(yīng)文件。
4)有關(guān)key sequence的設(shè)置
5) 有關(guān)UPS的腳本定義
6)啟動(dòng)虛擬終端/sbin/mingetty
7)在運(yùn)行級(jí)別5上運(yùn)行X
這時(shí)呈現(xiàn)給用戶(hù)的就是最終的登錄界面。
至此,系統(tǒng)啟動(dòng)過(guò)程完畢:)
說(shuō)明:
1)/etc/rc.d/rc.sysint -- System Initialization Tasks
它的主要工作有:
配置selinux,
系統(tǒng)時(shí)鐘,
內(nèi)核參數(shù)(/etc/sysctl.conf),
hostname,
啟用swap分區(qū),
根文件系統(tǒng)的檢查和二次掛載(讀寫(xiě)),
激活RAID和LVM設(shè)備,
啟用磁盤(pán)quota
檢查并掛載其它文件系統(tǒng)
等等。

GRUB的基本原理以及對(duì)GRUB的操作控制方法:
GRUB全稱(chēng)為Grand Unified Boot Loader,是Linux操作系統(tǒng)主流的啟動(dòng)引導(dǎo)管理器。主要作用是啟動(dòng)和裝載Linux操作系統(tǒng)。系統(tǒng)啟動(dòng)過(guò)程中一旦完成了BIOS自檢,GRUB會(huì) 被立刻裝載。在GRUB里面包含了可以載入操作系統(tǒng)的代碼以及將操作系統(tǒng)引導(dǎo)權(quán)傳遞給其他啟動(dòng)引導(dǎo)管理器的代碼。GRUB可以允許用戶(hù)選擇使用不同的 kernel啟動(dòng)系統(tǒng),或者在啟動(dòng)系統(tǒng)的過(guò)程中設(shè)置不同的啟動(dòng)參數(shù)。
而通常BIOS會(huì)以下面兩種方法之一來(lái)調(diào)用啟動(dòng)引導(dǎo)管理器:
將控制權(quán)移交給于驅(qū)動(dòng)器主引導(dǎo)記錄的initial program loader(IPL);
將控制權(quán)移交給其他啟動(dòng)引導(dǎo)管理器,再由他們將控制權(quán)移交給安裝在分區(qū)引導(dǎo)扇區(qū)的IPL
通常情況下啟動(dòng)引導(dǎo)管理器GRUB由兩部分組成(stage1和stage2):
stage1比較小,通?梢择v留在MBR或者各個(gè)磁盤(pán)分區(qū)的啟動(dòng)扇區(qū)中,主要作用是裝載stage2。
stage2比較大,從磁盤(pán)的啟動(dòng)引導(dǎo)分區(qū)讀取
至于在stage1和stage2之間存在一個(gè)stage1.5,是因?yàn)閟targe1.5具有識(shí)別文件系統(tǒng)的能力。
在Linux系統(tǒng)中對(duì)GRUB的配置有兩種方法:
主要引導(dǎo)管理器:
會(huì)將啟動(dòng)引導(dǎo)管理器的stage1安裝在MBR上,這時(shí)啟動(dòng)引導(dǎo)管理器必須被配置為可以傳遞控制權(quán)到其他操作系統(tǒng);
次要引導(dǎo)管理器:
會(huì)將啟動(dòng)引導(dǎo)管理器的stage1安裝在一些分區(qū)的引導(dǎo)扇區(qū)上,而其他的啟動(dòng)引導(dǎo)管理器會(huì)被安裝在MBR上,由他們來(lái)向Linux啟動(dòng)引導(dǎo)管理器傳遞控制權(quán)。
GRUB在啟動(dòng)過(guò)程中可以提供命令行交互界面,可以從ext系列,reiserfs,fat等多種文件系統(tǒng)引導(dǎo)系統(tǒng),并且可以提供密碼加密功能,其內(nèi)容在 /boot分區(qū)下,系統(tǒng)啟動(dòng)過(guò)程中由配置文件/boot/grub/grub.conf來(lái)定義啟動(dòng)方式,對(duì)該配置文件的更改會(huì)立即生效。
在配置文件/boot/grub/grub.conf文件中定義的內(nèi)容包括:
grub所在的分區(qū),引導(dǎo)系統(tǒng)所使用的kernel文件位置,硬件初始化使用的initrd文件位置,以及啟動(dòng)參數(shù)。
例如:
grub>root (hd0,0)                                                                                      --root指令為grub指定了一個(gè)根分區(qū)
grub>kernel /xen.gz-2.6.18-37.el5                                                            --kernel指令將操作系統(tǒng)內(nèi)核載入內(nèi)存
grub>module /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2                     --module指令加載指定的模塊
grub>module /initrd-2.6.18-37.el5xen.img                                                --指定initrd文件
grub>boot                                                                                                 --boot 指令調(diào)用相應(yīng)的啟動(dòng)函數(shù)啟動(dòng)OS內(nèi)核

可見(jiàn)其指定的內(nèi)容大多數(shù)在/boot分區(qū),如果切換到/boot分區(qū)之后會(huì)看到這些內(nèi)容:
/boot/vmlinuz-*                 linux kernel的一個(gè)copy;
/boot/initrd*.img             初始化的ram disk文件
/boot/grub/device.map        linux設(shè)備名和grub設(shè)備名的映射文件
/boot/grub/grub.conf       主配置文件

通常GRUB出錯(cuò)幾率不是很大,但一旦出現(xiàn)問(wèn)題恐怕采用最多的方式是重裝grub到MBR中。
在這種時(shí)候需要注意的問(wèn)題有:
首先,設(shè)備映射關(guān)系:
GRUB里面對(duì)設(shè)備名稱(chēng)的定義和系統(tǒng)中對(duì)設(shè)備名稱(chēng)的定義方法不一樣:
       (fd0)             /dev/fd0
       (hd0)             /dev/sda        /dev/hda
       (hd1)             /dev/sdb        /dev/hdb
如夠進(jìn)入系統(tǒng)或者救援模式,可執(zhí)行命令/sbin/grub-install /dev/sda(或者h(yuǎn)da)進(jìn)行GRUB重裝:
       # /sbin/grub-install device
處于某種原因MBR中信息出錯(cuò)可以使用上面的命令將其重裝到磁盤(pán)主引導(dǎo)記錄中;但是如果在不能進(jìn)入系統(tǒng)的情況下就需要通過(guò)grub的命令行界面進(jìn)行手動(dòng)設(shè)置,這個(gè)時(shí)候就要注意上面所提到的映射關(guān)系。

同時(shí),在grub命令行中對(duì)grub進(jìn)行手動(dòng)設(shè)置的時(shí)候需要注意所使用的命令:
       # root (hd0,0)                           --指定啟動(dòng)分區(qū)
       # setup(hd0)                            --表示將grub安裝在主引導(dǎo)記錄上
       # quit                                           --退出grub        shell

下面是一個(gè)完整的grub.conf文件內(nèi)容:
[root@dhcp-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 that
#       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/sda
default=0
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$apEcJWbA$DTJ8a6mKn/3yrTTSXBtdH0
title Red Hat 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=128M@16M
       initrd /initrd-2.6.18-8.1.1.el5.img

系統(tǒng)啟動(dòng)運(yùn)行級(jí)別的概念以及服務(wù)的定制方法;
當(dāng)initrd可以正常檢測(cè)和裝載之后,最后的工作就基本上由操作系統(tǒng)來(lái)進(jìn)行了。當(dāng)系統(tǒng)的init進(jìn)程起來(lái)之后系統(tǒng)啟動(dòng)的控制權(quán)移交給init進(jìn)程。
/sbin/init進(jìn)程是所有進(jìn)程的父進(jìn)程,當(dāng)init起來(lái)之后,它首先會(huì)讀取配置文件/etc/inittab,進(jìn)行以下工作:
1)執(zhí)行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysinit),對(duì)系統(tǒng)進(jìn)行基本的配置,以讀寫(xiě)方式掛載根文件系統(tǒng)及其它文件系統(tǒng),后面需要進(jìn)行運(yùn) 行級(jí)別的確定及相應(yīng)服務(wù)的啟動(dòng),(從這個(gè)角度可以看出如果要定義系統(tǒng)的init動(dòng)作,需要修改/etc/rc.d/rc.sysinit腳本)
2)通過(guò)對(duì)/etc/inittab文件的讀取確定啟動(dòng)后進(jìn)入的運(yùn)行級(jí)別;
3) 在相應(yīng)的運(yùn)行級(jí)別中執(zhí)行/etc/rc.d/rcx.d目錄下的腳本名稱(chēng),該文件定義了服務(wù)啟動(dòng)的順序是先K后S,而具體的每個(gè)運(yùn)行級(jí)別的服務(wù)狀態(tài)是放在 /etc/rc.d/rcn.d(n=0~6)目錄下,但這些文件均是到/etc/init.d下的相應(yīng)文件的鏈接。
系統(tǒng)會(huì)按照在該目錄下的文件名稱(chēng)和優(yōu)先級(jí)執(zhí)行對(duì)應(yīng)運(yùn)行級(jí)別目錄下的腳本:
在某個(gè)運(yùn)行級(jí)別的對(duì)應(yīng)目錄下,K開(kāi)頭的服務(wù)被關(guān)閉,S開(kāi)頭的服務(wù)被開(kāi)啟,K在S開(kāi)始之前執(zhí)行,在執(zhí)行過(guò)程中按照數(shù)字來(lái)定義優(yōu)先級(jí),數(shù)字越低優(yōu)先級(jí)越高。
4)按照/etc/rc.d/rcX.d目錄中的定義,系統(tǒng)會(huì)于后臺(tái)啟動(dòng)相應(yīng)的服務(wù),如果要對(duì)某個(gè)運(yùn)行級(jí)別中的服務(wù)進(jìn)行更具體的定制,通過(guò)chkconfig命令來(lái)操作,或者通過(guò)setup/ntsys/system-config-services來(lái)進(jìn)行定制。
5)在/etc/inittab文件中存在有關(guān)key sequence,UPS的腳本定義,啟動(dòng)虛擬終端/sbin/mingetty的設(shè)置,這時(shí)呈現(xiàn)給用戶(hù)的就是最終的登錄界面。
也就是說(shuō)后臺(tái)啟動(dòng)的服務(wù)完畢之后,如果系統(tǒng)默認(rèn)進(jìn)入字符界面,則運(yùn)行mgetty進(jìn)入1-6號(hào)終端控制臺(tái),如果系統(tǒng)默認(rèn)進(jìn)入圖形界面,則開(kāi)啟gdm服務(wù)進(jìn)入7號(hào)虛擬圖形控制臺(tái)。
至此,系統(tǒng)啟動(dòng)過(guò)程完畢。

對(duì)于/etc/rc.d/rc.sysinit文件的說(shuō)明:
/etc/rc.d/rc.sysint -- System Initialization Tasks 執(zhí)行系統(tǒng)初始化任務(wù)的腳本。
它的主要工作有:
配置selinux,
系統(tǒng)時(shí)鐘,
內(nèi)核參數(shù)(/etc/sysctl.conf),
hostname,
啟用swap分區(qū),
根文件系統(tǒng)的檢查和二次掛載(讀寫(xiě)),
激活RAID和LVM設(shè)備,
啟用磁盤(pán)quota
檢查并掛載其它文件系統(tǒng)

這是其基本要實(shí)現(xiàn)的工作內(nèi)容:
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's 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
# may have to do this again after mounting

# Configure kernel parameters

# Set the hostname.

# Initialize ACPI bits

# RAID setup

# Device mapper & related initialization

# Update quotas if necessary

# Remount the root filesystem read-write.

# Clean up SELinux labels

# Clear mtab

# Remove stale backups

# Enter mounted filesystems into /etc/mtab

# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.

# Check to see if a full relabel is needed

# Start the graphical boot, if necessary and not done yet.

# Initialize pseudo-random number generator

# Use the hardware RNG to seed the entropy pool, if available

# Configure machine if necessary.

# Clean out /.

# Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...

# Clean up /var.   I'd use find, but /usr may not be mounted.

# Reset pam_console permissions

# Clean up utmp/wtmp

# Clean up various /tmp bits

# Make ICE directory

# Start up swapping.

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-06-26 23:26 |只看該作者
頂一下,太好了,謝謝了。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-06-27 00:03 |只看該作者
非常棒,收藏了
感謝樓主分享

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-06-27 00:25 |只看該作者
佩服!學(xué)習(xí)了!

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-06-27 07:59 |只看該作者
真的很不錯(cuò)謝謝樓住提供

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-06-27 08:59 |只看該作者
順便問(wèn)一句,這么長(zhǎng)的文章,樓主用了多長(zhǎng)時(shí)間?

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-06-27 09:00 |只看該作者
強(qiáng)帖,留名,學(xué)習(xí)
哈哈,真不是一般的強(qiáng)!!

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-06-27 10:19 |只看該作者
寫(xiě)的真好,強(qiáng)烈建議版主應(yīng)多加點(diǎn)分

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-06-27 10:29 |只看該作者
想不到有這么多人支持,既然如此我將這篇文章的下半部分:八個(gè)trouble shooting的大概案例共享出來(lái)吧!哈哈!

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-06-27 10:37 |只看該作者
以下是我在生產(chǎn)環(huán)境中所碰到的一些和GRUB修復(fù)有關(guān)的案例:
案例一:
GRUB無(wú)法找到kernel image的問(wèn)題:
產(chǎn)生這類(lèi)型問(wèn)題的原因包括:
配置文件中指定了錯(cuò)誤的kernel image名稱(chēng)或者路徑,在/boot分區(qū)下kernel文件被刪除或者更名,kernel image文件被破壞,Raid-1磁盤(pán)陣列更換故障盤(pán)后信息不同步等。
對(duì)于這類(lèi)型問(wèn)題的解決方法:
可以設(shè)法通過(guò)救援模式或者在開(kāi)機(jī)的時(shí)候進(jìn)入grub的shell,然后利用grub shell嘗試手動(dòng)指定和裝載正確的kernel image信息或者在救援模式下檢查和重寫(xiě)grub.conf文件。
需要注意的是,如果要通過(guò)救援模式進(jìn)入grub命令行界面需要先chroot,即執(zhí)行chroot /mnt/sysimage。在
grub>提示符之后執(zhí)行:
# root (hd0,0)
# setup(hd0)
# quit
不管通過(guò)什么樣的方法和配置,只要使GRUB能夠正確找到kernel image是解決問(wèn)題的關(guān)鍵。
在對(duì)grub修復(fù)的時(shí)候尤其要注意MBR信息在軟件Raid上的恢復(fù)。
Linux的boot分區(qū)不能建立在軟件Raid-0上,但是可以建立在Raid-1陣列上。也就意味著系統(tǒng)的GRUB也是同時(shí)寫(xiě)入到Raid-1磁盤(pán)陣列兩塊盤(pán)的MBR中。但是如果這個(gè)信息一旦這個(gè)信息沒(méi)有正確寫(xiě)入或者正常完成寫(xiě)入,問(wèn)題就會(huì)出現(xiàn)。
這種情況多發(fā)于對(duì)Raid-1陣列中的壞盤(pán)進(jìn)行更換的時(shí)候。
一個(gè)典型的例子是,用戶(hù)只有兩塊磁盤(pán)做Raid-1,他在兩塊盤(pán)上分別規(guī)劃了同樣的磁盤(pán)分區(qū)/boot swap以及/,對(duì)應(yīng)的設(shè)備是md0,md1和md2。在其中的某一個(gè)磁盤(pán)出現(xiàn)問(wèn)題的時(shí)候,用戶(hù)更換一塊新的磁盤(pán),并且按照原來(lái)的盤(pán)規(guī)劃了/boot,swap以及/,同時(shí)使用了命令mdadm -A對(duì)三個(gè)md都進(jìn)行了重組,重組能夠順利完成,但是一旦重啟系統(tǒng)在出現(xiàn)一個(gè)GRUB的提示對(duì)話(huà)框之后引導(dǎo)停止。
從這個(gè)情況看來(lái),很顯然,md0,md1和md2內(nèi)的數(shù)據(jù)都由原來(lái)的磁盤(pán)向新的磁盤(pán)進(jìn)行了同步,但是MBR的內(nèi)容和信息沒(méi)有同步過(guò)來(lái)。這就造成了系統(tǒng)啟動(dòng)的失敗。
解決該問(wèn)題的方法:
可以使用救援模式引導(dǎo)系統(tǒng),或者使得GRUB能夠檢測(cè)到文件系統(tǒng)——即出現(xiàn)GRUB>提示符,執(zhí)行下面的命令,將GRUB重裝到第一塊盤(pán):
# root (hd0,0)
# setup(hd0)
# quit
然后執(zhí)行,將GRUB重裝到第二塊盤(pán):
# root (hd1,0)
# setup(hd0)
# quit
完成之后重啟系統(tǒng)。這種方法還可以對(duì)付在BIOS中對(duì)啟動(dòng)引導(dǎo)管理器進(jìn)行的修改。

案例二:
None System or Disk Error和GRUB的關(guān)系:
某個(gè)用戶(hù)曾經(jīng)報(bào)告一臺(tái)HP的DL380服務(wù)器上原有40G和140G兩塊硬盤(pán),并且按照第一塊硬盤(pán)所能夠提供的磁盤(pán)空間建立了一個(gè)軟件Raid-0磁盤(pán)陣列。該用戶(hù)在沒(méi)有拔除這兩塊硬盤(pán)的情況下直接加入了兩塊新的硬盤(pán)并計(jì)劃對(duì)原有的Raid-0陣列進(jìn)行擴(kuò)容。但在插入硬盤(pán)重啟之后顯示“None System or Disk Error”,在用戶(hù)拔除這兩塊硬盤(pán)之后重啟還出現(xiàn)同樣的信息。
根據(jù)描述的系統(tǒng)啟動(dòng)過(guò)程來(lái)看,這個(gè)none system or disk error的報(bào)錯(cuò),表明系統(tǒng)啟動(dòng)引導(dǎo)過(guò)程中并沒(méi)有裝在任何啟動(dòng)引導(dǎo)管理器(GRUB)信息,而之所以沒(méi)有找到這些信息是因?yàn)檫@些磁盤(pán)的MBR里面沒(méi)有用于引導(dǎo)的IPL或者說(shuō)白了系統(tǒng)所用于引導(dǎo)的磁盤(pán)根本就不是啟動(dòng)盤(pán)?磥(lái)系統(tǒng)并沒(méi)有使用用戶(hù)設(shè)想的磁盤(pán)作為啟動(dòng)引導(dǎo)磁盤(pán)。那么也就時(shí)說(shuō)這和在磁盤(pán)的GRUB沒(méi)有任何關(guān)系,我們所要做的第一能夠確保系統(tǒng)使用正確的磁盤(pán)引導(dǎo),第二就是沒(méi)有對(duì)原有的GRUB進(jìn)行任何錯(cuò)誤的修改就行。
按照我們對(duì)問(wèn)題的分析,用戶(hù)更換了硬盤(pán)所在的槽位,問(wèn)題得到解決。
產(chǎn)生該問(wèn)題的原因是因?yàn)镠P DL380服務(wù)器在安裝系統(tǒng)必須在陣列上進(jìn)行,但是新加入的磁盤(pán)或者陣列會(huì)更改原來(lái)默認(rèn)的啟動(dòng)引導(dǎo)順序。盡管這和GRUB的修復(fù)沒(méi)有任何關(guān)系,但是能夠準(zhǔn)確定位該問(wèn)題的所在至少能夠減少排錯(cuò)的時(shí)間以及一些不必要的麻煩。

案例三:
在RHEL3中HP服務(wù)器上的cciss和system-map的問(wèn)題:
眾所周知在GRUB中對(duì)設(shè)備進(jìn)行命名的方法和系統(tǒng)命名的方法是不同的。不管系統(tǒng)中的啟動(dòng)引導(dǎo)磁盤(pán)是sd接口還是hd接口在GRUB中都會(huì)被統(tǒng)一識(shí)別為hd,并且hda/sdahd0,hdb/sdbhd1……依次類(lèi)推。這和系統(tǒng)對(duì)設(shè)備的命名方式顯然存在一些差異,但是這種差異通過(guò)在/boot/grub/device-map文件中進(jìn)行解釋和映射來(lái)實(shí)現(xiàn)系統(tǒng)對(duì)兩種設(shè)備命名方法的映射。
這是一個(gè)device-map文件的內(nèi)容:
遺憾的是,redhat老版本的操作系統(tǒng)如RHEL3的某個(gè)版本,在一些特殊的硬件上,如HP的cciss中對(duì)系統(tǒng)設(shè)備名和GRUB設(shè)備名的映射關(guān)系不正確而導(dǎo)致系統(tǒng)在這些硬件上無(wú)法啟動(dòng)。這可以認(rèn)為是操作系統(tǒng)的一個(gè)bug,所幸該bug在RHEL3靠后的幾個(gè)發(fā)行版后都得到了修復(fù)。
盡管碰到這種問(wèn)題的幾率極低,但需要明確一點(diǎn),檢查設(shè)備映射是否正確也是GRUB排錯(cuò)的一項(xiàng)內(nèi)容。
這里順別說(shuō)一下:
cciss是惠普的smart array控制器的設(shè)備名,c0指channl 0,第一個(gè)SCSI通道,d0指邏輯盤(pán)1,d1指邏輯盤(pán)2……,p1指第一個(gè)分區(qū),p2是第二個(gè)分區(qū)……。在這種情況下,我們可以看到很多HP的服務(wù)器在通過(guò)該設(shè)備連接硬盤(pán)的時(shí)候,經(jīng)?吹降脑O(shè)備是/dev/cciss/c0d0p1,/dev/cciss/c0d0p2,/dev/cciss/c0d0p3等。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP