linux系統啟動流程詳解

一、 為什么要研究linux系統啟動:

    或許有人會說,等它開機就好了,為什么還要研究它開機流程呢,其實如果服務器運行很好又沒有人為的誤操作等,或許不用研究,但是為了能在系統出問題后第一時間的修復它,又或者你忘記了root密碼等情況時就非常有必要研究一下linux的開機流程了,因為只有知道了它是如何運作的,才能讓它更好的服務與人類,廢話不多說,正文開始

二、系統啟動流程:

    不同的版本的linux系統開機可能不同,但是總的來說,大同小異,下面就以centos6.8的系統為例,介紹linux的開機過程。

post加電自檢—> MBR引導–> GRUB引導—>加載內核—>啟動init—>各種初始化腳本運行—>執行/bin/login —>開機過程結束

1111.png

1.   加電自檢:  

    加電自檢post(power on system test):加電自檢主要是檢查各硬件是否存在并能正常運行,包括cpu,內存,硬盤,cpu風扇,有的甚至包括鍵盤鼠標的外設的檢測,這一段名叫BIOS的程序是存放在CMOS的硬件芯片上面,加電就是給CMOS 加電,由于CMOS是rom芯片,所以還有一個單獨的ram芯片用來存放它的配置信息,這就是主板為什么要放一塊電池的原因了。

2.   選擇啟動順序加載MBR(master boot recoder)啟用bootloader程序加載內核:

    經過一系列的硬件檢測完畢后,并順利通過后,就要加載MBR了,MBR存放在第一個可啟動硬盤的第一個分區內,大小為512byte,這512個字節當中前446byte就是bootloader,以及隨后的64字節的分區表,2byte分區結束標志,第一部分的bootloader部分就是主引導記錄的第一部分,因為引導程序功能較為強大并且會有驅動文件,是446byte字節能存放,后續將介紹它的其它部分。第一部分的bootloader程序會調用512個字節之后的一部分扇區中的數據,這些數據包括/boot分區的驅動,因為軟件和硬件的連接必須通過驅動的翻譯,此時通過/boot分區的驅動,加載好了/boot,該分區中包含了grub程序的第二部分,和內核鏡像文件,還有就是initramfs文件,如果此時加載  / 分區的話,因為 / 分區不一定和 /boot 分區是同一種文件系統,不同的文件系統需要的文件系統的驅動是不同的,所以grub會將initram文件加載至內存當中解壓,并且此時要加載內核文件,解壓后會在該文件系統形成一個類似于 / 的文件系統 在此時的 “/” 中的lib中有系統真正的 / 的各種文件系統驅動,此時就可以加載根文件系統了

