?"1、簡述linux操作系統(tǒng)啟動流程
一圈浇、Linux系統(tǒng)的組成部分:內(nèi)核+根文件系統(tǒng)
1.1內(nèi)核的功能
進程管理:IPC(inter process communication)機制辨萍,有消息隊列项玛、semerphor妙色、shm拌夏、socket(跨主機之間的通信)
內(nèi)存管理:
文件系統(tǒng)管理:
網(wǎng)絡(luò)管理:
硬件驅(qū)動管理:
安全管理:
1.2運行中的系統(tǒng)環(huán)境可以分為內(nèi)核空間和用戶空間
內(nèi)核空間:內(nèi)核代碼推穷,表現(xiàn)為系統(tǒng)調(diào)用
用戶空間:應(yīng)用程序心包,表現(xiàn)為進程或者線程
1.3內(nèi)核設(shè)計流派
單內(nèi)核設(shè)計:把所有功能都集成在單個內(nèi)核內(nèi)
舉例:Linux
微內(nèi)核設(shè)計:將不同的功能分別設(shè)計成不同的內(nèi)核子系統(tǒng)
舉例:Windows,Solaris
1.4Linux內(nèi)核特點
內(nèi)核模塊化:.ko(kernel object)馒铃;例如文件系統(tǒng)蟹腾,硬件驅(qū)動,網(wǎng)絡(luò)協(xié)議等
支持內(nèi)核模塊的動態(tài)裝載和卸載
1.5內(nèi)核的組成部分
1)核心文件是/boot/vmlinuz-VERSION-release;
內(nèi)核官方站點是:https://www.kernel.org
2)模塊文件在:/lib/modules/VERSION-release
進入正題:Linux系統(tǒng)啟動流程
注:以下僅適用于PC架構(gòu)的主機和MBR架構(gòu)的
Linux系統(tǒng)啟動大概有以下步驟:
步驟一:加電自檢:power on system test(POST)
主要檢測硬件設(shè)備是否存在并是否能正常運行区宇,如:CPU娃殖、內(nèi)存、硬盤等议谷;CPU風(fēng)扇是否能夠正常運轉(zhuǎn)炉爆。有些設(shè)備不影響系統(tǒng)的正常啟動,例如鼠標(biāo)鍵盤等卧晓。
這些自檢的功能是由一個軟件程序來提供的芬首,叫BIOS(Basic Iput and Output System),該軟件是在CMOS芯片上的逼裆,通過給CMOS加電進而激活BIOS郁稍,BIOS會根據(jù)CMOS上的一些配置的硬件信息去讀取其他設(shè)備的硬件信息并且檢測其是否能夠正常運行,之后再進行硬件設(shè)備的初始化胜宇。
步驟二:選擇啟動順序耀怜,加載MBR(Boot Sequence)
? ? ? ?在硬件設(shè)備初始化之后,BIOS會列出一些可以啟動的裝置順序桐愉,接下來讀取第一個可以啟動設(shè)備中操作系統(tǒng)的核心文件封寞。就是在第一個可以啟動的硬盤的第一個扇區(qū)之內(nèi),也就是(MBR)仅财,該啟動管理程序叫做Boot Loader狈究。
Boot Loader 的作用就是加載操作系統(tǒng)的核心文件,并提交內(nèi)存當(dāng)中運行,隨后進行操作系統(tǒng)的安裝
Boot Loader的另一個主要功能是提供菜單信息
步驟三:加載系統(tǒng)內(nèi)核kernel抖锥,執(zhí)行系統(tǒng)初始化信息
Boot Loader?加載并將內(nèi)核文件加壓縮到內(nèi)存當(dāng)中亿眠,此時系統(tǒng)根據(jù)內(nèi)核文件會對硬件設(shè)備進行再一次的檢測和加載(網(wǎng)卡、磁盤磅废、CPU)纳像,與之前BIOS完全不同,這時BIOS已經(jīng)完全退出舞臺拯勉。有內(nèi)核程序全權(quán)接管竟趾。內(nèi)核文件通常放在/boot/linuz-VERSION-release.
這里有一個有趣的問題需要探討,類似于先有雞還是先有蛋的問題:因為Boot Loader加載內(nèi)核程序到內(nèi)存后宫峦,內(nèi)核程序就接管了一切事物岔帽,那么他要去加載內(nèi)核文件,而內(nèi)核文件在硬盤當(dāng)中导绷。眾所周知犀勒,也就是必須要有硬盤的驅(qū)動程序才能加載內(nèi)核文件,而硬盤的驅(qū)動又在內(nèi)核文件當(dāng)中妥曲,如此循環(huán)我們是沒辦法加載內(nèi)核文件的贾费。
所以這里也就引進了虛擬文件系統(tǒng)來解決這個問題檐盟。虛擬文件系統(tǒng)(Initail RAM DISK)褂萧,同樣也放在/boot目錄下面,并且是一個以initrd開頭的文件葵萎。
這個文件的特點是:他可以由Boot Loader加載至內(nèi)存并解壓縮导犹,然后模擬一個虛擬的根文件系統(tǒng),進而提供相關(guān)的驅(qū)動程序以只讀方式來加載硬盤設(shè)備中的真正根文件系統(tǒng)陌宿,大功告成之后把歷史舞臺交給根文件系統(tǒng)。
步驟四:啟動用戶空間的第一個執(zhí)行程序/sbin/init
在內(nèi)核波丰、硬件及驅(qū)動程序加載完畢后壳坪,內(nèi)核會呼叫用戶控件的第一個執(zhí)行程序/sbin/init,init主要功能是準(zhǔn)備軟件運行環(huán)境掰烟,包括主機名稱爽蝴、網(wǎng)絡(luò)配置、文件系統(tǒng)格式等其他服務(wù)的管理纫骑。這些操作都是根據(jù)init的配置文件來定義的蝎亚。
init的配置文件;
centos5:由于centos5采用的是SYsV init方式,其特點是啟動用戶空間的服務(wù)程序先馆,通常通過腳本進行发框,有依賴關(guān)系的服務(wù)將被串行啟動,這也就導(dǎo)致centos5啟動非常慢煤墙,其配置文件為 /etc/inittab
centos6:采用Upstart方式梅惯,其特點是守護進程間的通信依賴于D-BUS進行宪拥,因此,可基本實現(xiàn)并行啟動铣减;配置文件:/etc/inittab,/etc/init/*.conf
centos7:采用Systemd方式她君,其特點是服務(wù)只有在第一次被訪問時才會真正啟動起來;因此centos7系統(tǒng)的啟動過程非常之快:其配置文件為/usr/lib/systemd/*
在init中有非常重要的配置項目葫哗,叫系統(tǒng)的啟動級別缔刹。分為以下幾種:
1、0:關(guān)閉所有服務(wù)劣针,即關(guān)機校镐;
2、1:維護模式酿秸,單用戶模式灭翔;此級別允許用戶直接登錄而無需驗證;
3辣苏、2:維護模式晚胡,多用戶模式缺谴;需要用戶認證,會啟動網(wǎng)絡(luò)功能;
4换可、3:正常模式,完全多用戶的文本界面
5讨勤、4:預(yù)留模式
6购裙、5:正常模式,完全多用戶的圖形界面
7萌狂、6:關(guān)閉所有服務(wù)档玻,重啟
通常默認是3級別或者5級別,服務(wù)器上默認3級別茫藏;切換級別使用init 【0-6】误趴,查看級別使用who -r 或者runlevel
init的處理流程
init是通過自上而下的讀取inittab文件來依次執(zhí)行的,因此init處理流程是:
1务傲、讀取默認runlevel凉当,一般默認是3級別
2、使用/etc/rc.d/rc.sysinit進行系統(tǒng)的初始化
3售葡、由于采用的是3級別看杭,因此只進行13:3:wait:/etc/rc.d/rc 3
4、配置好【ctrl】+【alt】+【del】組合鍵的功能
5挟伙、配置不斷電系統(tǒng)pr楼雹、pf兩種機制
6、啟動mingetty6個終端
7、如果是5級別烘豹,則會以/etc/X11/prefdm-nodaemon啟動圖形界面
在init執(zhí)行的第二步執(zhí)行系統(tǒng)的初始化過程瓜贾,init根據(jù)/etc/rc.d/rc.sysinit中定義的內(nèi)容進行系統(tǒng)的初始化,/etc/rc.d/rc.sysinit所做的事情主要有以下幾點:
(1)根據(jù)配置文件中的設(shè)定來設(shè)置主機名(讀取/etc/sysconfig/network文件中的HOSTNAME進行)携悯;
(2)打印文本歡迎信息祭芦;
(3)激活seLINUX和udev;
(4)掛載所有定義在/etc/fstab文件中的文件系統(tǒng)憔鬼;
(5)激活swap設(shè)備
(6)檢測根文件系統(tǒng)龟劲,并實現(xiàn)以讀寫方式重新掛載
(7)設(shè)置系統(tǒng)時鐘
(8)根據(jù)/etc/sysctl.conf文件設(shè)定的內(nèi)核參數(shù)的值
(9)激活LVM和RAID設(shè)備;
(10)加載額外的設(shè)備驅(qū)動程序
(11)清理操作
在/etc/rc.d/rc.sysinit初始化完成系統(tǒng)后轴或,此時系統(tǒng)順利開始工作昌跌,不過此時我們還是啟動各項服務(wù)如:網(wǎng)絡(luò)功能、dhcp服務(wù)等功能照雁、所有以S開頭鏈接文件蚕愤,都被傳遞start參數(shù)以啟動,所有以K開頭的文件饺蚊,都被傳遞stop參數(shù)以停止
啟動相關(guān)服務(wù)之后萍诱,必須啟動登錄終端。
一般啟動6個虛擬終端:
tty1:2345:respawn:/sbin/mingetty tty1
tty2:2345:respawn:/sbin/mingetty tty2
.....
每個終端啟動后污呼,會立即通過此終端附加一個login登錄程序裕坊。
總結(jié):加電自檢-->Boot Sequence(BIOS)-->Boot Loader(MBR)-->Kernel(ramdisk)-->rootfs-->switchroot-->/sbin/init-->(/etc/inittab,/etc/init/*.conf)-->設(shè)置默認的運行級別-->系統(tǒng)初始化腳本-->關(guān)閉或啟動對應(yīng)級別下的服務(wù)-->啟動終端
2、簡述grub啟動引導(dǎo)程序配置及命令行接口詳解??
2.1
在BIOS讀取相關(guān)信息后燕酷,接下來就去第一個可以啟動的設(shè)備當(dāng)中MBR加載Boot Loader主程序籍凝,BootLoader提供具有菜單功能,直接加載內(nèi)核信息苗缩,以及相關(guān)的控制權(quán)轉(zhuǎn)交功能饵蒂。MBR只有512字節(jié),其中446字節(jié)加載Boot Loader酱讶。因為Boot Loader只有446個bytes退盯,所以不可能容納那么多功能,因此Linux將Boot Loader的程序運行和配置項加載分成三個階段(stage)來運行:
stage1:運行Boot Loader主程序浴麻,這個程序必須被安裝在啟動區(qū)得问,即MBR僅安裝Boot Loader的最小主程序囤攀。
stage1_5:在MBR隨后的分區(qū)存放软免,主要用于與stage2所在的分區(qū)的文件系統(tǒng)進行交互
stage2:通過Boot Loader加載的所有配置文件及相關(guān)的環(huán)境參數(shù)信息,這些都存放在磁盤分區(qū)/boot下焚挠。
由此可知/boot/grub中最重要的就是grub.conf以及各種文件系統(tǒng)的定義膏萧,Boot Loader通過讀取這些文件系統(tǒng)后就能識別在/boot下的內(nèi)核文件了。
/boot/grub/grub.conf中各種參數(shù)解析:
default:設(shè)定默認的內(nèi)核文件
timeout:系統(tǒng)隔多久啟動默認操作系統(tǒng)
splashimage:grub菜單背景圖片;
圖片:xpm格式榛泛,壓縮為gzip蝌蹂,14bits顏色,640X480曹锨;
hiddenmenu:隱藏選擇菜單孤个;
title:定義一個操作系統(tǒng)或內(nèi)核
root:指定引導(dǎo)當(dāng)前操作系統(tǒng)的分區(qū)
kernel:指定內(nèi)核文件路徑,根文件系統(tǒng)所在的硬盤設(shè)備沛简,以及相關(guān)的內(nèi)核參數(shù)
initrd:指定輔助內(nèi)核完成啟動的虛擬文件系統(tǒng)路徑
2.2GRUB界面支持命令行接口齐鲤,在GRUB界面按照提示輸入e、b椒楣、c等命令進行相應(yīng)的編輯给郊,輸入c進入命令行模式:
help:獲取幫助信息
find:文件查找,方法find (hd#捧灰,#)/
root kernel initrd boot 同上
3淆九、實現(xiàn)kickstart文件制作與光盤鏡像制作"
kickstart是RedHat/CentOS/Fedora等系統(tǒng)實現(xiàn)無人值守自動化安裝的一種安裝方式,系統(tǒng)管理>員可將安裝過程中需要配置的所有參數(shù)集成于一個kickstart文件中毛俏,而后在系統(tǒng)安裝時炭庙,安裝程>序通過讀取事先給定的這個kickstart文件自動化地完成配置并安裝完成。
制作kickstart文件的方式:
?1)手動編輯拧抖,可以依據(jù)某個模板進行修改煤搜。
? 2)使用kickstart文件創(chuàng)建工具:system-config-kickstart進行配置,同樣可以導(dǎo)入某個模板進行修改唧席。
本文主要介紹使用 kickstart文件創(chuàng)建工具:system-config-kickstart 來定制kickstart:必須確保system-config-kickstart已經(jīng)安裝擦盾,如果沒有安裝可以使用yum安裝:
? ? [root@jacklin ~]# yum install system-config-kickstart
在命令行上運行system-config-kickstart命令即可啟動窗口界面:
? ? [root@jacklin isolinux]# system-config-kickstart
kickstart配置程序:
可以使用Ctrl+O打開文件
1、*如上圖所示*淌哟,首先進行基本配置迹卢,可以配置默認語言、鍵盤徒仓、時區(qū)還有根密碼腐碱,根密碼會在輸入成功后進行加密,高級配置中的目標(biāo)體系有三個選項掉弛,一般都會勾選第一個症见,也可以根據(jù)實際情況來選擇。
2殃饿、安裝方法執(zhí)行新安裝谋作,這里選擇的是HTTP方式,服務(wù)器時aliyun鏡像乎芳,選擇這一項要確保電腦能夠連接網(wǎng)絡(luò)遵蚜。
3帖池、選擇安裝類型,是否使用grub口令以及安裝選項和內(nèi)核參數(shù)
4吭净、選擇是否清除主引導(dǎo)記錄睡汹、是否刪除現(xiàn)存分區(qū)、是否初始化磁盤標(biāo)簽以及設(shè)置磁盤分區(qū)
5寂殉、配置網(wǎng)絡(luò)
6囚巴、驗證配置,默認勾選使用屏蔽口令
7友扰、是否啟用防火墻文兢,最好設(shè)置為禁用。
8焕檬、是否安裝圖形環(huán)境
9姆坚、選擇需要的軟件安裝包
10、安裝前執(zhí)行的腳本实愚,注意運行環(huán)境是微型linux系統(tǒng)環(huán)境
11兼呵、安裝后執(zhí)行的腳本,這里可以寫一些用戶登錄信息和配置yum倉庫腊敲。
12击喂、完成配置后記得進行保存,保存于root下
13碰辅、用ksvalidator命令檢查kickstart文件是否有語法錯誤:
[root@jacklin ~]# ksvalidator ks.cfg
如無報錯信息懂昂,至此kickstart文件制作完成。
制作光盤引導(dǎo)鏡像:
將bootloader没宾、Kernel凌彬、initrd及kickstart文件制作成光盤鏡像,以實現(xiàn)本地光盤鏡像引導(dǎo)安裝CentOS系統(tǒng)循衰,其中anaconda應(yīng)用程序位于initrd提供的rootfs中铲敛,
而后續(xù)安裝用到的程序包來自阿里云鏡像站點(mirrors.aliyun.com),剛才在制作kickstart文件時已經(jīng)手動指定会钝。
1)通過df -h確認光盤是否已經(jīng)掛載伐蒋,下圖顯示的 /dev/sr0即是光盤的映射文件
2)創(chuàng)建目錄/myboot,并復(fù)制光盤的isolinux目錄迁酸、剛才制作的kickstart文件ks.cfg 到/myboot目錄下:
3)從光盤復(fù)制過來的文件都只有只讀權(quán)限先鱼,需要添加寫權(quán)限
4)修改/myboot/isolinux/isolinux.cfg配置文件,向默認啟動的label所定義的內(nèi)核傳遞參數(shù)奸鬓,執(zhí)行kickstart文件的存放位置:
?[root@jacklin myboot]# vim isolinux/isolinux.cfg
光標(biāo)所示處可以向內(nèi)核傳遞參數(shù)焙畔,指明ks文件所處的位置。注意:無論kickstart文件是存放在待制作的光盤鏡像中的哪個路徑下全蝶,都可以在此處通過向內(nèi)核追加參數(shù)的方式指明kickstart文件位置闹蒜。
5)設(shè)置系統(tǒng)引導(dǎo)時等待timeout的時間,可以設(shè)置更小以節(jié)約等待時間
6)制作光盤鏡像:
[root@jacklin myboot]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /myboot/boot.iso ./
7)通過xshell自帶的ftp功能將boot.iso傳輸?shù)絎indows桌面
8)新建虛擬機測試光盤是否可用: