CentOS6啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備 2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備 4.核心執行init程序,并獲取默認的運行信息 5.init程序執行/etc/rc.d/rc.sysinit文件 6.啟動核心的外掛模塊 7.init執行運行的各個批處理文件(scripts) 8.init執行/etc/rc.d/rc.local 9.等待用戶登錄
下面將詳細介紹啟動流程的過程
1、BIOS會進行開機加電自檢,檢查一些硬件的設備的完整性 2、在加電自檢完成后,就會通過放在MBR中前446個字節的引導裝載程序(grub)來加載內核,其中grub能夠提供菜單,用戶可以選擇不同的啟動選項,以及加載內核文件grub就放在/boot下,在grub目錄下存在一個/boot/grub/grub.conf的grub的配置文件里面包含了kernel和虛擬文件系統(initramfs)的路徑以及根目錄的位置,稍后在做詳細解釋 3、當我們通過grub加載內核后,Linux會將內核解壓縮到我們的內存中,此時內核會重新的檢測硬件那么內核在什么地方呢?其實在我們之前的學習中講過,啟動程序放在/boot下,并且通常單獨作為一個分區,內核就放在這里,并且取名為/boot/vmlinuz,
看一下/boot下的文件:
[root@Centos6 /boot]#ll -rw-r--r--. 1 root root 108164 Mar 22 03:34 config-2.6.32-696.el6.x86_64 drwxr-xr-x. 3 root root 4096 Jul 14 11:19 efi drwxr-xr-x. 2 root root 4096 Aug 31 10:48 grub -rw-------. 1 root root 26669528 Jul 14 11:25 initramfs-2.6.32-696.el6.x86_64.img 虛擬文件系統 drwx------. 2 root root 16384 Jul 14 10:33 lost+found -rw-r--r--. 1 root root 215634 Mar 22 03:35 symvers-2.6.32-696.el6.x86_64.gz -rw-r--r--. 1 root root 2622364 Mar 22 03:34 System.map-2.6.32-696.el6.x86_64 -rwxr-xr-x. 1 root root 4274992 Mar 22 03:34 vmlinuz-2.6.32-696.el6.x86_64 內核文件
我們可以看到vmlinuz就是內核文件了,非常重要。其中還有一個叫initramfs的文件,它是虛擬文件系統用來在提供一個可執行的程序,通過它來加載啟動過程中所需要的內核模塊其實就是驅動程序。
4、在內核加載完成后就到系統啟動的第一個進程,centos6里面為init進程
下面來了解一下init進程的配置文件/etc/inittab,先來看看
[root@Centos6 /boot/grub]#cat /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) 多用戶,但無NFS # 3 - Full multiuser mode 正常模式 # 4 - unused 預留級別 # 5 - X11 圖形界面 # 6 - reboot (Do NOT set initdefault to this) 重啟模式 # id:5:initdefault:
其中我們可以看到有0-6 共7個運行等級,我們可以看到本系統為id:5:initdefault:運行在5模式,其他的選項都已在特定的文件下直接定義 我們看一下
[root@Centos6 /boot/grub]#cat /etc/init/rc.conf # rc - System V runlevel compatibility # # This task runs the old sysv-rc runlevel scripts. It # is usually started by the telinit compatibility wrapper. # # Do not edit this file directly. If you want to change the behaviour, # please create a file rc.override and put your changes there. start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] task export RUNLEVEL console output exec /etc/rc.d/rc $RUNLEVEL
不同的運行等級腳本存放路徑為/etc/rc.d/rc#.d,稍后再做詳解
5、在開啟第一個進程后init開始處理系統的初始化腳本,/etc/rc.d/rc.sysinit這里包含了網絡環境與主機類型、SELinux是否啟動等等,一般不作更改,這里不做贅述。 6、啟動核心的模塊(驅動程序) 7、init執行運行的各個批處理文件(scripts),例如我們在/etc/inittab里面知道本系統啟動過程中運行在5模式,那么init會找到運行等級為5的腳本在/etc/rc5.d
-
[x] 在腳本中包含了兩類文件名分別是:以K 和S 開始的文件名,而已K或S開頭的文件實際為系統的服務程序,排序在前越先執行。 當系統在運行腳本時會找到/etc/rc5.d/K的文件,并將其停止 當系統在運行腳本時會找到/etc/rc5.d/S的文件,并將其開啟
我們來看一下/etc/rc5.d目錄下的內容
[root@Centos6 /etc/rc.d/rc5.d]#ll total 0 省略部分顯示 lrwxrwxrwx. 1 root root 14 Jul 14 11:17 K99rngd -> ../init.d/rngd lrwxrwxrwx. 1 root root 18 Jul 14 11:17 S13cpuspeed -> ../init.d/cpuspeed lrwxrwxrwx. 1 root root 20 Jul 14 11:08 S13irqbalance -> ../init.d/irqbalance lrwxrwxrwx. 1 root root 20 Jul 14 11:03 S99certmonger -> ../init.d/certmonger lrwxrwxrwx. 1 root root 11 Jul 14 10:52 S99local -> ../rc.local
8、用戶自定義開機啟動程序/etc/rc.d/rc.local 從上個步驟中,我們知道/etc/rc.d/rc.local 是最后被執行的,我們可以添加一些選項在其中,可以在系統啟動的時候就可以啟動,很是方便。
Bootloader : grub
bootloader 的兩個階段stage bootloader具有菜單功能、直接加載內核文件以及控制權移交的功能,系統必須要有loader才能夠加 載操作系統內核,但是MBR是第一扇區的一個block 大小為446字節,不能夠將loader全部放進去,所以Linux將其bootloader的程序代碼執行與設置值分成兩個階段來執行:
stage1 :執行bootloader的主程序,目的最終加載stage2階段
stage1.5 :最為中間媒介,傳遞作用,stage2太大需要stage1.5作為中間步驟
stage2 :bootloader的核心映像
9、接下來就是用戶登錄開啟shell 接下來著重介紹一下/boot下的grub以及其配置文件grub.conf
/boot/grub下的列表文件
[root@Centos6 ~]#ll /boot/grub total 280 -rw-r--r--. 1 root root 63 Jul 14 11:27 device.map grub的設備對應文件 -rw-r--r--. 1 root root 13428 Jul 14 11:27 e2fs_stage1_5 ext2/ext3文件系統的文件 -rw-r--r--. 1 root root 12636 Jul 14 11:27 fat_stage1_5 FAT文件系統的定義文件 -rw-r--r--. 1 root root 11780 Jul 14 11:27 ffs_stage1_5 FFS文件系統文件 -rw-------. 1 root root 872 Aug 31 10:48 grub.conf grub在Red Hat中的配置文件 -rw-r--r--. 1 root root 11772 Jul 14 11:27 iso9660_stage1_5 光驅文件系統文件 -rw-r--r--. 1 root root 13284 Jul 14 11:27 jfs_stage1_5 ifs文件系統定義文件 lrwxrwxrwx. 1 root root 11 Jul 14 11:27 menu.lst -> ./grub.conf grub配置文件 -rw-r--r--. 1 root root 11972 Jul 14 11:27 minix_stage1_5 minix文件系統文件 -rw-r--r--. 1 root root 14428 Jul 14 11:27 reiserfs_stage1_5 reiserfs文件系統文件 -rw-r--r--. 1 root root 1341 Nov 15 2010 splash.xpm.gz 啟動時在grub下面的后臺圖標 -rw-r--r--. 1 root root 512 Jul 14 11:27 stage1 1階段說明文件 -rw-r--r--. 1 root root 126148 Jul 14 11:27 stage2 2階段說明文件 -rw-r--r--. 1 root root 12040 Jul 14 11:27 ufs2_stage1_5 UFS文件系統文件 -rw-r--r--. 1 root root 11380 Jul 14 11:27 vstafs_stage1_5 vstafs文件系統文件 -rw-r--r--. 1 root root 13980 Jul 14 11:27 xfs_stage1_5 xfs文件系統文件
grub引導裝載程序可以支持許多文件系統,來查看一下grub的配置文件
[root@Centos6 ~]#cat /boot/grub/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/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda #default kernel list! default=0 #delay time and make the default kernel after timeout! timeout=5 #setting boot picture splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=ef20e35d-b3b0-4bb0-a7f0-b6da5f9478ea rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img
介紹grub.conf文件中每個選項的作用
1、default=0
默認內核列表,與下面的title相關聯,有幾個title在啟動的時候就會出現幾個菜單可以選擇
2、timeout=5
啟動后進行讀秒,在5秒內沒有任何按鍵,則會啟動默認的title選項,timeout=0表示不讀秒直接進行啟動,timeout=-1,表示直接進入菜單。
3、splashimage=(hd0,0)/grub/splash.xpm.gz
啟動時grub后臺的圖片,可以自己定制,但文件后綴格式一定要與給定的相同
此外,(hd0,0)表示內核的位置,hd0表示第一塊硬盤,0表示第一個分區,相當于/dev/sda1就是/boot所在的分區
4、hiddenmenu
隱藏菜單
5、title CentOS 6 (2.6.32-696.el6.x86_64)
菜單名稱 root (hd0,0) 說明內核所在的那個分區 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID<此處省略部分> rhgb quiet 指定內核,以及操作系統的根目錄在什么地方,這里root=UUID也可直接寫上/root所在的分區,例如;root=/dev/sda2,后面的參數是啟動時候的一些選項,這里不做贅述。 initrd /initramfs-2.6.32-696.el6.x86_64.img 指定虛擬的文件系統
其中這幾項一定要有,缺少的話會導致系統找不到文件不能正常啟動。
本文只是根據實際情況進行了介紹,可能不全面,在此指出。
附上啟動流程流程框圖:
原創文章,作者:M25_ymd,如若轉載,請注明出處:http://www.www58058.com/85786