linux系統啓動首先從BIOS開始檢測硬件信息=》開始啓動引導程序。讀取MBR(磁盤上第0磁道第一個扇區)也就是Master Boot Record 即主引導記錄。MBR記錄了預啓動信息和分區表信息。而後將grub(做用:設定內核映象在磁盤分區的位置)信息複製到內存中。爲啓動內核作準備。===》加載內核。內核初始化產生一個PID爲1的init進程。node
***這裏須要注意的安裝win+linux雙系統。先安裝w 而後linux。由於 win的引導程序會覆蓋其它系統的引導程序。形成linux 的grub缺失,沒法啓動***
linux
因爲內核運行起來是毫無用途的,須要一個系統可以定義,管理和控制init進程的行爲,並負責組織和運行完成初始化的工做,從而讓系統進入一個用戶設定的運行模式中,這個系統就是init系統。centos
init(爲英語:initialization的簡寫)是 unix和 類Unix 系統中用來產生其它全部進程的程序。它以守護進程的方式存在,其進程號爲1。Linux系統在開機時加載Linux內核後,便由Linux內核加載init程序,由init程序完成餘下的開機過程。服務器
init 的運行方式歷經: sysvinit , upstart , systemd
併發
早期的linux系統的init運行方式兼容UNIX system V(Unix系統的一個版本)下init運行方式。異步
System V 下init的運行方式:ide
System V init 檢查 '/etc/inittab' 文件中是否含有 'initdefault' 項。 這告訴 init 系統是否有一個默認的運行。System V init 描述了 8中狀態 。0-6 和S 或s .linux 設置了6各級別:#cat /etc/inittab
工具
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)學習
unix system v 默認是 3級別啓動。 linux服務器大多版本默認是3級別。而桌面版本通常爲5.(圖形化界面)。如何查看 : $ runlevel 或 $ who -r.測試
Sysvinit 的優勢是概念簡單。Service 開發人員只須要編寫啓動和中止腳本,概念很是清楚;將 service 添加/刪除到某個 runlevel 時,只須要執行一些建立/刪除軟鏈接文件的基本操做;這些都不須要學習額外的知識或特殊的定義語法(UpStart 和 Systemd 都須要用戶學習新的定義系統初始化行爲的語言)。
其次,sysvinit 的另外一個重要優勢是肯定的執行順序:腳本嚴格按照啓動數字的大小順序執行,一個執行完畢再執行下一個,這很是有益於錯誤排查。UpStart 和 systemd 支持併發啓動,致使沒有人能夠肯定地瞭解具體的啓動順序,排錯不易。
2006年的時候Ubuntu 打算把系統用在筆記本上。最大的困境是:sysvinit 對移動設備(USB 設備的設備)的熱插拔支持不夠。因而開發了upstart 基於事件機制.好比 U 盤插入 USB 接口後,udev 獲得內核通知,發現該設備,這就是一個新的事件。UpStart 在感知到該事件以後觸發相應的等待任務,好比處理/etc/fstab 中存在的掛載點。採用這種事件驅動的模式,upstart 完美地解決了即插即用設備帶來的新問題。UpStart採用了異步方式 能夠:更快地啓動系統;當新硬件被發現時動態啓動服務;硬件被拔除時動態中止服務。這些特色使得 UpStart 能夠很好地應用在桌面或者便攜式系統中,處理這些系統中的動態硬件插拔特性。可是UPstart沒有徹底擺脫 runlevel機制。只是在兼容的基礎上相應的優化了runlevel機制。
爲了減小系統啓動時間,systemd 的目標是:儘量啓動更少的進程,儘量將更多進程並行啓動,減小了啓動進程間的依賴。沒有必要的進程能夠在須要使用的時候才啓動。此外systemd開創了新的管理體系。之前運行級別(runlevel)的概念被新的運行目標(target)所取代。target的命名體系相似於「multi-user.target"和原來的運行級別3(runlevel 3)相對應。在centos7中因爲使用了新systemd管理機制。再也不使用runlevel的概念,因此/etc/inittab不在被系統使用。
centos7下systemd 管理體系理默認的target經過軟連接來實現的。
(因爲版面的問題 把 inode值 屬主屬組和日期 刪除)
[root@jf7 ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
若是想修改運行目標。只須要把這個軟連接刪除。軟連接到新的運行目標。
# rm -rf /etc/systemd/system/default.target
# ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
咱們來查看下centos7下 /etc/inittab文件
$ cat /etc/inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main target
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target
很明肯定義了新的target的位置:/usr/lib/systemd/system/ctrl-alt-del.target
一樣查看下: (因爲版面的問題 把 inode值 屬主屬組和日期 刪除)
# ll /usr/lib/systemd/system/runlevel*
lrwxrwxrwx /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel6.target -> reboot.target
此外,systemd 管理體系還引入了 命令行工具systemctl。 systemctl 能夠看做是service和chkconfig
得組合體。不過不用擔憂。就的service命令在centos7下依舊可使用,不過,它會重定向全部命令到新的systemctl 工具。
幾個例子:
(sysvint)
#service network start |stop |status
#chkconfig httpd on
( systemclt)
# systemctl start|stop|status network.service
#systemctl enable httpd.service
目前: Ubuntu 15.04及後續版本在默認的init上都安裝了 systemd.
介紹完主流init系統後,開始繼續啓動系統。(centos7以前 PID 爲1的進程是由 /sbin/init產生。而 centos7的PID爲1的進程由 /usr/lib/systemd/systemd 產生。)
BIOS - mbr -grub -加載內核到內存 - /etc/inittab- /etc/rc.d/rc.sysinit -啓動內核模塊/etc/modules.conf-啓動指定級別下的腳本rcx.d-執行/etc/rc.d/rc.local -/bin/login
雖然前面說了新的init系統的諸多好處:不過如今畢竟centos7的企業用戶羣體整體上很少。咱們仍是須要熟練掌握centos7一下的版本的啓動。方便之後的管理。並且centos7 在命令層面上徹底向下兼容。
梳理了,開機啓動流程。能夠來些小的應用。
好比:在/etc/rc.d/rc.local 裏面掛載移動設備,添加個性化服務啓動。若是,改階段那個服務啓動不了,致使。啓動阻塞。是否能夠先進入單用戶模式,在/etc/rc.d/rc.local 文件下注釋掉服務。待開機後在測試,修復呢?
最主要的是。熟悉了開機啓動後。能夠根據開機的錯誤信息。排查是那個階段出現的錯誤。好比系統一塊兒重啓。查看 /etc/inittab 是否設置了runlevel6模式。開機腳本錯誤是否是應該單用戶進入系統排查。/etc/rc.d/rcx.d下面的腳本,必要是能夠把S開頭的腳本先更名爲K 。待系統啓動後在恢復。