POST(加電自檢)-->bootsequence(引導(dǎo)次序,BIOS)-->Boot Loader(MBR)-->Kernel+ramdisk(臨時(shí)根,initrd,initramfs)-->mount rootfs(根切換)-->/sbin/init(配置文件,CentOS 5:/etc/inittab, CentOS6 /etc/init/*.conf)
設(shè)置默認(rèn)運(yùn)行級(jí)別-->指定系統(tǒng)初始化腳本-->初始化額外的硬件設(shè)備并加載驅(qū)動(dòng)程序-->啟動(dòng)(關(guān)閉)服務(wù)(/etc/rc.d/rc#.d,/etc/rc.d/init.d/)-->/etc/rc.d/rc.local-->設(shè)置CtrlAltDel組合的功能-->啟動(dòng)終端(mingetty),并在終端附加登錄程序(login)-->如果級(jí)別為5,則要啟動(dòng)X server;
一、POST加電自檢:
當(dāng)我們打開計(jì)算機(jī)電源,計(jì)算機(jī)首先會(huì)讀取BIOS信息,BIOS中記錄了CPU、內(nèi)存、設(shè)備啟動(dòng)序列、硬盤等信息;然后對(duì)系統(tǒng)啟動(dòng)關(guān)鍵硬件設(shè)備進(jìn)行檢測(cè),如果出現(xiàn)嚴(yán)重故障則停機(jī);如果是一般故障,會(huì)發(fā)出報(bào)警提示,等待故障清楚;如果沒有故障,加電自檢完成。
BIOS(Basic Input Output System)是保存于主板CMOS芯片中的程序代碼;
CMOS(ComplementaryMetal Oxide Semiconductor):是主板上的ROM芯片;
二、獲取引導(dǎo)次序,讀取MBR:
加電自檢完成之后:CPU會(huì)讀取BIOS信息中的設(shè)備啟動(dòng)序列,按照次序引導(dǎo),按次序找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序(MBR)的設(shè)備即為啟動(dòng)PC server所用到的設(shè)備;
可作為啟動(dòng)設(shè)備:光驅(qū),便攜式移動(dòng)設(shè)備,硬盤,網(wǎng)卡(系統(tǒng)引導(dǎo),PXE)
PXE實(shí)現(xiàn)系統(tǒng)引導(dǎo):DHCP,tftp(kernel+ramdisk)
MBR(主引導(dǎo)記錄,Master BootRecord):
MBR位于磁盤的0磁道0扇區(qū),占用512個(gè)字節(jié):
1 2 3 | 446bytes:Boot Loader,主程序; 64bytes:PartitionTable,硬盤分區(qū)表,每16bytes標(biāo)記一個(gè)分區(qū),一共4分區(qū);3個(gè)主分區(qū),1個(gè)擴(kuò)展分區(qū),擴(kuò)展分區(qū)還可以劃分為若干個(gè)邏輯分區(qū); 2bytes:MBR有效性標(biāo)記; |
三、Boot Loader:
操作系統(tǒng)內(nèi)核運(yùn)行之前的一段小程序,選擇要啟動(dòng)的內(nèi)核(在當(dāng)前磁盤的某或某些分區(qū)上);
1、Boot Loader比較常見的有GRUB和LILO:
1 2 3 4 5 | LILO:LInux Loader 0-1023范圍內(nèi)的柱面構(gòu)成的分區(qū)的內(nèi)核文件,通常應(yīng)用與嵌入式計(jì)算機(jī); GRUB:GRand Unified Bootloader CentOS 5&6:Grub 0.97 CentOS7:Grub2 1.96 |
2、GRUB:GRand Unified Bootloader
1)、grub程序由兩段組成:
1 2 3 | stage1:位于MBR中(0柱面 0磁道 1扇區(qū)); stage1_5:位于MBR隨后的扇區(qū); stagr2:讀取grub.conf配置文件,并實(shí)現(xiàn)引導(dǎo)功能的擴(kuò)展; |
grub目錄和配置文件位置:
2)、grub的功能:
1 2 3 4 5 6 7 8 9 10 | 1、提供菜單,并提供交互式接口; e:進(jìn)入編輯模式; a:直接修改內(nèi)核參數(shù); c:進(jìn)入grub命令行模式; 2、允許用戶選擇要啟動(dòng)的內(nèi)核或系統(tǒng); 允許傳遞引導(dǎo)參數(shù)給內(nèi)核; 選擇界面可隱藏; 3、為編輯功能提供保護(hù)機(jī)制; 啟用內(nèi)核文件:選擇運(yùn)行制定的內(nèi)核需要先輸入密碼; 傳遞參數(shù):使用e命令需要先輸入密碼; |
在菜單選擇倒計(jì)時(shí)界面按任意鍵進(jìn)入grub菜單:
按e鍵進(jìn)入編輯菜單可以看到kernel和initrd:
3)、grub命令行接口:
1 2 3 4 5 6 7 8 9 10 11 | >root(DEVICE):指定哪個(gè)分區(qū)為接下來要啟動(dòng)的系統(tǒng)或內(nèi)核文件所在的分區(qū); 所有硬盤都識(shí)別為hd; 不同的硬盤基于數(shù)字標(biāo)識(shí):如hd0,hd1等; 同一個(gè)硬盤上的不同分區(qū),也使用數(shù)字標(biāo)識(shí),如hd0,0 hd1,5; > find (DEVICE) /path/to/file :查找文件 >kernel:指定要運(yùn)行的內(nèi)核文件; >initrd:為要運(yùn)行的內(nèi)核指定其可用的ramdisk文件; >boot:啟動(dòng)此前配置好的內(nèi)核或系統(tǒng); |
按c鍵進(jìn)入grub命令行接口:
4)、配置文件grub.conf:
文件位置:/boot/grub/grub.conf
參數(shù):
1 2 3 4 5 6 7 8 | default=:選擇第幾個(gè)title配置的內(nèi)核或系統(tǒng),各title從0開始編號(hào); timeout= #:菜單顯示的超時(shí)時(shí)長; splashimage= /path/to/some_image_file :指定菜單的背景圖片;此圖片只能為14bits色,xpm格式, gzip 壓縮; hiddenmenu:隱藏菜單 titleTILTE STRING:顯示于菜單中的標(biāo)題; root:指定引導(dǎo)分區(qū); kernel:指定kernel位置; initrd:指定initramfs位置; |
在grub菜單按a鍵可在內(nèi)核加載前編輯內(nèi)核參數(shù):
常用參數(shù):
1 | single:單用戶模式啟動(dòng); |
5)、grub保護(hù)機(jī)制:
1 2 3 4 5 6 | 1、生成密碼: #grub-md5-crypt 2、保護(hù)編輯功能,則需要title之外的添加: #password--md5 密碼串 3、保護(hù)使用某內(nèi)核,則需要內(nèi)核對(duì)應(yīng)的title之下添加: #password--md5 密碼串 |
6)、安裝grub的方式:
1 2 3 4 5 6 7 8 | 使用grub- install 命令: #grub-install [--root-directory=/path/to/somewhere] DEVICE --root-directory= /path/to/somewhere /path/to/somewhere :內(nèi)核及initrd文件所在的分區(qū)的掛載點(diǎn)的父目錄,且此掛載點(diǎn)必須叫boot; 例如: /dev/sdb1 : /mnt/boot #grub-install --root-directory=/mnt /dev/sdb |
四、kernel+ramdisk:
根據(jù)grub設(shè)定的內(nèi)核映像所在路徑,系統(tǒng)讀取內(nèi)核文件,并進(jìn)行解壓縮操作;系統(tǒng)將解壓縮后的內(nèi)核放在內(nèi)存中,完成內(nèi)核自身初始化;探測(cè)所能識(shí)別的硬件設(shè)備,并加載驅(qū)動(dòng)程序,完成核心環(huán)境建立;
要讀取內(nèi)核文件必須訪問根文件系統(tǒng)要加載根文件系統(tǒng)所在的設(shè)備,而此時(shí)根文件系統(tǒng)沒有掛載,要掛載根文件系統(tǒng)需要根文件系統(tǒng)所在設(shè)備的驅(qū)動(dòng)程序。為解決這個(gè)問題,grub在加載內(nèi)核同時(shí),也把ramdisk加載到內(nèi)存中并運(yùn)行;
展開ramdisk鏡像文件:
ramdisk在內(nèi)存中表現(xiàn)為一個(gè)虛擬根文件系統(tǒng)initfs,里面有如同Linux根目錄下的bin、sbin、dev、etc、lib、proc、usr、var、tmp等目錄;initfs將內(nèi)核與真實(shí)根建立聯(lián)系,內(nèi)核通過initfs加載驅(qū)動(dòng)程序,然后進(jìn)行根切換,掛載真實(shí)根目錄;至此內(nèi)核加載完成;
1、kernel:
內(nèi)核的功能:進(jìn)程管理、文件系統(tǒng)、硬件驅(qū)動(dòng)(在內(nèi)核模式下運(yùn)行)、內(nèi)存管理、安全功能(SELinux)、網(wǎng)絡(luò)子系統(tǒng);
1)、內(nèi)核設(shè)計(jì)流派:
1 2 3 4 5 6 7 8 9 10 | 單內(nèi)核體系結(jié)構(gòu): linux:支持模塊化,模塊可以動(dòng)態(tài)裝卸載 linux內(nèi)核:核心+外圍模塊 核心: /boot/vmlinux-VERSION-release 模塊: /lib/modules/VERSION-release .ko:kernel object ramdisk: /boot/initramfs-VERSION-release .img 在內(nèi)核啟動(dòng)過程中裝載根文件系統(tǒng)時(shí)有用;模塊間有可能存在依賴關(guān)系; 微內(nèi)核體系結(jié)構(gòu): windows、solaris |
2)、內(nèi)核的某些功能:
1 2 3 | 編譯進(jìn)內(nèi)核本體 [*] 編譯成內(nèi)核模塊 [M] 不選擇使用 [ ] |
3)、內(nèi)核模塊管理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #lsmod:顯示內(nèi)核已裝載模塊 動(dòng)態(tài)裝卸載模塊: #modprobe -rMOD_NAME:卸載; #modprobe MOD_NAME:裝載; #insmod/path/to/module_file:裝載; #rmmod MOD_NAME:卸載; 查看某模塊的詳細(xì)信息: #modinfo MOD_NAME 檢查并生成模塊間依賴關(guān)系的命令: #depmod |
2、ramdisk:
1 2 3 4 5 6 | CentOS 5:SysV,init; /etc/inittab-- > /etc/rc .d /rc .sysinit; CentOS 6:upstart,init; /etc/init/ *.conf( /etc/inittab ) --> /etc/rc .d /rc .sysinit #chkconfig CentOS 7:systemd, init; /usr/lib/systemd/system/ ;借鑒MAC OS X; #systemctl |
五、/sbin/init:
內(nèi)核加載完成之后,第一個(gè)運(yùn)行的程序就是/sbin/init,該文件會(huì)先讀取/etc/init/rcS.conf文件:
設(shè)定系統(tǒng)運(yùn)行級(jí)別:
1 2 3 4 5 6 7 8 9 10 | 0-6:7個(gè)運(yùn)行級(jí)別: 0:關(guān)機(jī); 1:single usermode,single,s,S,不啟動(dòng)網(wǎng)絡(luò)功能,不啟動(dòng)用戶認(rèn)證,單用戶模式(維護(hù)模式); 2:multi usermode,不支持NFS功能; 3:完全多用戶模式,文本接口,不啟動(dòng)圖形界面; 4:未使用;預(yù)留級(jí)別; 5:完全多用戶模式,圖形接口; 6:重啟; #init:切換運(yùn)行級(jí)別; |
六、/etc/rc.d/rc.sysinit:系統(tǒng)初始化腳本
查看/etc/rc.d/rc.sysinit文件部分內(nèi)容:
初始化設(shè)置流程:
1 2 3 4 5 6 7 8 9 10 11 | 設(shè)定主機(jī)名:讀取 /etc/sysconfig/network 文件中的HOSTNAME參數(shù),并以之設(shè)定主機(jī)名; 打印文本歡迎信息: 激活SELinux和udev; 掛載 /etc/fstab 文件中定義的其他文件系統(tǒng); 激活swap; 檢測(cè)根文件系統(tǒng),并以讀寫方式重新掛載; 設(shè)置系統(tǒng)時(shí)鐘; 根據(jù) /etc/sysctl .conf設(shè)置內(nèi)核參數(shù); 激活LVM和RAID設(shè)備; 加載額外設(shè)備的驅(qū)動(dòng)程序; 清理操作; |
七、啟動(dòng)內(nèi)核模塊:
依據(jù)/etc/modprobe.d/*.conf文件裝載內(nèi)核模塊:
八、執(zhí)行指定運(yùn)行級(jí)別的腳本程序:
/etc/rc.d/rc#.d/:啟動(dòng)指定的默認(rèn)級(jí)別的默認(rèn)為啟動(dòng)的服務(wù),停止指定的級(jí)別下默認(rèn)為關(guān)閉的服務(wù);
查看/etc/rc.d/rc3.d/目錄:
1、目錄中為鏈接文件指向服務(wù)腳本:
1 2 3 4 | S ##:默認(rèn)啟動(dòng)的服務(wù); K ##:默認(rèn)停止的服務(wù); ##:01-99,數(shù)字越小,越優(yōu)先啟動(dòng)或關(guān)閉; 先啟動(dòng)的后關(guān)閉(自動(dòng)解決依賴關(guān)系); |
2、chkconfig:創(chuàng)建或改變連接文件;
1 2 3 4 5 6 7 8 9 10 11 | #chkconfig --add SRV_SCRIPT:創(chuàng)建; #chkconfig --del SRV_SCRIPT:刪除; #chkconfig SRV_SCRIPT {on|off}:開機(jī)自動(dòng){啟動(dòng)|關(guān)閉}; 默認(rèn)為2345級(jí)別; --level ###### 腳本如果期望能夠被chkconfig命令使用,要在腳本中添加如下行: #chkconfig:- 85 15 -:當(dāng)此腳本由chkconfig控制時(shí),默認(rèn)哪些級(jí)別就是開啟的; 85:啟動(dòng)優(yōu)先級(jí); 15:關(guān)閉優(yōu)先級(jí); |
九、/etc/rc.d/rc.local:
是一個(gè)腳本,通常為系統(tǒng)啟動(dòng)完成的最后運(yùn)行一個(gè)腳本;
定義一些組合鍵的功能:通常是Ctrl+Alt+Delete;
初始化字符終端;
如果有需要,啟動(dòng)圖形終端;
十、/bin/logon:
登陸程序:顯示登陸提示符,等待用戶輸入username和passwd;
本文出自 “小馬的學(xué)習(xí)記錄” 博客,請(qǐng)務(wù)必保留此出處http://masachencer.blog.51cto.com/8683770/1672797
聯(lián)系客服