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/* 此時系統的啟動就已經非??炝?,許多服務都可以同時啟動,即使是被依賴的也可以并行啟動,加快了開機速度)

  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 11:17
下一篇 2016-09-13 11:17

相關推薦

  • ocata openvswtich

      一、Controller配置1、安裝軟件 # yum –enablerepo=centos-openstack-ocata,epel -y install openstack-neutron openstack-neutron-ml2 2、修改配置文件/etc/neutron/neutron.conf [DEFAULT]core_p…

    2018-01-22
  • DNS and BIND 配置指南

    前言     說來接觸Linux也有一年了,BIND是我曾經學習RH系Linux接觸的第一個服務,對我有著莫大的意義,當初差點因為這個服務難以配置而放棄Linux,今天學完馬哥的bind相關系列視頻之后,寫一篇DNS and BIND的基礎到進階。 一、DNS的基礎知識 DNS是什么? DNS(Domain Name …

    Linux干貨 2016-03-21
  • 通用二進制安裝MySQL(MariaDB)

    一、前言     MySQL是一個關系型數據庫管理系統,是最流行的關系型數據庫管理系統,由于其體積小、速度快、總體擁有成本低,并且之前是完全開源,所以大受歡迎。但由于后面MySQL賣給了SUN,隨后SUN被Oracle收購,雖然也有開源免費版本,但是很多功能都需要另外購買商業版本,導致現在MySQL使用份額逐漸減少。所…

    Linux干貨 2015-10-15
  • rsyslog將日志記錄于MySQL中,并用loganalyzer進行分析日志

    1、首先來安裝lamp環境的支持,與其相關的軟件包      # yum -y install rsyslog-mysql mariadb-server php php-mysql php-gd httpd       說明:rsyslog-mysql在數據庫中生成一個庫文件,但這個文件需…

    Linux干貨 2013-09-03
  • 以水滸為例解釋文件權限

    關于文件權限的內容學起來比較繞,稍不注意就會把自己繞暈,這時候不如找一個例子來記憶,這樣記起來比較容易而且還會記憶深刻,接下來就以水滸為例解釋下關于文件權限方面的內容 桃園三結義,兄弟三人組成一個組,選劉備當大哥,兄弟三人都在這個組里 兄弟三人還是居無定所的,要給劉關張兄弟三人造個房子,給兄弟三人一個容身之所,而且給兄弟三人一人一個房間   但建好…

    2017-07-30
  • 系統基礎之文件查找工具find

    文件查找:        在運維人員操作系統時,要接觸大量的文件,為了避免忘記文件存放位置的尷尬,就需要我們有一種文件查找工具的幫忙,下面是兩個文件查找工具的詳解,locate以及find,分別分享給大家. 第一款工具: Locate locate – find files by name loc…

    Linux干貨 2016-08-16

評論列表(1條)

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

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

欧美性久久久久