CentOS 6的系統啟動流程

来源:http://www.cnblogs.com/gbk66/archive/2016/09/23/5900964.html
-Advertisement-
Play Games

一、POST加電自檢 按下電源後ROM晶元中的CMOS程式執行並檢測CPU、記憶體等設備是否存在並正常運行,CMOS中的程式叫BIOS,可以設置硬碟介面,網卡音效卡開關之類的簡單設置。一般PC機主板上有一個紐扣電池,這個電池就是給ROM供電的,可以保證主板斷電後BIOS的一些基本設置不會重置。 下麵是一 ...


一、POST加電自檢

    按下電源後ROM晶元中的CMOS程式執行並檢測CPU、記憶體等設備是否存在並正常運行,CMOS中的程式叫BIOS,可以設置硬碟介面,網卡音效卡開關之類的簡單設置。一般PC機主板上有一個紐扣電池,這個電池就是給ROM供電的,可以保證主板斷電後BIOS的一些基本設置不會重置。

    下麵是一個比較新的主板的BIOS,在老主板上一般只有英文不會有中文界面,老式主板只支持鍵盤操作不支持滑鼠,現在很多新主板已經可以支持滑鼠操作了。

二、引導載入次序Boot Sequence

    在系統啟動前電腦是不知道你系統在哪裡的,需要按照設備啟動順序一次查找引導載入器器bootloader,這個查找次序可以自己在BIOS中設定,一般在boot選項中設置,【註意】不同廠商不同版本的主板設置方法是不同的,請以廠商的官方說明為準。

三、引導載入器bootloader

    前面說了系電腦是不知道系統在哪裡的,所以需要程式進行引導,這個引導的程式就叫bootloader,不同操作系統的bootloader是不同的,windows使用的bootloader程式是ntloader,只能對windows進行引導不能對其他系統進行引導,而Linux的bootloader叫GRUB,可以對其他操作系統進行引導(包括windows),正是因為這樣,所以在裝既有Windows又有Linux的雙系統的時候,需要先裝Windows,再裝Linux

功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到記憶體中的特定空間中,解壓、展開,並把系統控制權移交給內核。

 bootloader的引導程式GRUB放在MBR中。

四、引導載入器程式GRUB

    1、grub legacy

    前面提到GRUB是bootloader階段的一個程式,這是Centos中最常用的引導程式,CentOS 6安裝的是grub legacy

    下麵是CentOS 6的grub legacy

 

按e:進入編輯模式,用於編輯菜單;

 然後按c: 進入命令模式,互動式介面;

常用的命令有

#help: 獲取幫助列表 #help KEYWORD: 詳細幫助信息 #find (hd#,#)/PATH/TO/SOMEFILE: #root (hd#,#)設定grub的根設備 #kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數; #例如:init=/path/to/init, selinux=0 #initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk; #boot: 引導啟動選定的內核;

CentOS 6中grub的配置文件保存在/boot/grub/grub.conf中

vim grub.conf   # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE:  You have a /boot partition.  This means that #          all kernel and initrd paths are relative to /boot/, eg. #          root (hd0,0) #          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root #          initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-431.el6.x86_64)         root (hd0,0)         kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet         initrd /initramfs-2.6.32-431.el6.x86_64.img

  其中常用的配置

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: 啟動選定的內核或操作系統時進行認證;

 

  2、GRUB2

 CentOS 7上安裝的是gurb2

[root@localhost ~]# rpm -q grub2 grub2-2.02-0.34.el7.centos.x86_64 下麵是centos7的GRUB,如果什麼都不選,在3秒後系統會進入預設設置的那一項系統。

按e進入GRUB編輯

按ctrl+c進入命令行模式

常用的命令行命令有下麵這些:

