CentOS系統啟動流程

來源:互聯網
上載者:User

CentOS系統啟動流程
導讀CentOS(Community Enterprise Operating System,中文意思是:社區企業作業系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放原始碼規定釋出的原始碼所編譯而成。由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在於CentOS並不包含封閉原始碼軟體。

當我們按下開機鍵後,系統背後的秘密我們是否瞭解呢?這裡,我帶大家探索一下linux系統開機背後的秘密。

加電自檢

主板在接通電源後,系統首先由POST程式來對內部各個裝置進行檢查,自檢中如發現有錯誤,將按兩種情況處理:對於嚴重故障(致命性故障)則停機,此時由於各種初始化操作還沒完成,不能給出任何提示或訊號;對於非嚴重故障則給出提示或聲音警示訊號,等待使用者處理。

BIOS啟動引導階段

自檢通過之後,按次序尋找各引導裝置,第一個有引導程式的裝置即為本次啟動要用到的裝置。一般電腦是按"F2"或"Del"鍵等等進入BIOS,在裡面我們可以調整硬碟的啟動順序。找到第一個有引導程式的裝置後,BIOS會找到裝置中的MBR,讀取其中的Bootloader。

GRUP引導階段

這時候就可以看到我們的Centos系統了,但是一般都不需要操作,會自動啟動系統。其實我們也可以自己手動啟動系統的。

手動在grub命令列介面啟動系統:
grub> root (hd#,#)grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICEgrub> initrd /initramfs-VERSION-RELEASE.imggrub> boot
grub的命令列介面:
e: 編輯模式,用於編輯菜單;c: 命令模式,互動式介面;help: 擷取協助列表;help KEYWORD: 詳細協助資訊;find (hd#,#)/PATH/TO/SOMEFILE:root (hd#,#) 設定grup的根裝置;kernel /PATH/TO/KERNEL_FILE:設定本次啟動時用到的核心檔案;額外還可以添加許多核心支援使用cmdline參數;例如:init=/path/to/init, selinux=0;initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的核心提供額外檔案的ramdisk;boot: 引導啟動選定的核心;
設定檔參數詳解:/boot/grub/grub.conf
default=#: 設定預設啟動的功能表項目;落單項(title)編號從0開始;timeout=#:指定功能表項目等待選項選擇的時間長度;splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片檔案路徑;hiddenmenu:隱藏菜單;password [--md5] STRING: 菜單編輯認證;title TITLE:定義功能表項目“標題”, 可出現多次;用來引導多個核心或者作業系統;root (hd#,#):grub尋找stage2及kernel檔案所在裝置分區;為grub的“根”;kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的核心;initrd /PATH/TO/INITRAMFS_FILE: 核心匹配的ramfs檔案;password [--md5] STRING: 啟動選定的核心或作業系統時進行認證。
載入核心階段核心會自身初始化:
探測可識別到的所有硬體裝置;載入硬體驅動程式;(有可能會藉助於ramdisk載入驅動);以唯讀方式掛載根檔案系統;運行使用者空間的第一個應用程式:/sbin/init。
init初始化階段

核心載入完畢,會運行init程式,init進程起來後,系統啟動的控制權移交給init進程;/sbin/init進程是所有進程的父進程,當init起來之後,它首先會讀取設定檔/etc/inittab,進行以下工作:

1.執行系統初始化指令碼(/etc/rc.d/rc.sysinit),對系統進行基本的配置,以讀寫方式掛載根檔案系統及其它檔案系統,到此系統基本算運行起來了,後面需要進行運行層級的確定及相應服務的啟動;2.確定啟動後進入的運行層級;3.執行/etc/rc.d/rc,該檔案定義了服務啟動的順序是先K後S,而具體的每個運行層級的服務狀態是放在/etc/rc.d/rcn.d(n=0~6)目錄下,所有的檔案均連結至/etc/init.d下的相應檔案;4.有關key sequence的設定;5.有關UPS的指令碼定義;6.啟動虛擬終端/sbin/mingetty;7.在運行層級5上運行X。

設定檔:/etc/inittab;每行定義一種action以及與之對應的process

id:runlevels:action:process;id:一個任務的標識符;runlevels:在哪些層級啟動此任務;#,###,可以為空白,表示所有層級;action:在什麼條件下啟動此任務;process:任務;(指令碼或程式);action:wait:等待切換至此任務所在的層級時執行一次;respawn:一旦此任務終止,就自動重新啟動之;initdefault:設定預設運行層級;此時,process省略;sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit指令碼;K*:要停止的服務;K##*,優先順序,數字越小,越是優先關閉;依賴的服務先關閉,而後關閉被依賴的;S*:要啟動的服務;S##*,優先順序,數字越小,越是優先啟動;被依賴的服務先啟動,而依賴的服務後啟動;

chkconfig命令:管控/etc/init.d/每個服務指令碼在各層級下的啟動或關閉狀態;

查看:chkconfig --list  [name]添加:chkconfig --add name刪除:chkconfig --del name

修改指定的連結類型:

chkconfig [--level LEVELS] name <on|off|reset>--level LEVELS:指定要控制的層級;預設為2345。

init命令:

層級切換:init #;層級查看:who -r。

註:正常層級下,最後啟動的一個服務S99local沒有連結至/etc/init.d下的某指令碼,而是連結至了/etc/rc.d/rc.local (/etc/rc.local)指令碼;因此,不便或不需寫為服務指令碼的程式期望能開機自動運行時,直接放置於此指令檔中即可。

原文地址:http://www.linuxprobe.com/system-startup-process.html


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.