Centos 6启动流程详解
author:JevonWei
版權聲明:原創作品
Centos6 啟動流程
- POST開機自檢
當按下電源鍵后,會啟動ROM芯片中的CMOS程序檢查CPU、內存等硬件設備是否正常運行,CMOS中的程序即為我們通常稱之為的BIOS,在BIOS中我們可以設置硬盤接口的類型及系統的啟動方式和虛擬化等設置。當然,在我們的電腦主板上還會有一塊紐扣電池專門用來給ROM供電,從而保證BIOS的的正常工作,使得主板斷電后BIOS并不會立即停止工作。 - 加載BIOS中的Sequence
在系統啟動時,默認是不知道你的系統存放在哪個設備上的,故需要按照BIOS中設置的引導加載器bootloader查找,查找到的第一個有引導程序的設備即為此次用到的設備。 bootloader 引導加載器
系統的引導程序即為bootloader,在不同的操作系統中的bootloader是不同的。windows使用的bootloader程序為ntloader,僅可以對windows系統進行引導,而不能引導其他的操作系統;Linux的bootloader為GRUB,GRUB不僅可以對Linux系統進行引導,還可以引導其他的操作系統;故當我們需要安裝雙系統時,都會將Linux系統最后安裝;bootloader的功能:提供一個菜單,允許用戶選擇要啟動的操作系統或不同的內核版本,然后將用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統的控制權轉交給內核處理。
bootloader的引導程序GRUB存放在MBR中引導加載程序GRUB
grub legacy分為三個階段 stage1:這一階段數據存放于MBR中stage1_5:這一階段為MBR之后的扇區,同時也是stage1到stage2的過度,為了讓stage1中的bootloader能夠識別stage2階段所在分區的文件系統stage2:磁盤上的/boot/grub分區stage2及內核等通常放置于一個基本磁盤分區:功用(1):提供菜單,并提供交互式接口a:內核參數 e:編輯模式,用于編輯菜單c:命令模式,交互式接口(2):加載用戶選擇的內核或操作系統允許傳遞參數給內核可隱藏此菜單(3):為菜單提供了保護機制為編輯菜單進行認證為啟動內核或操作系統進行認證
grub legacy界面如下
在此界面按“e”進入如下所示的編輯模式,用于編輯啟動菜單
然后按“e”進入grub的命令行的編輯模式,“c”進入交互式命令行,“b”啟動系統,在此按“c”鍵,進入如下界面
在此命令行中常用的命令有:help:獲取幫助列表help KEYWORD:詳細幫助信息find (hd#,#)/PATH/FILENAME:在分區上查找FILENAME文件 eg find (hd0,0)/vmlinuz-2.6*root (hd#,#) 指明hd#,#設備為/(根)設備eg root(hd0.0)find vmlinuz-2.6* kernel /PATH/TO/KERNEL_FILE 設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數安裝grub:
(1) grub-installgrub-install --root-directory=ROOT /dev/DISK 根據跟掛載分區設備安裝/boot啟動目錄和grub,--root-directory=ROOT 指明grub存放跟路徑目錄,grub路徑目錄已存在,grub文件自動生成(2) grub 局限性依賴于grub目錄下的文件grub> root (hd#,#) grub跟位于hd#磁盤#個分區 grub> setup (hd#) 將grub安裝到hd#硬盤上Cnetos 6中grub的配置文件保存在/boot/grub/grub.conf文件中,常用的選項如下
default=#:設定默認啟動的菜單項,落單項(title)編號從0開始timeout=#:指定菜單項等待選項選擇的時長;splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;hiddenmenu:隱藏菜單password [--md5] STRING:菜單編輯md5認證password --encrypted STRING 512口令密碼加密 title TITLE:定義菜單項"標題",可出現多次;root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的"根"kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] ro root=/dev/sda2 selinux=0 quiet 啟動的內核文件路徑和/分區路徑, selinux=0 禁用SELinux策略,quiet 顯示內核啟動過程 initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件password [--md5] STRING:啟動選定的內核或操作系統時進行認證內核參數(用于向內核傳遞參數):rhgb 啟動過程圖形界面顯示quiet 顯示內核啟動過程 max_loop 100 生成100個loop設備selinux=0 禁用SELinux策略/boot/grub/grub.conf配置文件如圖所示
/boot/grub/grub.conf文件中也可以添加密碼,從而使進入啟動菜單和內核編輯界面提示輸入密碼,最終達到提升系統安全性的目的
密碼放在不同的位置,即產生不同的加密效果 生成密碼口令grub-md5-crypt命令:生成md5密碼口令grub-crypt 密碼口令512加密算法在grub.cfg文件中編輯password --[md5] 口令 增加加密口令或md5加密 password --encrypted 口令 添加512加密口令
加入的兩個密碼都不影響電腦的正常啟動,只是在編輯啟動設置選項時起作用;第一個password --md5加密是在菜單選擇時輸入密碼,第二個password --encrypted加密是在編輯系統啟動設置時輸入密碼,如下所示
第一次密碼的輸入,編輯此界面進入單用戶或grub命令設置時輸入md5加密口令,按‘p’鍵輸入口令,然后進入正常的編輯界面
進入系統時的界面的加密
當如下界面按‘b’鍵啟動時,將會進入第二次加密512口令加密界面
密碼輸入正確,即可正常進入系統結論
在grub.conf文件上的不同的位置設置密碼,發生的效果不同,故需準確明白需要在啟動的哪個階段加密從而才能在適當的位置添加密碼,否則可能不產生理想的效果,在title之前添加密碼即為啟動菜單選擇界面加密,在title之后為選擇title之后的加密,在內核文件之后添加密碼即為啟動系統加密
5 . kernel
在GRUB中選擇對應的kernel進入,然后kernel會對自身系統進行初始化操作
kernel初始化探測可識別到的所有硬件設備加載硬件驅動程序:(可能會借助于ramdisk加載驅動)以只讀方式掛載根文件系統運行用戶空間的第一個應用程序:/sbin/init內核的組成部分:kernel:內核核心,一般為bzimage,通常在/boot目錄下,名稱為vmlinuzkernel object:內核對象一般有三種選擇,一般放置于/lib/modules/VERSION-RELEASE/ramdisk: 內核的特性之一:使用緩沖和緩存來回對磁盤空間訪問ramdisk文件制作:(1) mkinitrd 為當前正在使用的內核重新制作ramdisk文件 mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 由當前系統版本生成相應版本的initramfs文件 (2) dracut命令 為當前正在使用的內核重新制作ramdisk文件 dracut /boot/initramfs-$(uname -r).img $(uname -r) 6 . 運行init程序
Centos 6init程序的存放在/sbin/init,init共分為7個級別
init程序的配置文件:/etc/inittab,/etc/init/*.conf
init的七個運行級別 0:關機1:單用戶模式(root自動登錄),single,維護模式2:多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式3:多用戶模式,正常模式;文本界面4:預留級別;可同3級別5:多用戶模式,正常模式;圖形界面6:重啟 默認運行級別為3,5切換運行級別:init #查看運行init級別:runlevel;who -r 7 . 運行系統初始化腳本
系統初始化腳本對用的配置文件:/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit:系統初始化腳本主要內容為 (1)設置主機名(2)設置歡迎信息(3)激活udev和selinux(4)掛載/etc/fstab 文件中定義的文件系統(5)檢測根文件系統,并以讀寫方式重新掛載根文件系統(6)設置系統時鐘(7)激活swap設備(8)根據/etc/sysctl.conf 文件設置內核參數(9)激活lvm及software raid設備(10)加載額外設備的驅動程序(11)清理操作 cat /etc/inittab
id:5:initdefault: 表示默認運行級別為5每一行定義一種action以及與之對應的processid:runlevel:action:processaction:wait:切換至此級別運行一次respawn:此process 終止,就重新啟動之initdefault:設定默認運行級別;process省略
8 . 啟動系統服務
centos6下的系統服務腳本都放在/etc/rc.d/init.d或者/etc/init.d中,可以看到兩個文件中的內容是一樣的,因為/etc/init.d鏈接到了/etc/rc.d/init.d中
通過chkconfig命令可以查看什么系統級別下開啟了哪些服務,以及添加服務到系統中并在指定級別下啟動chkconfig --list 查看系統中所有服務的運行級別狀態 添加服務到chkconfig chkconfig --add httpd 添加httpd服務到chkconfig從chkconfig中刪除服務chkconfig --del httpd 將httpd從chkconfig中刪除chkconfig --add 服務名,在添加的時候需要將對應的服務放入/etc/init.d中,并在服務腳本中加入chkconfig: LLLL nn nn寫到LLLL的init級別就是S的,沒寫得就是K的,第一個nn代表S的數字,第二個nn代表K的數字[注意]:正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中。/etc/rc.d/rc.local在指定運行級別腳本后運行 9 . 打印登錄提示符
系統在啟動完程序之后就會打印登錄提示符,然后輸入賬號密碼進行登錄,最后進入相應的系統級別
10 . 總結
1、加電自檢2、按照BIOS中設置的Boot Sequence查找有bootloader程序的設備3、加載MBR中的bootloader程序GRUB4、進入GRUB設置的默認kernel5、kernel初始化6、運行init程序7、運行系統初始化腳本8、啟動對應服務9、打印登錄提示符 啟動修復
在前面系統的啟動流程基本上已經說完了,我想已經清楚系統是如何啟動的了,如果系統啟動失敗了呢,我們該如何去解決呢?下面就讓我們來看下常見的啟動錯誤及如何修復的吧
了解系統的啟動修復,請點擊下面的鏈接
http://www.cnblogs.com/JevonWei/p/7146150.html
http://www.cnblogs.com/JevonWei/p/7146719.html
或
http://www.jianshu.com/p/0e44aa26e3f0
轉載于:https://www.cnblogs.com/JevonWei/p/7144339.html
總結
以上是生活随笔為你收集整理的Centos 6启动流程详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 芭比娃娃多少钱啊?
- 下一篇: 求一个配套的qq头像与网名