1. help     查看命令用法,顯示所有可用命令     help search      search 命令用法 2. ls     列出當前的所有設備。如 (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1) (hd1,2) .......     ls -l     詳細列出當前的所有設備。對於分區,會顯示其label及uuid。     ls /     列出當前設為root的分區下的文件     ls (hd1,1)/     列出(hd1,1)分區下文件 3. search     search -f /ntldr     列出根目錄里包含ntldr文件的分區,返回為分區號     search -l LINUX     搜索label是LINUX的分區。     search --set -f /ntldr     搜索根目錄包含ntldr文件的分區並設為root,註意如果多外分區含有ntldr文件,set 失去作用 4. loopback     loopback命令可用於建立回放設備,如     loopback lo0 (hd1,1)/abc.iso     可以使用lo0設備來訪問abc.iso里的內容,比如說,可以從abc.iso里的軟盤映像中啟動     loopback lo0 (hd1,1)/aa.iso     linux (lo0)/memdisk     initrd (lo0)/abc.img     要刪除某一回放設備,可以使用-d參數:     loopback -d lo0 5. set     使用set可以設置變數的值     set root=     set timeout=     需要調用變數的值時,使用${AA},如set root=(hd1,1)     則${root}=(hd1,1) 6. pager     分頁顯示。     set pager=1     滿頁時暫停,按space繼續     set pager=0     取消分頁 7. linux     linux取代grub中的kernel

 CentOS 7的/boot/grub2/grub.conf官方建議是不要隨便修改的,一般都是在grub.d文件下生成新的啟動目錄,再重新生成

預設啟動的修改可通過/boot/grub2/grubenv文件修改

[root@localhost grub2]# vim grubenv    # GRUB Environment Block saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) ######################################################### 可以進入/etc/grub.d下查看 [root@localhost grub.d]# ls 00_header  01_users  20_linux_xen     30_os-prober  41_custom 00_tuned   10_linux  20_ppc_terminfo  40_custom     README 進入README可以查看grub.d中文件的說明 [root@localhost grub.d]# cat README    All executable files in this directory are processed in shell expansion order.     00_*: Reserved for 00_header.   10_*: Native boot entries.   20_*: Third party apps (e.g. memtest86+).   The number namespace in-between is configurable by system installer and/or administrator.  For example, you can add an entry to boot another OS as 01_otheros, 11_otheros, etc, depending on the position you want it to occupy in the menu; and then adjust the default setting via /etc/default/grub. #00 _ *:為00 _header保留 #10 _ *:本機引導條目 #20 _ *:第三方應用程式(例如memtest86)

五、進入kernel

    在GRUB中選擇對應的kernel進入,然後kernel會對自身進行初始化

    探測可識別到的所有硬體設備。

    載入硬體驅動程式。

    以只讀方式掛載根文件系統。

    運行用戶空間的第一個應用程式,在CentOS 6上是init,在CentOS 7上是Systemd

    內核組成部分:

        kernel: 內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;

        kernel object: 內核對象,一般放置於/lib/modules/VERSION-RELEASE/

六、運行init

    CentOS 6上init所在的位置是在/sbin/init,init共分為7個級別

#0:關機 #1:單用戶模式(root, 無須登錄), single, 維護模式; #2: 多用戶模式,會啟動網路功能,但不會啟動NFS;維護模式; #3:多用戶模式,正常模式;文本界面; #4:預留級別;可同3級別; #5:多用戶模式,正常模式;圖形界面; #6:重啟 例如你要關機可直接輸入init 0進行關機操作 [root@localhost sbin]# init 0 如果要查看當前系統運行的init級別可使用runlevel或者who -r [root@localhost sbin]# runlevel  N 5 [root@localhost sbin]# who -r          運行級別 5 2016-04-10 18:25 init的配置文件在/etc/inittab [root@localhost sbin]# vim /etc/inittab    # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # 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) id:5:initdefault: #這裡定義的預設運行級別為5

 配置文件中的格式是:id:runlevel:action:process

    此配置文件每行定義一個級別

id:指入口標識符,它是一個字元串,對於getty或mingetty等其他login程式項,要求idtty的編號相同,否則getty程式將不能正常工作。 runlevel:init的系統運行級別 action:是用來定義後面process的運行方式,常用的有下麵幾種         wait: 切換至此級別運行一次;         respawn:此process終止,就重新啟動之;         initdefault:設定預設運行級別;process省略;         sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit process:為具體的執行程式,

 例如設置為l0:5:wait:/etc/rc.d/rc 5

    /etc/rc.d/rc是一個Shell腳本,它接受5作為參數,去執行/etc /rc.d/rc5.d/目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d/目錄中的這些啟動腳本實際上都是一些鏈接文件,而不是真正的rc 啟動腳本,真正的rc啟動腳本實際上都是放在/etc/rc.d/init.d/目錄下。而這些rc啟動腳本有著類似的用法,它們一般能接受start、stop、restart、status等參數。

    /etc/rc.d/rc5.d/中的rc啟動腳本通常是K或S開頭的鏈接文件。

