Linux 啟動(dòng)流程筆記

我說(shuō)的不一定是正確的,卻是這樣理解的

內(nèi)核的基本功能

  • 進(jìn)程管理
  • 內(nèi)存管理
  • 文件系統(tǒng)
  • 網(wǎng)絡(luò)管理
  • 安全管理
  • 驅(qū)動(dòng)程序
  • ……

計(jì)算機(jī)的啟動(dòng)流程

POST --> BIOS --> MBR --> kernel --> initrd --> (ROOTFS)/sbin/init

詳解啟動(dòng)過(guò)程

  1. 硬件自檢(POST)
    計(jì)算機(jī)通電后自檢硬件是否滿足運(yùn)行的基本條件(有沒(méi)有短路或者設(shè)備故障等錯(cuò)誤),這叫做“硬件自檢(Power-On Self-Test),縮寫為POST”究恤,如硬件出現(xiàn)問(wèn)題會(huì)發(fā)出滴滴聲叶雹,如果沒(méi)有問(wèn)題將顯示主板或硬件廠商信息

  2. BIOS 引導(dǎo)
    自檢完成后POST將控制權(quán)交由BIOS,BIOS讀取固化在主板上ROM芯片上的程序乍迄,它可以從CMOS中讀寫系統(tǒng)的設(shè)置和用戶自定義的啟動(dòng)信息啟動(dòng)有一項(xiàng)就是啟動(dòng)順序(Boot Sequence)

  3. MBR(bootloader)
    BIOS根據(jù)啟動(dòng)次序加載第一個(gè)啟動(dòng)項(xiàng)(如果第一個(gè)啟動(dòng)項(xiàng)啟動(dòng)失敗不會(huì)自動(dòng)啟動(dòng)第二個(gè))弧呐,接著加載一個(gè)硬盤的MBR上的bootloader闸迷,每個(gè)硬盤的前514個(gè)字節(jié)是MBR信息(第一個(gè)扇區(qū)),前446個(gè)字節(jié)是主引導(dǎo)記錄俘枫,后64個(gè)字節(jié)是分區(qū)表信息

  4. kernel & initrd(加載內(nèi)核)
    MBR 根據(jù)主引導(dǎo)記錄引導(dǎo)分區(qū)后加載內(nèi)核腥沽,內(nèi)核在加載的時(shí)候可能需要加載當(dāng)前硬盤的驅(qū)動(dòng),不過(guò)驅(qū)動(dòng)卻在文件系統(tǒng)中存放鸠蚪,如果要加載文件系統(tǒng)又要先掛載驅(qū)動(dòng)(有點(diǎn)繞)今阳,就是在轉(zhuǎn)圈圈。這個(gè)時(shí)候就需要initrd了茅信,他是一個(gè)運(yùn)行在內(nèi)存中的文件系統(tǒng)(這種不要驅(qū)動(dòng)吧)盾舌,系統(tǒng)在安裝完成后必定知道當(dāng)前文件系統(tǒng)類型,之后生成initrd蘸鲸,內(nèi)核啟動(dòng)妖谴,硬件探測(cè)完畢,內(nèi)核參數(shù)隱射文件完成酌摇,加載驅(qū)動(dòng)膝舅,切換到真正的文件系統(tǒng)

  5. 執(zhí)行init 程序
    內(nèi)核初始化完畢嗡载,執(zhí)行系統(tǒng)服務(wù),用戶自定義腳本仍稀,配置環(huán)境變量鼻疮,自此操作系統(tǒng)啟動(dòng)完畢

Linux 內(nèi)核

內(nèi)核的設(shè)計(jì)風(fēng)格
  • 單內(nèi)核:將眾多模塊服務(wù)作用于內(nèi)核中,內(nèi)核大(自行搜索特性)
    linux屬于單內(nèi)核琳轿,不過(guò)他卻又有微內(nèi)核的特性,他將需要編譯的模塊功能編譯進(jìn)內(nèi)核耿芹,將非必須要的模塊啟動(dòng)后動(dòng)態(tài)加載進(jìn)內(nèi)核

內(nèi)核模塊位置/lib/modules/"內(nèi)核版本號(hào)命名的目錄"

  • linux 單內(nèi)核(多線程支持較差)

    • 核心 + ko(kernel object)內(nèi)核模塊
  • 微內(nèi)核:各種服務(wù)動(dòng)態(tài)加載插入崭篡,內(nèi)核小

    • windows是微內(nèi)核
    • solaris 微內(nèi)核
內(nèi)核的組成
  • 核心:/boot/vmlinuz-version
  • 內(nèi)核模塊(ko;kernel object):/lib/modules/version
Kernel初始的過(guò)程
  • 設(shè)備探測(cè)
  • 驅(qū)動(dòng)初始化(可能會(huì)用initrd(initramfs)文件中裝載驅(qū)動(dòng)模塊)
  • 以只讀方式掛載根文件系統(tǒng)
  • 裝載第一個(gè)進(jìn)程(PID:1)

