系統(tǒng)啟動(dòng)及故障排錯(cuò)和內(nèi)核管理

(一)Linux組成結(jié)構(gòu)

  • Linux: kernel+rootfs
    kernel: 進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理、驅(qū)動(dòng)程序、文件系統(tǒng)、安全功能
  • rootfs: 程序和glibc
  • 庫:函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述)
  • 過程調(diào)用:procedure ,無返回值
  • 函數(shù)調(diào)用:function
  • 程序:二進(jìn)制執(zhí)行文件

(1)內(nèi)核介紹

(1)Linux 內(nèi)核特點(diǎn):
  • 支持模塊化:.ko (內(nèi)核對(duì)象)
  • 如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等
  • 支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載
(2)組成部分
  • 核心文件:
  • /boot/vmlinuz- VERSION -release
  • ramdisk :輔助的偽根系統(tǒng)
  • CentOS 5: /boot/initrd- VERSION-release.img
  • CentOS 6,7: /boot/initramfs- VERSION -release.img
  • 模塊文件:/lib/modules/ VERSION-release

(二)CentOS6啟動(dòng)流程

Linux啟動(dòng)流程解析圖解

(1) POST自檢:

系統(tǒng)接通電源時(shí)自動(dòng)檢測(cè)CPU,內(nèi)存,主板,顯卡,聲卡,網(wǎng)卡等I/O設(shè)備,如果設(shè)備正常則進(jìn)行下一啟動(dòng)步驟。

(2) MBR引導(dǎo)

MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區(qū),共512個(gè)字節(jié)。前446個(gè)字節(jié)是BootLoder,后 4*16 的 64 個(gè)字節(jié)是存放分區(qū)信息的,最后 2 個(gè)字節(jié)是校驗(yàn)信息,一般是 55AA。

(3) MBR引導(dǎo)GRUB(GRand Unified Bootloader)

Bootloader的工作機(jī)制:bootloader可以訪問文件系統(tǒng),而內(nèi)核則作為文件而存在。bootloader訪問內(nèi)核文件時(shí),是將內(nèi)核文件Vmlinz所在的整個(gè)分區(qū)當(dāng)作根去訪問的。我們常用的內(nèi)核加載器是GRUB(Grand UnifiedBootloader),因此由grub來加載內(nèi)核。

  # grub文件內(nèi)部的所有內(nèi)容
  [root@vinny grub]# ll
  total 280
  -rw-r--r--. 1 root root     63 Jun 19 00:39 device.map
  -rw-r--r--. 1 root root  13428 Jun 19 00:39 e2fs_stage1_5
  -rw-r--r--. 1 root root  12636 Jun 19 00:39 fat_stage1_5
  -rw-r--r--. 1 root root  11780 Jun 19 00:39 ffs_stage1_5
  -rw-------. 1 root root    771 Jun 19 00:39 grub.conf
  -rw-r--r--. 1 root root  11772 Jun 19 00:39 iso9660_stage1_5
  -rw-r--r--. 1 root root  13284 Jun 19 00:39 jfs_stage1_5
  lrwxrwxrwx. 1 root root     11 Jun 19 00:39 menu.lst -> ./grub.conf
  -rw-r--r--. 1 root root  11972 Jun 19 00:39 minix_stage1_5
  -rw-r--r--. 1 root root  14428 Jun 19 00:39 reiserfs_stage1_5
  -rw-r--r--. 1 root root   1341 Nov 15  2010 splash.xpm.gz
  -rw-r--r--. 1 root root    512 Jun 19 00:39 stage1
  -rw-r--r--. 1 root root 126148 Jun 19 00:39 stage2
  -rw-r--r--. 1 root root  12040 Jun 19 00:39 ufs2_stage1_5
  -rw-r--r--. 1 root root  11380 Jun 19 00:39 vstafs_stage1_5
  -rw-r--r--. 1 root root  13980 Jun 19 00:39 xfs_stage1_5