#K開頭的文件:運行次序是數字越小,越先運行;數字越小的服務,通常為依賴到別的服務;關閉服務。 #S開頭的文件:運行次序是數字越小,越先運行;數字越小的服務,通常為被依賴到的服務;啟動服務。 [root@localhost rc5.d]# pwd /etc/rc.d/rc5.d

七、運行系統初始化腳本

    系統初始化腳本對應的文件是/etc/rc.d/rc.sysinit

    大概就是這個樣子,因為太長,省略了很多

八、啟動系統服務

    centos6下的系統服務腳本都放在/etc/rc.d/init.d或者/etc/init.d中,可以看到兩個文件中的內容是一樣的,因為/etc/init.d鏈接到了/etc/rc.d/init.d中

通過chkconfig命令可以查看什麼系統級別下開啟了哪些服務,以及添加服務到系統中併在指定級別下啟動

    查看chkconfig --list

添加chkconfig --add 服務名,在添加的時候需要將對應的服務放入/etc/init.d中,併在服務腳本中加入chkconfig: LLLL nn nn

    寫到LLLL的init級別就是S的,沒寫得就是K的,第一個nn代表S的數字,第二個nn代表K的數字

[root@localhost init.d]# chkconfig --add httpd

刪除chkconfig --del 服務名

[root@localhost init.d]# chkconfig --del httpd

【註意】:正常級別下,最後啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫為服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中。

九、列印登錄提示符

    系統在啟動完服務後會列印登錄提示符,然後輸入賬號密碼,進入對應的命令行界面或圖形界面。

十、總結

    系統的啟動流程總的來說分成以下幾個步驟:

    1、加電自檢

    2、按照BIOS中設置的Boot Sequence查找有bootloader程式的設備

    3、載入MBR中的bootloader程式GRUB

    4、進入GRUB設置的預設kernel

    5、kernel初始化

    6、運行init程式

    7、運行系統初始化腳本

    8、啟動對應服務

    9、列印登錄提示符

 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://xsllqs.blog.51cto.com/2308669/1762422

 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文目錄列表: 1、sys.sp_helptext存儲的功能和效果 2、重構sys.sp_helptext存儲(命名為dbo.usp_helptext)提供直觀的效果 3、sys.sp_helptext和dbo.usp_helptext的限制以及解決方案 4、總結語 5、參考清單列表 1、sys.s ...
  • 最近遇到一起關於"I/O is frozen on database xxx. No user action is required. However, if I/O is not resumed promptly, you could cancel the backup."的案例。 出現問題的時候... ...
  • mysqli_free_result() 返回最後一次查詢中使用的自動生成 id,如果是多表插入,返回的是第一個被插入的id。 ...
  • 今天終於有時間安裝SQL Server2016正式版,下載那個安裝包都用了一個星期 安裝包可以從這裡下載: http://www.itellyou.cn/ https://msdn.microsoft.com/zh-cn/subscriptions/downloads/hh442898.aspx 安 ...
  • 子查詢,又叫做嵌套查詢。 將一個查詢語句做為一個結果集供其他SQL語句使用,就像使用普通的表一樣,被當作結果集的查詢語句被稱為子查詢。 子查詢有兩種類型: 一種是只返回一個單值的子查詢,這時它可以用在一個單值可以使用的地方,這時子查詢可以看作是一個擁有返回值的函數; 另外一種是返回一列值的子查詢,這 ...
  • 設計表格我覺得用PowerDesigner比起在SQL Server中設計表格簡單快捷許多。 首先,我們新建一個Model(可以使用快捷鍵Ctrl + N) 在PowerDesigner中側邊欄有浮動小工具欄: 這都是我們設計的工具,然後點擊表格Columns設計表格: 之後就設計表格就可以了。 就 ...
  • 1.背景說明: vim編輯器是linux一款非常流行功能強大的文本編輯。配置好vim可大大提高代碼的開發效率 2.配置方案: 我在github搜索了別人是如何進行vim配置的,在這裡你可以選擇一款適合你的配置方案,這裡我選擇Star比較多的配置方案:vimrc 3.如何安裝: 參考上述鏈接,安裝說明 ...
  • 有時候因為斷電或者其他原因導致伺服器關機,這在測試伺服器上面是很常見的事情。而伺服器上面的多個進程也就關閉了,每次都要去重啟很麻煩,於是就查了一下設置開機自動啟動的方法,這樣開機就只用稍微看看服務是否啟動就好了,不用一個一個去啟動了。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...