init程序(/etc/inittab配置文件)

Redhat6:init程序只有一行,其他的文件以*.conf在/etc/init目錄下存放

centos6.jpg

Redhat5:init配置都存放這一文件中吧秕,啟動(dòng)腳本


centos5.jpg
init文件及配置文件

/sbin/init:(/etc/inittab)只是一個(gè)程序琉闪,多個(gè)組織設(shè)計(jì)開發(fā)

  • upstart:有ubuntu開發(fā),d-bus砸彬,event-driven
  • systemd:多道并行啟動(dòng)

upstart啟動(dòng)init程序配置文件格式

init5 配置文件格式.jpg

冒號(hào)隔開的4個(gè)段
idrunlevelsactionprocess

  • id:標(biāo)識(shí)符颠毙,只要不跟別的行一樣就行
  • runlevels:在哪個(gè)級(jí)別運(yùn)行
  • action:在什么情況下執(zhí)行
    • initdefault:設(shè)置默認(rèn)運(yùn)行級(jí)別
    • sysinit:系統(tǒng)初始化
    • wait:等待級(jí)別切換至此級(jí)別時(shí)執(zhí)行
    • powerfail:斷電時(shí)執(zhí)行
    • powerokwait:來(lái)電時(shí)執(zhí)行
    • respawn:一旦程序終止重新啟動(dòng)
  • process: 要運(yùn)行的程序
系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit大概
  1. 激活udev和selinux
  2. 根據(jù)/etc/sysctl.conf文件,來(lái)設(shè)定內(nèi)核參數(shù)
  3. 設(shè)定系統(tǒng)時(shí)鐘
  4. 裝載鍵盤映射
  5. 啟動(dòng)交換分區(qū)
  6. 設(shè)置主機(jī)名
  7. 根文件系統(tǒng)檢測(cè)砂碉,并以讀寫方式重新掛載
  8. 激活RAID和LVM設(shè)備
  9. 啟動(dòng)磁盤配額
  10. 根據(jù)/etc/fstab蛀蜜,檢查并掛載其文件系統(tǒng)
  11. 清理過(guò)期的鎖和PID文件

運(yùn)行級(jí)別(0-6)

啟動(dòng)服務(wù)不同

  • 0:halt
    關(guān)機(jī)
  • 1:single user mode
    直接以管理員身份切入犹菇,類似windows安全模式(單用戶模式)
  • 2:multi user mode
    不加載 NFS殴玛,類似 windows不加載網(wǎng)絡(luò)映射
  • 3:multi user mode
    text mode CLI怯邪,文本字符界面
  • 4:reseved
    保留級(jí)別
  • 5:multi user mode
    graphic mode X windows圖形
  • 6:reboot
    重啟

查看運(yùn)行級(jí)別

runlevel
who -r

查看內(nèi)核release號(hào)

uname -r

引導(dǎo)程序

bootloader(MBR) 引導(dǎo)程序:

  • LILO:LInux LOader (自行百度)
  • GRUB:GRand Unified Bootloader
    • Stage1: MBR
      將第一部分安裝日MBR中 主要為了引導(dǎo)第二階段
    • Stage1_5: 識(shí)別文件系統(tǒng)
      主要識(shí)別操作系統(tǒng)安裝完成后文件系統(tǒng)類型
    • Stage2: /boot/grub/
      執(zhí)行init程序偽根初始化港柜,內(nèi)核參數(shù)映射悬而,我上面說(shuō)到的initrd程序

腳本

Linux 服務(wù)類腳本

linux服務(wù)類腳本都遵循SysV風(fēng)格材义,服務(wù)腳本位于/etc/rc.d/init.d 目錄中腳本支持參數(shù)start|stop|restart|status 一定支持參數(shù)

服務(wù)類腳本特性
每個(gè)腳本文本開頭部分都有

服務(wù)腳本特性.jpg

chkconfig: runlevels SS KK
當(dāng)chkconfig命令來(lái)為此腳本在rcN.d目錄創(chuàng)建鏈接時(shí)蠕蚜,runlevels表示默認(rèn)創(chuàng)建S開頭的鏈接梢灭,除此之外的級(jí)別默認(rèn)創(chuàng)建為K開頭的鏈接S后面的啟動(dòng)優(yōu)先級(jí)SS所表示的數(shù)字饼灿;K后面的關(guān)閉有限次序?yàn)镵K所表示的數(shù)字
description:用戶說(shuō)明此腳本的簡(jiǎn)單功能 \ 表示續(xù)行

chkconfig 命令
--list: 查看所有獨(dú)立守護(hù)服務(wù)啟動(dòng)設(shè)定幕侠;獨(dú)立守護(hù)進(jìn)程
--add SERVICE_NAME: 以SysV風(fēng)格創(chuàng)建鏈接文件
--del SERVICE_NAME: 刪除鏈接
[--level RUNLEVELS] SERVICE_NAME {on|off} : 設(shè)置級(jí)別(如果省略級(jí)別指定,默認(rèn)為2345級(jí)別)

