§·Centos系統啟動概括流程
系統啟動流程:
PC (OS Llinux)
POST(開機)–>BIOS–>MBR(bootloader .446字節)—>kernel–>/sbin/init(/etc/inittab)(用戶空間的管理進程)
備注:
POST :加電自檢,檢測必要的硬件設備:CPU,內存。啟動以后轉交給:BIOS;
BIOS:(啟動順序:光盤,硬盤,網絡,U盤等),找到對應啟動設備的MBR,再轉交給 MBR;
MBR:其實相當于一個小分區,有512字節,里面存儲著一段一個引導程序為:bootloader,MBR啟動bootloader, bootloader中存儲著從哪個地方找到kernel加載到內存中,找到initrd加載到硬盤中,啟動權轉交給 kernel;
Kernel:執行系統初始化信息,加載硬件驅動等等,啟動用戶空間的第一個程序: /sbin/init;
/sbin/init:主要功能是準備軟件的運行環境。
§·系統啟動流程的詳細描述
※·POST大概流程
·POST (power on system test);自檢主要的工作是檢測一下硬件設備是否存在并能正常的運行,如:cpu,內存,硬盤(沒有硬盤當然也可以,有的是網絡啟動)是否存在并能正常的運行。
·這些自檢功能是有一個軟件程序來實現的,這個軟件程序叫做:BIOS,它是裝載在一個硬件芯片COMS之上的,COMS通電后,然后啟動BIOS程序。
※·BIOS大概流程
·BIOS(basic input output system),它是一個裝載在COMS硬件芯片之上的程序,COMS加電后,BIOS程序會更具COMS上面的一些配置信息去讀取其它硬件設備信息并檢測是否存在并能正常的運行,之后進行硬件設備的初始化。(里面有設備的啟動順序,按順序查找啟動設備,查找MBR,找到MBR就從該設備啟動)
※·MBR boot loader大概流程
·BIOS查找到MBR后,MBR想象成一個小分區,里面存放著一段引導程序為:bootloader。Bootloader為通用程序,為了識別不同系統的文件系統,bootloader是一個啟動管理程序,來處理這些核心文件的加載問題,bootloader是一段程序肯定是需要存儲在一個設備之上,一般存儲與硬盤上,存儲在一個可以啟動的硬盤的第一個扇區內,這個扇區我們稱之為:MBR(master boot record 主引導記錄)。
◎·Boot loader功能之一:識別,加載操作系統中的核心文件
·boot loader 的主要功能是去識別,加載操作系統中的核心文件,并提交到內存中運行,進而來啟動操作系統。
·由于不同操作系統的文件格式不同,因此也就為之每一種操作系統都有自己的boot loader。
·如果一個硬盤有兩個操作系統怎么辦,MBR又只有一個,那我們如何安裝這兩個操作系統的?
·在磁盤管理中我們知道,每個磁盤分區都有一塊啟動扇區,這個啟動扇區用來為安裝操作系統安裝boot loader,通常操作系統默認會安裝一份boot loader到它根目錄所在分區的扇區當中。
·Linux系統安裝時,會提示我們是否將boot loader安裝到MBR上去,如果選擇安裝到MBR上的話,理論上MBR和對應的分區上的啟動扇區上同時都有一份bootloader程序。
·但是windows系統安裝時,默認會主動在MBR和對應分區上的啟動扇區上同時安裝一份bootloader程序,這也導致了之前MBR中的信息將被覆蓋掉。
◎·Boot loaer功能之二:提供菜單信息,控制權轉交
·bootloader的另一個主要功能是提供菜單信息,可以向使用者提供不同的啟動項目,來加載不同的操作系統。并將啟動管理功能轉交給其它的加載程序。
·由于windows的boot loader 不具備控制權轉交功能,因此我們不能使用windows的bootloader去加載linux的boot loader,只能使用linux的boot loader去加載windows的boot loader。
·想安裝windows系統,在安裝linux的操作系統,通過linux的系統bootloader的菜單列表功能區啟動windows操作系統的bootloader信息,進而將控制權轉交給windows操作系統分區的第一個扇區當中的loader程序,完成windows啟動。
※·Kernel大概流程
·在boot loader開始讀取操作系統內核文件后,接下來就會將內核文件解壓縮后裝載到內存當中,然后根據內核提供的功能開始測試與加載各個設備(CPU,硬盤,網卡等)。這里的設備檢測與之前的BIOS自檢是不同的,此時內核程序已經完全接管了BIOS的工作,之后的操作都是由內核來完成的。內核文件通常放在/boot/vmliunz的文件。
·此時有個問題,boot loader 指明內核文件在/boot/vmliunz中,但是需要加載內核文件進內存,內核程序和內核文件都在硬盤上,但是需要驅動硬盤有得有硬盤的驅動程序,但是驅動程序都在硬盤上,那我們如何解決這個問題呢?
·為了解決以上的問題,我們采用一種叫虛擬文件系統來解決這個問題。虛擬文件系統(initial RAM DISK),同樣也放置再在/boot目錄下面,并且是以initrd開頭的文件。
◎·initrd文件的特點
注意:initrd既然是提供kerner驅動文件,為什么啟動bootloader可以加載initrd文件呢?
bootloader程序本身有所在的/boot分區的驅動文件,bootloader可以識別/boot分區,即可加載 initrd文件,initrd文件自帶很多的驅動文件,當kernel文件啟動需要使用其他分區文件時,找到initrd的文件的自帶的驅動文件,即可kernel可以識別其他分區上的文件。
·這個initrd文件的特點是:能夠通過boot loader程序將其加載到內存當中,然后這個文件會被解壓縮并在內存中模擬一個根文件系統,這個根文件系統能夠提供一個可以運行的程序,通過該程序可以加載在啟動過程中所需要的核心模塊(RAID LVM SCSI 等文件系統與磁盤的驅動程序),initrd加載完成后,會協助內核重新呼叫/sbin/init來執行后續的正常啟動。
·boot loader可以加載kernel和initrd,然后在內存中讓initrd加壓縮成根目錄,然后內核可以在這個之上加載合適的驅動程序,來加載硬盤等設備,之后釋放虛擬的根文件系統,并以制度的方式掛載磁盤上真實的根文件系統,之后就開始正常的啟動過程。
※·/sbin/init大概流程
·在內核,硬件及其驅動信息加載完畢后,內核會呼叫用戶控件的第一個執行程序/sbin/init ,init程序主要功能是準備軟件運行環境,包括系統主機名稱,網絡配置,文件系統格式等其他服務的啟動管理,而這些所有的操作都是通過init的配置文件來定義的。
·init的配置文件(后面詳細介紹)
Centos 5 :采用Sys V init 方式 ,/etc/inittab (串行啟動,啟動緩慢)
Centos 6 :采用Upstart方式 ,/etc/inittab /etc/init/*.conf (并行啟動,啟動快速)
Centos 7 :采用systemd方式,/usr/lib/systemd/* (非常之快)
§·系統啟動各個流程介紹相關工作與配置文件
※·POST工作
提問1:POST檢測與BIOS程序檢測有什么區別?
提問2:POST檢測如果沒有內存BIOS程序可以正常檢測嗎?
※·BIOS工作
◎·BIOS主要工作:
·BIOS是一段程序存儲在COMS固件中;
·BIOS根據COMS中的一些配置信息讀取硬件信息,并檢測該硬件是否存在;
·BIOS根據COMS信息進行硬件設備初始化。
※·boot loader工作與配置文件
◎·boot loader主要工作:
·boot loader的程序有很多比如:
LILO : linux loader (以前使用的程序)
GRUB : GRAND UNIFIED BOOTLOADER (/boot/grub) (現在使用的程序)
·boot loader位于MBR中的一段程序,MBR存儲在硬盤上;
·boot loader可以加載initrd文件到內存;
·boot loader主要功能識別,加載操作系統核心文件;
◎·GRUB 介紹:
*Grub程序如何加載到內存中
·MBR空間為512字節,grub程序肯定比MBR空間大,所以如何啟動grub有成為了一個問題。
·Linux將boot loader的程序運行與配置項加載分成三個階段(stage)來運行
Stage1:運行boot loader主程序,這個程序必須安裝在啟動區MBR中,MBR僅僅安裝的是boot loader 的最小程序,相關的配置文件沒有安裝在MBR中;
Stage1_5:識別文件系統,在MBR隨后的扇區中存放,主要用于與stage2所有的分區的文件系統進行交互。
比如在 /boot/grub目錄下有許多的 1_5文件。 /boot/grub ls ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 xfs_stage1_5 e2fs_stage1_5 grub.conf menu.lst splash.xpm.gz ufs2_stage1_5 fat_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 vstafs_stage1_5
Stage2:通過boot loader加載所有的配置文件及其相關的環境參數信息,這些配置文件及相關的環境參 數都存放于磁盤分區的/boot目錄下,如下:
# /boot/grub ll total 275K -rw-r--r--. 1 root root 63 Jul 19 18:21 device.map -rw-r--r--. 1 root root 14K Jul 19 18:21 e2fs_stage1_5 -rw-r--r--. 1 root root 13K Jul 19 18:21 fat_stage1_5 -rw-r--r--. 1 root root 12K Jul 19 18:21 ffs_stage1_5 -rw-------. 1 root root 1.1K Aug 17 11:07 grub.conf -rw-r--r--. 1 root root 12K Jul 19 18:21 iso9660_stage1_5 -rw-r--r--. 1 root root 13K Jul 19 18:21 jfs_stage1_5 lrwxrwxrwx. 1 root root 11 Jul 19 18:21 menu.lst -> ./grub.conf -rw-r--r--. 1 root root 12K Jul 19 18:21 minix_stage1_5 -rw-r--r--. 1 root root 15K Jul 19 18:21 reiserfs_stage1_5 -rw-r--r--. 1 root root 1.4K Nov 15 2010 splash.xpm.gz -rw-r--r--. 1 root root 512 Jul 19 18:21 stage1 -rw-r--r--. 1 root root 124K Jul 19 18:21 stage2 -rw-r--r--. 1 root root 12K Jul 19 18:21 ufs2_stage1_5 -rw-r--r--. 1 root root 12K Jul 19 18:21 vstafs_stage1_5 -rw-r--r--. 1 root root 14K Jul 19 18:21 xfs_stage1_5
·以上得知在/boot/grub目錄下最重要的是grub的配置文件及其各種文件系統的定義,當boot loader讀取了這些文件系統所定義的數據后,就能夠識別文件系統并讀取在該文件系統上的內核文件了,grub是目前使用最多最廣泛的Linux啟動管理程序。
◎·GRUB 配置文件:
*Grub目錄文件介紹(/boot/grub/)
·device.map : 定義grub裝載了哪里 ·e2fs_stage1_5 : 文件系統的定義 ·fat_stage1_5 : 文件系統的定義 ·ffs_stage1_5 : 文件系統的定義 ·grub.conf : grub的配置文件 ·iso9660_stage1_5 : 光盤文件系統的定義 ·jfs_stage1_5 : 文件系統的定義 ·menu.lst : 鏈接文件 鏈接到 ./grub.conf ·minix_stage1_5 : 文件系統的定義 ·reiserfs_stage1_5 : 文件系統的定義 ·splash.xpm.gz : 啟動時在grub底下的背景圖示 ·stage1 : tage1的相關說明 ·stage2 : tage2的相關說明 ·ufs2_stage1_5 : 文件系統的定義 ·vstafs_stage1_5 : 文件系統的定義 ·xfs_stage1_5 : 文件系統的定義
*Grub的配置文件 grub.conf文件詳解
·Grub的內容如下:/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=0 #表示默認的啟動條目,如果有多個操作系統,0表示定義的第1個title系統,1表示定義的第2個title系統,以此類推 timeout=5 #表示可供選擇的等待時間,如果超過5秒,則使用默認的啟動條目default啟動系統 splashimage=(hd0,0)/grub/splash.xpm.gz #表示定義啟動的背景圖片信息(圖片類型為 xpm 14bits顏色 640*480 壓縮為 gzip) hiddenmenu #啟動是否顯示菜單,默認是不顯示,如果想顯示菜單,注釋即可 title CentOS (2.6.32-642.el6.x86_64) #定義各個操作系統的名稱,title 0 root (hd0,0) #定義title 0 的啟動磁盤 啟動分區 kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #定義title 0 的內核存放路徑和一些其他的參數 initrd /initramfs-2.6.32-642.el6.x86_64.img #定義title 0 的initrd的存放路徑 title CentOS (2.6.32-431.el6.x86_64) # root (hd0,0) #注意? kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
注意?:
1.硬盤代號以小括號()括起來;
2.硬盤以hd表示,后面會接一組數字,數字之間以逗號隔開;
3.是以搜尋到的順序來作為磁盤的編號,而非根據磁盤的排線編號(多硬盤情況,搜尋的次序是根據bios中設置的啟動順序,而非插槽編號);
4.第一個搜尋的第一個磁盤編號為0,第二個為1,以此類推;
5.每塊磁盤的第一個分區編號為0,第二個為1,以此類推;
6.因此(hd0,0)就表示第一個磁盤的第一個分區;
*Grub的配置文件 grub.conf其他說明
·grub的命令行界面:(只能搜索/boot/grub下的文件名) #/root grub Probing devices to guess BIOS drives. This may take a long time. GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> find /grub/grub.conf find /grub/grub.conf (hd0,0) grub> help help blocklist FILE boot cat FILE chainloader [--force] FILE clear color NORMAL [HIGHLIGHT] configfile FILE device DRIVE DEVICE displayapm displaymem find FILENAME geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm] help [--all] [PATTERN ...] hide PARTITION initrd FILE [ARG ...] kernel [--no-mem-option] [--type=TYPE] makeactive map TO_DRIVE FROM_DRIVE md5crypt module FILE [ARG ...] modulenounzip FILE [ARG ...] pager [FLAG] partnew PART TYPE START LEN parttype PART TYPE quit reboot root [DEVICE [HDBIAS]] rootnoverify [DEVICE [HDBIAS]] serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY] setup [--prefix=DIR] [--stage2=STAGE2_ grub will attempt to avoid printing an terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address testvbe MODE unhide PARTITION uppermem KBYTES vbeprobe [MODE] grub> ·grub保護機制,只有通過認證才能修改grub.conf信息。可以通過以下方式來對grub.conf進行保護: 1.在第一個title之上添加password --md5 ******************主要用于保護編輯功能; 2.在某個title內添加password --md5 ****************** 主要用戶保護內核; 生成密碼的命令:grub-md5-crypt 如: [root@Centos6 /]#grub-md5-crypt Password: Retype password: $1$Ra1Tw$PzwS.OyWeskJUNI8pI.0Y1 # 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=0 timeout=30 splashimage=(hd0,0)/grub/splash.xpm.gz #hiddenmenu password --md5 $1$Ra1Tw$PzwS.OyWeskJUNI8pI.0Y1 title CentOS (2.6.32-642.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-642.el6.x86_64.img title mylinux root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
*grup常見問題的處理
·grub出現了問題導致系統無法啟動時該怎么辦?
1.用安裝光盤啟動,在安裝界面選擇 Rescue installed system進入緊急救援模式;
2.然后根據提示選擇語言和鍵盤格式;
3.選擇是否配置網卡,選擇no;
4.提示硬盤上的系統已經被找到并掛載在/mnt/sysimage下,continue用讀寫模式掛載;
5.輸入 chroot /mnt/sysimage 改變到磁盤根目錄;
6.# fdisk -l /dev/sda (使用fdisk檢查分區)
7.# grub-install /dev/sda (安裝grub引導程序到磁盤 /dev/sda 的MBR扇區)
8.# exit
或者將步驟7的安裝換成修復,如下:
7. sh-4.1#grub
8. grub>root (hd0,0) 探測下硬盤的文件系統
9. grub>setup (hd0)
10. grub>quit
·grub 的配置文件grub.conf出現了問題導致系統無法啟動時該怎么辦?
重新啟動系統無法進入系統:
1.用安裝光盤啟動,在安裝界面選擇 Rescue installed system進入緊急救援模式;
2.然后根據提示選擇語言和鍵盤格式;
3.選擇是否配置網卡,選擇no;
4.提示硬盤上的系統已經被找到并掛載在/mnt/sysimage下,continue用讀寫模式掛載;
5.輸入 chroot /mnt/sysimage 改變到磁盤根目錄;
6.grub>find (hd0,0)/
7.grub>root (hd#,N)
8.grub>kernel /PATH/TO/KERNEL_FILE
9.grub>initrd /PATH/TO/INITRD_FILE
10.grub>boot
·grub 安裝在別的硬盤上面如何操作?
·指定新硬盤上根文件分區
#grub-install –root–directory=/mnt /dev/hda
·在設備 /dev/hda 分區中需要 有一個目錄名為 /boot
#mkdir /mnt/boot
#mount /dev/hda1 /mnt/boot
#grub-install –root–directory=/mnt /dev/hda
·在/mnt/boot/ 下創建文件 grub.conf
※·initrd工作與配置文件
◎·initrd的主要工作
·boot loader程序可以把initrd文件加載到內存中去,在內存中解壓縮為小的根文件系統,提供一些可以運行 的程序,通過程序可以加載核心的模塊(各種文件系統的驅動程序)
·加載合適的驅動后,以只讀的方式掛載真正的根文件系統后,釋放自己虛擬的根文件系統,控制權交給kernel
◎·initrd的介紹
·initrd的工作就是配合kernel完成自身的根文件系統掛載,kernel掛載后,釋放自身,交由kernel繼續下去;
·initrd是一個虛擬的根文件系統,提供可以運行的程序,該程序可以加載核心的模塊(各種磁盤分區的文件 系統),由此initrd在硬盤有它的數據。
·initrd就是一個過渡的虛擬文件系統,完成工作后釋放自身。
◎·initrd的配置文件
·initrd的文件目錄在/boot下:(由于我的系統安裝的雙內核,所以文件比較多) config-2.6.32-431.el6.x86_64 symvers-2.6.32-431.el6.x86_64.gz config-2.6.32-642.el6.x86_64 symvers-2.6.32-642.el6.x86_64.gz System.map-2.6.32-431.el6.x86_64 System.map-2.6.32-642.el6.x86_64 initramfs-2.6.32-431.el6.x86_64.img vmlinuz-2.6.32-431.el6.x86_64 #initrd文件為:initramfs-2.6.32-431.el6.x86_64.img (雖然名稱不一樣,但是功能是一樣的) #內核文件為:vmlinuz-2.6.32-431.el6.x86_64 (一般都是為vmlinuz開頭的) #initrd文件與kernel文件的版本是一樣的 initramfs-2.6.32-642.el6.x86_64.img vmlinuz-2.6.32-642.el6.x86_64 注意:initrd文件是一個img一個文件,可以展開查看里面的文件,展開的文件結構和真實的根文件系統差不 多。
◎·initramfsXXXXXXXX.img內部文件介紹
#使用zcat initramfs-2.6.32-431.el6.x86_64.img | cpio -id 釋放img文件
[root@Centos6 /root/initrd]#zcat initramfs-2.6.32-431.el6.x86_64.img | cpio -id [root@Centos6 /root/initrd]#ls bin init lib pre-trigger tmp cmdline initqueue lib64 pre-udev usr dev initqueue-finished mount proc var dracut-004-409.el6 initqueue-settled netroot sbin emergency initqueue-timeout pre-mount sys etc initramfs-2.6.32-431.el6.x86_64.img pre-pivot sysroot
#看看2級文件目錄結構,看看目錄中有哪些文件??梢钥丛S多的相關命令 和相關的庫文件
[root@Centos6 /root/initrd]#tree -L 2 ├── bin │ ├── awk -> gawk │ ├── basename │ ├── bash │ ├── cat │ ├── cp │ ├── dash │ ├── dd │ ├── dmesg │ ├── gawk │ ├── grep │ ├── gzip │ ├── ln │ ├── loadkeys │ ├── ls │ ├── mkdir │ ├── mknod │ ├── mount │ ├── mv │ ├── plymouth │ ├── plymouthd │ ├── readlink │ ├── rm │ ├── rmdir │ ├── sed │ ├── setfont │ ├── sh -> dash │ ├── sleep │ ├── umount │ └── uname ├── dev │ └── pts ├── dracut-004-409.el6 ├── emergency │ └── 00plymouth-emergency.sh ├── etc │ ├── centos-release │ ├── crypttab │ ├── group │ ├── ld.so.cache │ ├── ld.so.conf │ ├── ld.so.conf.d │ ├── lvm │ ├── modprobe.d │ ├── plymouth │ ├── profile │ ├── rdma │ ├── system-release -> centos-release │ └── udev ├── init ├── initqueue ├── initqueue-finished ├── initqueue-settled ├── initqueue-timeout │ └── 99rootfallback.sh ├── initramfs-2.6.32-431.el6.x86_64.img ├── lib │ ├── dracut-crypt-lib.sh │ ├── dracut-lib.sh │ ├── firmware │ ├── kbd │ ├── modules │ ├── terminfo │ └── udev ├── lib64 │ ├── device-mapper │ ├── ld-2.12.so │ ├── ld-linux-x86-64.so.2 -> ld-2.12.so │ ├── libacl.so.1 -> libacl.so.1.1.0 │ ├── libacl.so.1.1.0 │ ├── libaio.so.1 -> libaio.so.1.0.1 │ ├── libaio.so.1.0.1 │ ├── libattr.so.1 -> libattr.so.1.1.0 │ ├── libattr.so.1.1.0 │ ├── libaudit.so.1 -> libaudit.so.1.0.0 │ ├── libaudit.so.1.0.0 │ ├── libblkid.so.1 -> libblkid.so.1.1.0 │ ├── libblkid.so.1.1.0 │ ├── libbz2.so.1 -> libbz2.so.1.0.4 │ ├── libbz2.so.1.0.4 │ ├── libc-2.12.so │ ├── libcap.so.2 -> libcap.so.2.16 │ ├── libcap.so.2.16 │ ├── libcryptsetup.so.1 -> libcryptsetup.so.1.1.0 │ ├── libcryptsetup.so.1.1.0 │ ├── libc.so.6 -> libc-2.12.so │ ├── libdevmapper-event-lvm2mirror.so -> device-mapper/libdevmapper-event-lvm2mirror.so │ ├── libdevmapper-event-lvm2raid.so -> device-mapper/libdevmapper-event-lvm2raid.so │ ├── libdevmapper-event-lvm2snapshot.so -> device-mapper/libdevmapper-event-lvm2snapshot.so │ ├── libdevmapper-event-lvm2.so.2.02 │ ├── libdevmapper-event-lvm2thin.so -> device-mapper/libdevmapper-event-lvm2thin.so │ ├── libdevmapper-event.so.1.02 │ ├── libdevmapper.so.1.02 │ ├── libdl-2.12.so │ ├── libdl.so.2 -> libdl-2.12.so │ ├── libdmraid-events-isw.so -> libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid-events-isw.so.1 -> libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid.so.1 -> libdmraid.so.1.0.0.rc16 │ ├── libdmraid.so.1.0.0.rc16 │ ├── libexpat.so.1 -> libexpat.so.1.5.2 │ ├── libexpat.so.1.5.2 │ ├── libfipscheck.so.1 -> libfipscheck.so.1.1.0 │ ├── libfipscheck.so.1.1.0 │ ├── libfreeblpriv3.chk │ ├── libfreeblpriv3.so │ ├── libgcc_s-4.4.7-20120601.so.1 │ ├── libgcc_s.so.1 -> libgcc_s-4.4.7-20120601.so.1 │ ├── libgcrypt.so.11 -> libgcrypt.so.11.5.3 │ ├── libgcrypt.so.11.5.3 │ ├── libglib-2.0.so.0 -> libglib-2.0.so.0.2800.8 │ ├── libglib-2.0.so.0.2800.8 │ ├── libgpg-error.so.0 -> libgpg-error.so.0.5.0 │ ├── libgpg-error.so.0.5.0 │ ├── liblvm2cmd.so.2.02 │ ├── libm-2.12.so │ ├── libm.so.6 -> libm-2.12.so │ ├── libnih.so.1 -> libnih.so.1.0.0 │ ├── libnih.so.1.0.0 │ ├── libnss_files-2.12.so │ ├── libnss_files.so.2 -> libnss_files-2.12.so │ ├── libpci.so.3 -> libpci.so.3.1.10 │ ├── libpci.so.3.1.10 │ ├── libpcre.so.0 -> libpcre.so.0.0.1 │ ├── libpcre.so.0.0.1 │ ├── libply.so.2 -> libply.so.2.0.0 │ ├── libply.so.2.0.0 │ ├── libply-splash-core.so.2 -> libply-splash-core.so.2.0.0 │ ├── libply-splash-core.so.2.0.0 │ ├── libpopt.so.0 -> libpopt.so.0.0.0 │ ├── libpopt.so.0.0.0 │ ├── libpthread-2.12.so │ ├── libpthread.so.0 -> libpthread-2.12.so │ ├── libreadline.so.6 -> libreadline.so.6.0 │ ├── libreadline.so.6.0 │ ├── libresolv-2.12.so │ ├── libresolv.so.2 -> libresolv-2.12.so │ ├── librt-2.12.so │ ├── librt.so.1 -> librt-2.12.so │ ├── libselinux.so.1 │ ├── libsepol.so.1 │ ├── libtinfo.so.5 -> libtinfo.so.5.7 │ ├── libtinfo.so.5.7 │ ├── libudev.so.0 -> libudev.so.0.5.1 │ ├── libudev.so.0.5.1 │ ├── libuuid.so.1 -> libuuid.so.1.3.0 │ ├── libuuid.so.1.3.0 │ ├── libz.so.1 -> libz.so.1.2.3 │ └── libz.so.1.2.3 ├── mount │ ├── 10resume.sh │ └── 99mount-root.sh ├── proc ├── sbin │ ├── biosdevname │ ├── blkid │ ├── blockdev │ ├── cache_check -> pdata_tools │ ├── cache_dump -> pdata_tools │ ├── cache_repair -> pdata_tools │ ├── cache_restore -> pdata_tools │ ├── cryptroot-ask │ ├── cryptsetup │ ├── dmeventd │ ├── dmraid │ ├── dmraid_scan │ ├── dmsetup │ ├── dmsquash-live-root │ ├── era_check -> pdata_tools │ ├── era_dump -> pdata_tools │ ├── era_invalidate -> pdata_tools │ ├── era_restore -> pdata_tools │ ├── initqueue │ ├── insmodpost.sh │ ├── killall5 │ ├── kpartx │ ├── loginit │ ├── losetup │ ├── lsmod │ ├── lspci │ ├── lvm │ ├── lvm_scan │ ├── mdadm │ ├── mdadm_auto │ ├── mdcontainer_start │ ├── md_finished.sh │ ├── mdmon │ ├── mdraid-cleanup │ ├── mdraid_start │ ├── modprobe │ ├── partx │ ├── pdata_tools │ ├── pidof -> killall5 │ ├── poweroff -> reboot │ ├── reboot │ ├── rmmod │ ├── setpci │ ├── switch_root │ ├── thin_check -> pdata_tools │ ├── thin_dump -> pdata_tools │ ├── thin_repair -> pdata_tools │ ├── thin_restore -> pdata_tools │ ├── udevadm │ └── udevd ├── sys ├── sysroot ├── tmp ├── usr │ ├── bin │ ├── lib │ ├── lib64 │ ├── libexec │ ├── sbin │ └── share
※·kernel工作與配置文件
◎·Kernel的主要工作
·硬件探測(核心硬件的探測)
·裝載驅動(有的驅動沒有到initrd中找驅動)
·掛載根文件系統
·啟動用戶空間的第一個進程init
※·init工作與配置文件
◎·init主要的工作/etc/inittab(Centos 5)中的格式
1運行默認級別
2系統軟件的運行環境腳本(/etc/rc.d/rc.sysinit)
·根據配置文件中的設定來設定主機名;
·打印歡迎信息;
·激活SELinux 和uedv;
·掛載所有定義在/etc/fastab文件中的文件系統;
·激活swap設備;
·檢測根文件系統,并實現以讀寫方式重新掛載;
·設置系統時鐘;
·根據/etc/sysctl.conf文件設定內核參數的值;
·激活LVM和RAID設備;
·加載額外的設備驅動程序;
·清理操作。
3不同級別啟動不同腳本服務,啟動不同的應用程序服務(/etc/rc.d/rc#.d/)
·相應級別下的對應的文件夾目錄,S開頭的全部啟動,K開頭的全部停止
4配置是否允許按下 ctrl+alt+del 就重新啟動的配置項目
5配置關于UPS的選項
6啟動終端 tty1 — tty6
7如果是啟動圖形界面,就會以相對應的程序啟動圖形化界面。
注意:(1)Centos 6的init程序為upstart,其配置文件為 /etc/init/*.conf;此些配置遵循upstart語法格式進行編程;
(2)Centos 6的服務控制事務實際上大多數并沒有使用upstart腳本來進行控制,而依然使用的是sysv風格的 腳本。
原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/44581
一如既往的優秀,給點小建議,可以通過一個思維導圖將整個開機啟動流程展示在圖片上。