根據(jù)上邊的所有展示內(nèi)容,發(fā)現(xiàn)很多后綴相同的文件device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。一下是我對(duì)這些文件的解讀,說錯(cuò)了請(qǐng)大牛糾正。

  • device.map 可能是啟動(dòng)系統(tǒng)的時(shí)候,一些需要加載的驅(qū)動(dòng)模塊,和分區(qū)信息的地圖。我們現(xiàn)在出門都需要地圖,更何況刻板認(rèn)真的計(jì)算機(jī)。

  • menu.lst 是grub.conf的鏈接文件,當(dāng)我們啟動(dòng)系統(tǒng)的時(shí)候,會(huì)有一個(gè)選擇功能選擇菜單,等下免我會(huì)詳細(xì)介紹。

  • stage:grub引導(dǎo)程序過于龐大,所以在啟動(dòng)過程中分為三個(gè)階段進(jìn)行:第一階段存放在MBR中第二階段存放于內(nèi)核文件系統(tǒng)中。第二階段沒有文件系統(tǒng),怎么訪問呢。這個(gè)時(shí)候出現(xiàn)了stage1_5階段,反正就是想辦法讓第二階段啟動(dòng),所以這個(gè)地方出現(xiàn)了很多stage1_5為后綴的文件。

  • grub.conf 文件參數(shù)意義

     # grub.conf generated by anaconda
     default=0  # 默認(rèn)啟動(dòng)的內(nèi)核title, 0 表示是第一個(gè)  
     timeout=5 # 默認(rèn)等待時(shí)間  
     splashimage=(hd0,0)/grub/splash.xpm.gz  # 指定菜單的背景圖片的路徑。為xpm格式,采用gzip壓縮,只能為14bits色  
     hiddenmenu # 隱藏菜單  
     title CentOS 6 (2.6.32-696.el6.x86_64)  
     # 標(biāo)題名,用戶可自定義
     root (hd0,0)  
     # 指定 grub 的根位置   
     # 指定 kernel 文件的位置,還要指出 root(系統(tǒng)啟動(dòng)后) 的位置,掛載方式 ro,這項(xiàng)很關(guān)鍵。  
             # 加載后會(huì)啟動(dòng) init 進(jìn)程。
             kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0861b596-c806-4895-97b3-2ef308bdc6a3 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
              # 在內(nèi)核啟動(dòng)過程中裝載根文件系統(tǒng)時(shí)有用  
             initrd /initramfs-2.6.32-696.el6.x86_64.img
    

(4)引導(dǎo)加載器程序GRUB

(1)grub legacy

GRUB是bootloader階段的一個(gè)程序,這是Centos中最常用的引導(dǎo)程序,CentOS 6安裝的是grub legacy。

CentOS 6的grub legacy

按e:進(jìn)入編輯模式,用于編輯菜單
編輯模式

然后按c: 進(jìn)入命令模式,交互式接口
交互式界面

這個(gè)界面就和上邊聯(lián)系起來了 ,假如你不會(huì)寫的話,可以敲help就可以查看幫助。
grub>后邊需要跟上本文中grub.conf 文件參數(shù)意義里邊的內(nèi)容。

(5) 進(jìn)入kernel

在GRUB中選擇對(duì)應(yīng)的kernel進(jìn)入,然后kernel會(huì)對(duì)自身進(jìn)行初始化,始化系統(tǒng)中各設(shè)備并做相關(guān)的配置工作,其中包括CPU、I/O、存儲(chǔ)設(shè)備等。運(yùn)行用戶空間的第一個(gè)應(yīng)用程序,在CentOS 6上是init,在CentOS 7上是Systemd。

(1)讀取/etc/inittab來讀取默認(rèn)級(jí)別
    # Default runlevel. The runlevels used are:

    #   0 - halt (Do NOT set initdefault to this)
    #0:關(guān)機(jī)
    #   1 - Single user mode
    #1:?jiǎn)斡脩裟J?root, 無須登錄), single, 維護(hù)模式
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #2: 多用戶模式,會(huì)啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式;
    #   3 - Full multiuser mode
    #3:多用戶模式,正常模式;文本界面;
    #   4 - unused
    #4:預(yù)留級(jí)別;可同3級(jí)別;
    #   5 - X11
    #5:多用戶模式,正常模式;圖形界面;
    #   6 - reboot (Do NOT set initdefault to this)
    #6:重啟
    id:5:initdefault:

注意:上邊的最后一行是制定每次啟動(dòng)時(shí)后的默認(rèn)啟動(dòng)級(jí)別,修改它就是修改你的默認(rèn)啟動(dòng)級(jí)別。
如果要查看當(dāng)前系統(tǒng)運(yùn)行的init級(jí)別可使用runlevel或者who -r

(2)執(zhí)行初始化系統(tǒng)腳本 /etc/rc.d/rc.sysinit 來初始化腳本