Linux 啟動(dòng)最后執(zhí)行腳本

/etc/rc.d/rc.local: 系統(tǒng)最后啟動(dòng)的一個(gè)服務(wù)碍彭,準(zhǔn)確說(shuō)晤硕,應(yīng)該執(zhí)行的一個(gè)腳本

inittab定義功能概述
  1. 設(shè)定默認(rèn)運(yùn)行級(jí)別
  2. 運(yùn)行系統(tǒng)初始化腳本
  3. 運(yùn)行指定運(yùn)行級(jí)別對(duì)應(yīng)的目錄下的腳本
  4. 設(shè)定ctrl+alt+del組合鍵的操作
  5. 定義ups電源在電源故障/恢復(fù)時(shí)執(zhí)行的操作
  6. 啟動(dòng)虛擬終端(2345級(jí)別)
  7. 啟動(dòng)圖形終端(5級(jí)別)

內(nèi)核參數(shù)映射

用戶控件訪問(wèn),監(jiān)控內(nèi)核的方式

查看/proc硕旗,/sys

/proc/sys: 此目錄中的文件很多是可以讀寫的窗骑,/proc下其他文件為只讀的
/sys/:某些文件是可寫的

設(shè)定內(nèi)核參數(shù)的方法

echo VALUE > /proc/sys/TO/SOMEFILE
sysctl -w PROPERTY.PROPERTY=VALUE ==>/proc/sys目錄下文件
-p:通知內(nèi)核重讀配置文件
-a:顯示所有內(nèi)核參數(shù)及其值

內(nèi)核、模塊

內(nèi)核模塊一般放于/lib/modules/LINUX_VERSION/ 目錄下

這種辦法能立即有效漆枚,但無(wú)法永久有效
永久有效,但不能永久有效: /etc/sysctl.conf 配置使之永久有效

內(nèi)核模塊管理

lsmod:裝載模塊

modprobe MOD_NAME:裝載模塊
modprobe -r MOD_NAME:卸載模塊

modinfo MOD_NAME:查看模塊具體信息

insmod /PATH/TO/MODULES_NAME:裝載模塊
rmmod MOD_NAME:卸載模塊

depmod /PATH/TO/MODULES_DIR: 自動(dòng)顯示一欄

  • 內(nèi)核中的功能除了核心功能以外创译,在編譯時(shí),大多功能都有三種選擇
    1. 不適用此功能(不編譯進(jìn)內(nèi)核或動(dòng)態(tài)模塊)
    2. 編譯成內(nèi)核模塊
    3. 編輯進(jìn)內(nèi)核

手動(dòng)編譯內(nèi)核

  • make gconfig:Gnome桌面環(huán)境使用墙基,需要安裝圖形開發(fā)庫(kù)
  • make kconfig:KDE桌面環(huán)境使用软族,需要安裝圖形開發(fā)庫(kù)
  • make menuconfig: 文本打開
    • make
    • make modules_install: 先編譯模塊
    • make install:再編譯內(nèi)核

screen命令: 直接打開一個(gè)新:
-ls: 顯示已經(jīng)建立的屏幕
-r ID:還原回某屏幕
ctrl+a松開后按d: 拆除屏幕
exit:退出

二次編譯時(shí)清理刷喜,清理前,如果有需要立砸,請(qǐng)備份配置文件.config

make clean
make mrproper:連帶清理配置文件
mkinitrd initrd文件路徑 內(nèi)核版本號(hào)
mkinitrd /boot/initrd-uname -r.img uname -r

chroot: chroot /path/to/temproot 切換根
ldd /path/to/binary_file:顯示一個(gè)二進(jìn)制文件依賴的共享庫(kù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掖疮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颗祝,更是在濱河造成了極大的恐慌浊闪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螺戳,死亡現(xiàn)場(chǎng)離奇詭異搁宾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)倔幼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門盖腿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人损同,你說(shuō)我怎么就攤上這事翩腐。” “怎么了膏燃?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵茂卦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蹄梢,道長(zhǎng)疙筹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任禁炒,我火速辦了婚禮而咆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幕袱。我一直安慰自己暴备,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布们豌。 她就那樣靜靜地躺著涯捻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪望迎。 梳的紋絲不亂的頭發(fā)上障癌,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音辩尊,去河邊找鬼涛浙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轿亮。 我是一名探鬼主播疮薇,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼我注!你這毒婦竟也來(lái)了按咒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤但骨,失蹤者是張志新(化名)和其女友劉穎励七,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奔缠,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呀伙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了添坊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箫锤,死狀恐怖贬蛙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谚攒,我是刑警寧澤阳准,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站馏臭,受9級(jí)特大地震影響野蝇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜括儒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一绕沈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帮寻,春花似錦乍狐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烫罩,卻和暖如春惜傲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贝攒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工盗誊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓浊伙,卻偏偏與公主長(zhǎng)得像撞秋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚣鄙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355