linux開機啟動詳細流程

2022-05-03 22:09:09 字數 3743 閱讀 6538

一、bios 加電自檢

當你按電源開關開機時,電腦會首先去啟動bios(基本輸入輸出系統),bios一般是整合在主機板上的.

bios 的工作

1.檢測連線硬體,比如顯示卡,記憶體,磁碟等等,檢測的目的是以後把這些裝置資訊提供給作業系統

2.尋找啟動磁碟,每一種bios都會有開機啟動選單,可以在選單裡設定以哪個裝置啟動系統

比如:光碟機,硬碟,網路等等,這個選單可以設定多個選項,依照設定次序在裝置上尋找啟動資訊

3.找到了啟動硬碟,接著bios就會在磁碟上找啟動扇區,找到核心啟動系統.

1)先試著尋找第乙個扇區,也就是主引導記錄mbr(master boot record)

2)如果第乙個扇區上沒有沒有存在作業系統,再去尋找標記為boot的分割槽.

不論是mbr還是boot分割槽,儲存作業系統的空間都只有446位元組;

如果沒有在上面提到的位置找到作業系統的核心,那麼bios就無法繼續啟動工作.

而我們的核心往往會大於446個位元組,存放在磁碟的其他位置上,既然446裝不下核心,又為了能順利的找到放在其他位置上的核心,

人們想出了乙個辦法就在446位元組裡寫了乙個小程式,當bios試著啟動作業系統時就會執行這個小程式,然後再由小程式來載入其他位置的核心.這個小程式就是啟動載入器(boot loader)

二、boot loader

linux的boot loader(上文提到的小程式) 常見的有兩種:lilo grub

因為lilo存在著乙個1024柱面的限制,並且更改了磁碟上的啟動資訊檔案後需要重新啟動系統才能同步446位元組的內容,因為lilo的缺陷,已經被grub所取代.現在的絕大多數類linux系統都採用grub做boot loader;

grub則沒有了lilo各種限制,而且方便到能修改系統檔案的啟動內容就可以立刻與446內容同步.

那麼我們就看看grub的內容 它存在於 /boot/grub中

grub有幾個重要的檔案,stage1、stage1.5、stage2

stage1:它只有512位元組,通常放在mbr中,它的作用很簡單,就是在系統啟動時用於裝載stage2並將控制權交給它。

stage2:grub的核心,所有的功能都是由它實現。

stage1.5:介於stage1和stage2之間,是它們的橋梁,因為stage2較大,通常都是放在乙個檔案系統當中的,但是stage1並不能識別檔案系統格式,

所以才需要stage1.5來引導位於某個檔案系統當中的stage2。根據檔案系統格式的不同,stage1.5也需要相應的檔案,如:e2fs_stage1_5,fat_stage1_5,分別用於識別ext和fat的檔案系統格式。它存放於1-63的柱面之間.

引導順序如下:stage1->;stage1.5->;stage2,

主要的配置檔案時 grub.conf

裡面選項含義:

title:乙個作業系統引動的標頭,可以使多個

root :指明所需檔案存在於哪個磁碟哪個分割槽上 (hd0,0)表示第乙個硬碟,第乙個分割槽,可參考/boot/grub/device.map

kernel:核心檔案的名字,並且會有一些載入核心時的引數 or代表以唯讀方式載入

initrd:包含一些附加的驅動程式

三、核心啟動

核心啟動後會向bios查詢電腦的所有硬體資訊,然後自己接手下來管理這些裝置,以便提供給linux使用

核心會試著驅動這些裝置,這些裝置的驅動一部分包含在核心中,叫做靜態驅動,一部分以模組的方式(動態)存放檔案系統中,由

於此時還未掛載任何檔案系統,因此還不能使用檔案系統中的模組,這裡只能驅動在核心中存在的硬體驅動程式的對應裝置.想驅動核心中未包含的硬體驅動就需要載入檔案系統.

核心會嘗試掛載根檔案系統,根檔案系統至少包含 /etc /bin /sbin /lib /dev 這5大目錄

他們5個缺一不可.都會導致系統無法啟動