這個(gè)腳本里邊有很多內(nèi)容,這里就不一一列舉了,只是把它做的事情給列出來。

    # 獲取網(wǎng)絡(luò)環(huán)境與主機(jī)類型。首先會(huì)讀取網(wǎng)絡(luò)環(huán)境設(shè)置文件"/etc/sysconfig/network",獲取主機(jī)名稱與默認(rèn)網(wǎng)關(guān)等網(wǎng)絡(luò)環(huán)境。  
    # 打印文本歡迎信息。  
    # 掛載/etc/fstab文件中定義的其它文件系統(tǒng)。  
    # 激活swap  
    # 檢測(cè)根文件系統(tǒng),并以讀寫方式重新掛載  
    # 決定是否啟動(dòng)SELinux和udev。  
    # 接口設(shè)備的檢測(cè)  
    # 用戶自定義模塊的加載。用戶可以再"/etc/sysconfig/modules/*.modules"加入自定義的模塊,此時(shí)會(huì)加載到系統(tǒng)中。  
    # 加載核心的相關(guān)設(shè)置。按"/etc/sysctl.conf"這個(gè)文件的設(shè)置值配置功能。  
    # 設(shè)置系統(tǒng)時(shí)間(clock)。  
    # 設(shè)置終端的控制臺(tái)的級(jí)別。  
    # 設(shè)置raid及LVM等硬盤功能。  
    # 以方式查看檢驗(yàn)磁盤文件系統(tǒng)。  
    # 進(jìn)行磁盤配額quota的轉(zhuǎn)換。  
    # 重新以讀取模式載入系統(tǒng)磁盤。  
    # 啟動(dòng)quota功能。  
    # 啟動(dòng)系統(tǒng)隨機(jī)數(shù)設(shè)備(產(chǎn)生隨機(jī)數(shù)功能)。  
    # 清楚啟動(dòng)過程中的臨時(shí)文件。  
    # 將啟動(dòng)信息加載到"/var/log/dmesg"文件中。
(3)然后執(zhí)行 /etc/rc.d/rc 腳本

當(dāng)你選擇默認(rèn)模式為3的時(shí)候,默認(rèn)會(huì)讀取/etc/rc.d/rc3.d 下的所有腳本,來控制系統(tǒng)啟動(dòng)的時(shí)候啟動(dòng)或者關(guān)閉哪些服務(wù)。這里面的腳本大致分為以S 開頭的和以 K 開頭的腳本。 S 代表開機(jī)時(shí)啟動(dòng)的,K 表示開機(jī)時(shí)不啟動(dòng)。
排序的說明:服務(wù)的啟動(dòng)可能會(huì)產(chǎn)生依賴的情況。所以無法避免的會(huì)出現(xiàn)排序的情況。比如說:S20S198來說會(huì)先執(zhí)行S199后執(zhí)行S22,是先S2S1比較,之后在比較S20S19以此類推。數(shù)字越小越先運(yùn)行;數(shù)字越小的服務(wù),通常為依賴到別的服務(wù);

  • chkconfig命令:查看每個(gè)服務(wù)對(duì)應(yīng)級(jí)別的開關(guān),以及設(shè)置相關(guān)服務(wù)對(duì)應(yīng)級(jí)別上的開關(guān);
  • 增加服務(wù):chkconfig --add srv_name 可以將自己寫的一些腳本,讓此命令統(tǒng)一管理。
  • 刪除服務(wù):chkconfig --del srv_name 將服務(wù)刪除,意思就是服務(wù)不由chkconfig這種機(jī)制來管理
  • chkconfig srv_name {on|off}設(shè)置服務(wù)開機(jī)是否自啟動(dòng),默認(rèn)管理的級(jí)別是2345. 指定默認(rèn)級(jí)別,可以與其他選項(xiàng)一起使用

注意:正常級(jí)別下,最后啟動(dòng)的一個(gè)務(wù):S99local指向了/etc/rc.d/rc.local腳本,且有又想開機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于/etc/rc.d/rc.local文件中;
【注意】:正常級(jí)別下,最后啟動(dòng)一個(gè)服S99local沒有鏈接至/etc/rc.d/init.d一個(gè)服務(wù)腳本,而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫為服務(wù)腳本放置于/etc/rc.d/init.d/目錄,且又想開機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于/etc/rc.d/rc.local文件中。

(6) 手工配置系統(tǒng)啟動(dòng)配置

(1)系統(tǒng)服務(wù)腳本的特點(diǎn)
  • 基本都可以提供start|stop|restart|status這幾個(gè)狀態(tài)值的接收
  • 服務(wù)腳本存放位置,所有的系統(tǒng)服務(wù)腳本都放在/etc/rc.d/init.d文件夾中
    系統(tǒng)服務(wù)腳本
(2)服務(wù)腳本的編寫格式

格式詳解

其中,有三行格式是必須要寫上的#!/bin/bash,#/chkconfig,#description
# chkconfig: runlevels SS KK【SS:表示開始運(yùn)行的次序,KK:表示關(guān)閉程序的次序,-表示都不啟動(dòng)】 因此可以手動(dòng)編寫系統(tǒng)服務(wù):

  • (1)把服務(wù)腳本放置/etc/init.d目錄下
  • (2)使用chkconfig –add 添加到系統(tǒng)服務(wù)
  • (3)重啟系統(tǒng)讓服務(wù)生效
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,873評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,266評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,482評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,846評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,025評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,279評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,751評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,016評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容