歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> CentOS 6的系統啟動流程,centos啟動流程

CentOS 6的系統啟動流程,centos啟動流程

日期:2017/3/3 18:11:20   编辑:學習Linux

CentOS 6的系統啟動流程,centos啟動流程

CentOS 6的系統啟動流程,centos啟動流程


一、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

http://xxxxxx/Linuxjc/1160862.html TechArticle

Copyright © Linux教程網 All Rights Reserved