根檔案系統掛載是以唯讀方式掛載的,因為這時linux還在啟動階段,並不穩定,避免破壞系統資料

四、啟動init服務

順利的掛載了根檔案系統後,就會啟動init服務

核心會按 /sbin/init /etc/init /bin/init 順序尋找init程式,

如果找不到則核心報錯 這裡存在乙個引數 init=/bin/sh 如果啟動時指定了則最後執行/bin/sh

而不會產生核心報錯.也被稱為快速啟動,因為它忽略了很多啟動初始化工作.

啟動init的目的就是為了初始化系統環境,啟動了init就證明了核心已經順利啟動,接下來就由init服務來建立linux使用環境

init做了什麼?它會讀取 /etc/inittab 檔案,根據這個檔案的資訊來進行初始化工作.

會執行三個指令碼 /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local

rc.sysinit 主要的功能用來建立系統的基本環境

啟動udev selinux子系統

udev負責產生 /dev中的檔案,selinux負責增強系統的安全性

設定核心引數 sysctl -p 載入 /etc/sysctl.conf

設定系統時間 將硬體時間設定為系統時間

載入鍵盤和交換分割槽 swapon -a -e

設定主機名,掛載檔案系統,並將根重新掛載為可讀寫的.

載入動態驅動模組

usb裝置與raid & lvm

解除安裝 /initrd/ 目錄

rc 指令碼設定啟動級別 linux中有許多不同的啟動級別,不同的啟動級別會制定不同的服務

根據指定rc的引數會對應執行 /etc/rc.d/rc[0-6].d/ 中的連線指令碼檔案 以s開頭的則啟動

rc.local 前兩個指令碼都是系統至關重要的指令碼,如果我們想在啟動過程中放置一些其他程式

應該使用rc.local指令碼中 因為s99local存在於rc[2-5].d中

三個rc指令碼執行完畢後,就會建立虛擬主控制台 執行 /bin/login 就提供了使用者登陸介面了

如果是圖形 l5級別的話,會啟動x window登入介面

所有的啟動就都已經完畢

使用者環境初始化

輸入使用者名稱和密碼系統驗證,然後會執行

/etc/profile

/etc/profile.d/*.sh $home/.bash_profile

/etc/bashrc

$home/.bashrc

啟動級別

0 關機

1 單使用者

2 多使用者模式但帶網路但不能遠端登入

3 不受限多使用者模式 tui

4 保留

5 圖形模式

6 重新啟動

檢視啟動級別

# runlevel

n 3

n是上次的級別,3是當前級別 也就是說機器開機就是3級別

切換級別

init 5

掛載檔案系統

/etc/fstab

第一項 是要mount的儲存裝置的實體位置或者用卷標

第二項 要掛到哪個目錄位置

第三項 指定要掛載的系統格式

第四項 mount時要設定的狀態,唯讀或defauls

第五項 提供dump功能,在系統dump時需要backup的標誌位,其內定位置是 0

第六項 設定開機時檔案系統是否要check

除了root的檔案系統其必要的check為1 其他視需要而定 預設是0

label=/boot /boot ext3 defaults 1 2

MapReduce詳細流程

1.首先maptask的map方法會生成一堆 k,v 型別的資料,資料會標記好它的分割槽,然後會把這些資料傳入到記憶體的環形緩衝區當中 預設100m 2.當環形緩衝區的記憶體占用達到80 時,從記憶體緩衝區不斷溢位到本地磁碟檔案,可能會溢位多個檔案 在溢位前對資料進行快速排序,排序按照key進行字典...

Django詳細流程

我們以學生管理系統為例,講解一下django的基本操作。首先要設計一下表的結構,這裡就不多解釋 班級表結構 表名 grades 字段 班級名稱 gname 成立時間 gdate 女生總數 ggirlnum 男生總數 gboynum 是否刪除 isdelete 學生表結構 表名 students 字段...

Linux系統安裝nginx詳細流程

cd usr local src tar zxvf pcre 8.39.tar.gz cd pcre 8.39 configure 報錯 error configure error you need a c compiler for c support.解決報錯執行 yum y install gc...