linux操作系統(tǒng)啟動(dòng)流程
POST系統(tǒng)
X86平臺(tái)硬件被設(shè)計(jì)成一旦通電會(huì)自動(dòng)運(yùn)行ROM中的程序,所以當(dāng)主機(jī)加電時(shí)惑芭,CPU尋址ROM,使存放于ROM中的POST系統(tǒng)運(yùn)行,該系統(tǒng)用于硬件自檢,內(nèi)容包括檢查內(nèi)存磅崭,I/O設(shè)備是否存在御吞,顯示設(shè)備是否存在等麦箍,如果正常,則進(jìn)入下一步陶珠。Boot Sequence
加電自檢完成后挟裂,位于ROM中的BIOS系統(tǒng)運(yùn)行,BIOS為基本輸入輸出系統(tǒng)揍诽,此時(shí)BIOS中的Boot Sequence會(huì)按次序查找各引導(dǎo)設(shè)備诀蓉,其中第一個(gè)有bootloader(引導(dǎo)程序)的設(shè)備即為本次啟動(dòng)要用到的設(shè)備栗竖,BIOS會(huì)讀取該設(shè)備的MBR,MBR即為Master Boot Record渠啤,大小為512bytes狐肢,其中前446bytes為bootloader,之后46bytes為分區(qū)表沥曹,后2bytes為魔術(shù)份名,當(dāng)標(biāo)記55AA時(shí)即表示MBR有效,否則無效妓美。BootLoader
現(xiàn)Linux用GRUB作為bootloader僵腺,GRUB分為兩段,1st stage為bootloader壶栋,用于把第二階段加載到內(nèi)存從而完整實(shí)現(xiàn)更多功能辰如,2nd stage 即為存放于內(nèi)核中的/boot/grub,其中1.5stage可做為文件系統(tǒng)驅(qū)動(dòng)贵试,使文件系統(tǒng)中的2nd stage可以被識(shí)別琉兜。UEFI與GPT分區(qū)格式不同于MBR。Kernel
通過GRUB會(huì)加載內(nèi)核程序到內(nèi)存中毙玻,首先內(nèi)核會(huì)自身初始化呕童,探測(cè)可識(shí)別到的所有硬件設(shè)備,在內(nèi)存上劃出臨時(shí)根ramdisk淆珊,并轉(zhuǎn)換為基于fs的文件系統(tǒng)來防止雙緩沖夺饲,通過該系統(tǒng)加載硬件所需要的驅(qū)動(dòng)。rootfs
有了臨時(shí)根施符,有了驅(qū)動(dòng)往声,就可以以只讀方式掛載硬件上的真正的根文件系統(tǒng),使用只讀方式是為了防止因內(nèi)核BUG等原因造成破壞戳吝。 有了根文件系統(tǒng)浩销,將會(huì)啟動(dòng)用戶空間的第一個(gè)應(yīng)用程序init程序,其中CentOS7使用Systemd作為第一個(gè)程序init
init程序?qū)⒆x取/etc/inittab文件中的配置听哭,根據(jù)運(yùn)行級(jí)別慢洋,運(yùn)行對(duì)應(yīng)的腳本程序來開啟或關(guān)閉對(duì)應(yīng)的服務(wù)程序。其中系統(tǒng)初始化腳本為/etc/rc.d/rc.sysinit陆盘,該文件配置了
(1) 設(shè)置主機(jī)名普筹;hostname
(2) 設(shè)置歡迎信息
(3) 激活udev和selinux;
(4) 掛載/etc/fstab文件中定義的所有文件系統(tǒng)隘马;
(5) 檢測(cè)根文件系統(tǒng)太防,并以讀寫方式重新掛載根文件系統(tǒng); (之前是只讀掛載)
(6) 設(shè)置系統(tǒng)時(shí)鐘酸员; (讀取硬件時(shí)鐘實(shí)現(xiàn))
(7) 根據(jù)/etc/sysctl.conf文件來設(shè)置內(nèi)核參數(shù)蜒车;
(8) 激活lvm及軟raid設(shè)備讳嘱;
(9) 激活swap設(shè)備;(fstab已包含)
(10) 加載額外設(shè)備的驅(qū)動(dòng)程序酿愧;
(11) 清理操作沥潭;
- 運(yùn)行級(jí)別:
分為7個(gè)級(jí)別,分別為0-6
0:關(guān)機(jī), shutdown
1:?jiǎn)斡脩裟J?single user)嬉挡,root用戶钝鸽,無須認(rèn)證;維護(hù)模式棘伴;
2寞埠、多用戶模式(multi user)屁置,會(huì)啟動(dòng)網(wǎng)絡(luò)功能焊夸,但不會(huì)啟動(dòng)NFS(網(wǎng)絡(luò)文件系統(tǒng));維護(hù)模式蓝角;
3阱穗、多用戶模式(mutli user),完全功能模式使鹅;文本界面揪阶;
4、預(yù)留級(jí)別:目前無特別使用目的患朱,但習(xí)慣以同3級(jí)別功能使用鲁僚;
5、多用戶模式(multi user)裁厅, 完全功能模式冰沙,圖形界面;
6执虹、重啟拓挥,reboot
開機(jī)默認(rèn)級(jí)別為:3或 5
grub啟動(dòng)引導(dǎo)程序配置及命令行接口詳解
- grub的命令行接口
help: 獲取幫助列表
help KEYWORD: 詳細(xì)幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:查找文件
root (hd#,#) 設(shè)定根設(shè)備
-
kernel /PATH/TO/KERNEL_FILE: 內(nèi)核文件路徑
- 內(nèi)核通常為vmlinuz,z表示是壓縮格式存放
- 設(shè)定本次啟動(dòng)時(shí)用到的內(nèi)核文件袋励;額外還可以添加許多內(nèi)核支持使用的cmdline參數(shù)侥啤;
- 例如:init=/path/to/init, selinux=0
-
initrd /PATH/TO/INITRAMFS_FILE:
- 設(shè)定為選定的內(nèi)核提供額外文件的ramdisk;
- 需要與內(nèi)核版本號(hào)完完全全匹配
boot: 引導(dǎo)啟動(dòng)選定的內(nèi)核茬故;
手動(dòng)在grub命令行接口啟動(dòng)系統(tǒng):
grub> root (hd#,#) grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE grub> initrd /initramfs-VERSION-RELEASE.img grub> boot
grub配置文件
-
配置文件:/boot/grub/grub.conf
配置項(xiàng):- default=#: 設(shè)定默認(rèn)啟動(dòng)的菜單項(xiàng)盖灸;落單項(xiàng)(title)編號(hào)從0開始;
- timeout=#:指定菜單項(xiàng)等待選項(xiàng)選擇的時(shí)長(zhǎng)磺芭;(超時(shí)時(shí)間糠雨,超時(shí)則選擇默認(rèn)菜單項(xiàng))
- splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;xpm格式徘跪,只能使用14位色甘邀,默認(rèn)的圖片需要800*600分辨率才能顯示琅攘,可以替換為更小的,使用gimp可以編輯圖片
- hiddenmenu:隱藏菜單松邪;
- password [--md5] STRING: 菜單編輯認(rèn)證坞琴;設(shè)定認(rèn)證方式,匹配才可以編輯
- title TITLE:定義菜單項(xiàng)“標(biāo)題”, 可出現(xiàn)多次逗抑;
- root (hd#,#):grub查找stage2及kernel文件所在設(shè)備分區(qū)剧辐;為grub的“根”;
- kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:?jiǎn)?dòng)的內(nèi)核
- initrd /PATH/TO/INITRAMFS_FILE: 內(nèi)核匹配的ramfs文件;
- password [--md5] STRING: 啟動(dòng)選定的內(nèi)核或操作系統(tǒng)時(shí)進(jìn)行認(rèn)證邮府;
grub-md5-crypt命令:生成要保護(hù)的密碼串荧关,將密碼串貼到--md5 密碼串,這要配置文件里的密碼就不會(huì)明文暴露
- 進(jìn)入單用戶模式:
- (1) 編輯grub菜單(選定要編輯的title褂傀,而后使用e命令);
- (2) 在選定的kernel后附加
- 1, s, S或single都可以忍啤;
- (3) 在kernel所在行,鍵入“b”命令仙辟;
實(shí)現(xiàn)kickstart文件制作與光盤鏡像制作
kickstart文件的格式
- 命令段:
- 指定各種安裝前配置選項(xiàng)同波,如鍵盤類型等;
- 必備命令
- 可選命令
- 程序包段:
- 指明要安裝程序包叠国,以及包組未檩,也包括不安裝的程序包;
- %packages 程序包段開始
- @group_name 安裝的包組
- package 安裝的包
- -package 不安裝的粟焊,也可能因?yàn)橐蕾嚩话惭b
- %end 程序包段結(jié)束
- 指明要安裝程序包叠国,以及包組未檩,也包括不安裝的程序包;
- 指定各種安裝前配置選項(xiàng)同波,如鍵盤類型等;
- 腳本段:
- %pre:安裝前腳本
- 運(yùn)行環(huán)境:運(yùn)行安裝介質(zhì)上的微型Linux系統(tǒng)環(huán)境冤狡;
- %post:安裝后腳本
- 運(yùn)行環(huán)境:安裝完成的系統(tǒng);
- %pre:安裝前腳本
命令段中的必備命令:
authconfig:認(rèn)證方式配置项棠,本地認(rèn)證配置悲雳,基于shadow
authconfig --enableshadow --passalgo=sha512
bootloader:定義bootloader的安裝位置及相關(guān)配置,--append=補(bǔ)充參數(shù)
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
keyboard:設(shè)置鍵盤類型
keyboard us
lang:語言類型
lang zh_CN.UTF-8
part:分區(qū)布局沾乘;以及分區(qū)使用方式怜奖,默認(rèn)被注釋,默認(rèn)單位mb翅阵,pv為固定前綴
part /boot --fstype=ext4 --size=500
part pv.008002 --size=51200
rootpw:管理員密碼
rootpw --iscrypted $6$4Yh15kMGDWOPtbbW$SGax4DsZwDAz4201.O97WvaqVJfHcISsSQEokZH054juNnoBmO/rmmA7H8ZsD08.fM.Z3Br/67Uffod1ZbE0s.
timezone:時(shí)區(qū)
timezone Asia/Shanghai
clearpart:清除分區(qū)
clearpart --none
--drives=sda:清空磁盤分區(qū)歪玲;
volgroup:創(chuàng)建卷組
volgroup myvg --pesize=4096 pv.008002
logvol:創(chuàng)建邏輯卷
logvol /home --fstype=ext4 --name=lv_home --vgname=myvg --size=5120
生成加密密碼的方式:生成4個(gè)字節(jié)8位16進(jìn)制數(shù)為隨機(jī)數(shù)
~]# openssl passwd -1 -salt `openssl rand -hex 4`
命令段中的可選命令:
install OR upgrade:安裝或升級(jí);
text:
安裝界面類型掷匠,text為tui滥崩,默認(rèn)為GUI,單獨(dú)成行讹语,不需要參數(shù)
network:配置網(wǎng)絡(luò)接口钙皮,自動(dòng)dhcp
network --onboot yes --device eth0 --bootproto dhcp --noipv6
firewall:防火墻
firewall --disabled
selinux:SELinux安全加強(qiáng)的策略庫
selinux --disabled
repo:指明安裝時(shí)使用的repository;
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
url: 指明安裝時(shí)使用的repository,但為url格式短条;
url --url=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/
halt导匣、poweroff或reboot:安裝完成之后的行為;
參考官方文檔:《Installation Guide》
定制kickstart文件:
# yum install system-config-kickstart
# system-config-kickstart
通過該程序界面可以配置上面所有選項(xiàng)
創(chuàng)建光盤鏡像:
~]# 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 /root/boot.iso myboot/