3.   啟動init以及各種啟動腳本:

    加載好根文件系統就要啟動用戶的第一個執行程序/sbin/init*, 其中包括/etc/inittab ,/etc/init/*.conf(在centos5中是直接一個/inittab文件,順序執行,速度較慢,到了6時許多被依賴的程序服務等先執行,并且沒有依賴關系的也同時執行,到了7時配置文件變成了/usr/lib/systemd/* 此時系統的啟動就已經非??炝耍S多服務都可以同時啟動,即使是被依賴的也可以并行啟動,加快了開機速度)

  init文件主要定義了下面的幾項:

(1) 開機啟動級別選擇0-6共七個:

            0:關閉所有服務關機

            1: 維護模式的單用戶模式

            2: 維護模式的多用戶模式

            3:正常級別,多用戶模式

            4:未定義

            5:正常級別,帶有圖形化的多用戶模式

            6:關閉所有服務重啟

            注:可以使用runlevel,或者who -r 命令檢查當前系統的運行級別

 

(2)   使用/etc/rc.d/rc.sysinit 進行系統初始化

            a)     根據配置文件進行設置主機名

            b)     打印文本歡迎信息

            c)     激活Selinux和udev

            d)     掛載所有定義在/etc/fstab文件的文件系統

            e)     激活swap分區

            f)      檢測根文件系統并實現以讀寫掛載根

            g)    設置系統時鐘

            h)    根據/etc/sysctl.conf文件設定內核參數

            i)      激活LVM和RAID設備

            j)     加載額外的設備驅動

            k)    清理操作

 

(3)   執行選擇了開機啟動的級別下相應的腳本/etc/rc.d/rc#.d

    /etc/rc.d/rc#.d/ 該目錄的執行需要根據/etc/init/rc 文件選擇是否啟動什么服務,在rc文件當中執行一個for循環先執行K*的文件的服務進行stop,S開頭的服務啟動在相應的啟動級別下面都是許多個軟鏈接文件,這些文件指向/etc/rc.d/下面的服務腳本,并且這些軟鏈接文件分別是以S開頭和K開頭的文件,S表示在該運行級別要啟動的服務,K開頭的表示該級別不需要啟動的服務,有人會說,在開機是該服務就沒有啟動,為什么還要停一次呢?本來服務就沒有啟動,停它干啥?確實是這樣,但是你有沒有想過,假如在運行級別3已經開啟了該服務,但是你想要切換至運行級別5,而5的級別恰巧不需要啟動該服務怎么辦?當然應該停掉了!所以,在rc腳本中for循環里使用了判斷如果在/var/lock/subsys/下面有該服務時,循環執行continue,跳過啟動語句執行下一次循環,知道循環結束,/var/lock/subsys/目錄中只要啟動一個服務在這個鎖文件目錄中就會產生一個文件。這樣通過執行/etc/init/init#.d/ 下面的所有服務腳本,就可以啟動所有系統的腳本了。

    如果自己想定義一個腳本想要像是系統服務那樣啟動怎樣做?

在/etc/init/init.d/下面有大量的服務腳本,可以參考,要想系統定義的腳本那樣包括#!/bin/bash 這一行的shell定義,chkconfig定義,以及描述相關的description:將寫好的腳本放在該目錄下面使用chkconfig –{add|del} 腳本名字添加或者刪除腳本。

附:服務腳本頭部示例:

[root@cnode6_8 init.d]# head -n 12 nfs
#!/bin/sh
#
# nfs           This shell script takes care of starting and stopping
#               the NFS services.
#
# chkconfig: - 30 60
# description: NFS is a popular protocol for file sharing across networks.
#              This service provides NFS server functionality, which is \
#              configured via the /etc/exports file.
# probe: true
# config: /etc/sysconfig/nfs

當然在也/etc/rc.local 或者/etc/rc.d/rc.local兩個文件中定義自己的腳本執行路徑,只不過在該文件中定義的文件執行優先級為最低的,要等到所有的系統服務腳本執行完,才能執行

(4)   配置ctrl+alt+del鍵的功能,建議關閉此功能防止誤操作重啟服務器。

該配置在centos5中就直接在/etc/inittab中,到了6之后可以通過/etc/inittab文件的注釋看到該配置已經轉移到了/etc/init/control-alt-delete.conf當中將該行注釋掉即可

(5)   配置不斷電系統pf,pr兩種機制

這兩種機制是為了保護系統,在系統突然斷電時,保證系統能正常關機,但是有可能是因為電源不穩定而突然斷電,然后再很短的時間內電源再次有了電,此時就應該取消關機,默認是在2min之后關機,但是在2min之內有電后會取消關機

(6)   啟動mingetty 6個終端

在6個終端中因為有前面定義respawn關鍵字,所以這6個終端變成了打不死的小強,當你用kill將它們其中一個殺死后,系統會換一個進程號重新啟動它

(7)   如果選擇5級別,則會啟動 /etc/X11/prefdm -nodaemon啟動圖形化界面

   

至此系統已經能正常進入啟動狀態啦!

 

原創文章,作者:jack_cui,如若轉載,請注明出處:http://www.www58058.com/45823

(0)
jack_cuijack_cui
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • 第三周n28

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d ” ” -f 1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 who | tail -1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 cat /etc/passwd | …

    Linux干貨 2017-12-17
  • nginx模塊–proxy,upstream,header,stream

    ngx_http_proxy_module     proxy模塊的作用:將請求傳遞給對應的服務器     示例:     location / {        &nb…

    Linux干貨 2016-10-29
  • linux發展簡史

    前言 為什么要寫這么一篇文章呢?我發現我雖然知道linux的一些知識,卻不知道linux方面的歷史,所以今天寫一篇關于linux方面歷史的文章,用來總結這段時間自己所學習到的關于linux的歷史與linux的知識。關于說起linux的歷史,就不得不介紹計算機的歷史,與其他相關操作系統的一些歷史,所以本文中的會簡單介紹Linux與其他操作系統的關系。主要講li…

    Linux干貨 2017-02-16
  • fstab配置文件詳解

    /etc/fstab配置文件詳解 /etc/fstab:記錄了計算機上硬盤分區的相關信息,啟動Linux時,檢查分區的fsck命令,掛載分區的mount命令,都需要fstab這個文件的信息,來正確的檢查和掛載硬盤,而且這個硬盤需要root用戶權限才能編輯 詳解: 設備名稱   掛載點  分區的類型  掛載選項  dump選項  fsck選項 設備名稱: 可以…

    Linux干貨 2017-04-23
  • linux操作系統rpm軟件包管理

    軟件包管理 軟件包運行環境: API:Application Programming Interface     使用標準:POSIX:     源代碼運行步驟:預處理(如處理注釋)—>編譯成匯編代碼—>鏈接其他庫文件 ABI:applicatio…

    2016-08-22

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 13:15

    寫的很詳細,圖片是自己畫的嗎?很不錯哦,

欧美性久久久久