一掏颊、Linux系統(tǒng)啟動流程
? centos6 Linux系統(tǒng)啟動流程大致概括為:POST加電自檢-->Boot Sequence(BIOS)-->Boot Loader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init等六個階段糟红。
POST加電自檢
? 在接通電源后,系統(tǒng)會啟動同CMOS上的POST程序乌叶,根據(jù)其配置信息讀取硬件設(shè)備信息并檢測硬件是否存在并能正常運行盆偿,然后對硬件設(shè)備進行初始化。
Boot Sequence(BIOS)
? 加電自檢完成后准浴,系統(tǒng)進入BIOS階段事扭,啟動BOIS中的Boot Sequence程序來選擇設(shè)備啟動順序,當(dāng)檢測到第一個可啟動的設(shè)備時乐横,該設(shè)備即為本次啟動所需的設(shè)備求橄。
Boot Loader(MBR)
? 當(dāng)系統(tǒng)通過Boot Sequence確定了啟動所需設(shè)備后今野,會讀取設(shè)備中操作系統(tǒng)的核心文件,會啟動存放在MBR分區(qū)中的Boot Loader管理程序罐农。此程序為引導(dǎo)加載器条霜,在Linux中使用的是GRUB和LILO兩種,其中GRUB分為grub legacy和grub2兩個版本涵亏。而LILO現(xiàn)主要用于移動設(shè)備內(nèi)核宰睡。BootLoader程序主要功能是提供菜單信息,向用戶提供不同的啟動項目溯乒,來加載不同的操作系統(tǒng)或內(nèi)核版本夹厌,將用戶選的的系統(tǒng)或內(nèi)核裝載到RAM特定空間中加載,并將啟動控制權(quán)移交內(nèi)核裆悄。
Kernel(ramdisk)
在BootLoader讀取操作系統(tǒng)內(nèi)核文件后矛纹,會將內(nèi)核問價解壓裝載至內(nèi)存中,然后根據(jù)內(nèi)核提供的功能開始探測可識別的各硬件設(shè)備光稼,加載硬件驅(qū)動程序或南。在加載硬件驅(qū)動時,可能會借助虛擬文件系統(tǒng)ramdisk來加載驅(qū)動艾君,此虛擬文件系統(tǒng)放置在/boot目錄下以initrd開頭的文件采够。
rootfs(readonly)
通過BootLoader程序?qū)nitrd加載至內(nèi)存中,解壓縮并模擬一個根文件系統(tǒng)冰垄,并以只讀方式掛載蹬癌,這個根文件系統(tǒng)能夠提供一個可運行的程序,通過此程序加載在啟動過程中所需的核心模塊虹茶,加載完成后會協(xié)助內(nèi)核喚醒/sbin/init程序逝薪。
/sbin/init
在加載內(nèi)核和硬件及驅(qū)動信息完成后,會啟動用戶空間第一個執(zhí)行程序/sbin/init蝴罪,進行完成啟動前的初始化操作董济。根據(jù)系統(tǒng)的不同,所采用的方式也有所不同:
centos5中采用SysV init方式要门,其配置文件為/etc/inittab
centos6中采用Upstart方式虏肾,并實現(xiàn)向下兼容。其配置文件為/etc/inittab和/etc/init/*.conf
centos7中采用Systemd方式欢搜。其配置文件為/usr/lib/systemd/目錄下的所有文件
/sbin/init程序的處理流程:
1. 設(shè)置默認運行級別封豪。運行級別包括以下幾種:
0:關(guān)閉所有服務(wù),關(guān)機
1:單用戶模式(sigle user)炒瘟,root用戶吹埠,無需認證,維護模式
2:多用戶模式(multi user),會啟動網(wǎng)絡(luò)功能藻雌,但不會啟動NFS,維護模式斩个,需要用戶認證
3:多用戶模式胯杭,正常級別,完全功能模式受啥,文本界面
4:預(yù)留級別
5:正常級別做个,完全功能多用戶模式,圖形界面
6:重啟滚局,關(guān)閉所有服務(wù)
2. 使用/etc/rc.d/rc.sysinit進行系統(tǒng)初始化居暖。初始化操作分為以下幾點:
- 設(shè)置主機名
- 設(shè)置歡迎信息
- 激活udev和selinux
- 掛載所有定義在/etc/fstab文件中的文件系統(tǒng)
- 檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng)
- 設(shè)置系統(tǒng)時鐘
- 根據(jù)/etc/sysctl.conf文件來是指內(nèi)核參數(shù)
- 激活lvm及軟raid設(shè)備
- 激活swap設(shè)備
- 加載額外設(shè)備的驅(qū)動程序
- 清理操作
3. 關(guān)閉對應(yīng)級別的需要停止的服務(wù)
4. 啟動對應(yīng)級別下需要啟動的服務(wù)
5. 啟動終端藤肢,若是5級別會啟動圖形化界面太闺。
二、GRUB啟動引導(dǎo)程序配置及其命令行接口
linux系統(tǒng)的啟動引導(dǎo)程序現(xiàn)主流使用的是grub嘁圈,其現(xiàn)有版本分為grub 0.X(grub legacy) 和grub 1.X(grub 2) 省骂。目前centos7采用的是grub2作為啟動引導(dǎo)程序,而centos5和6使用的是grub legacy版本最住。此處使用centos6作為參照钞澳。
grub的三個階段
1. stage1:存放于MBR中,用于啟動BootLoader來加載stage2的內(nèi)容至內(nèi)存中
2. stage1_5:位于MBR之后的扇區(qū)涨缚,讓stage1中的BootLoader能識別stage2所在的分區(qū)上的文件系統(tǒng)轧粟。
3. stage2:位于基礎(chǔ)磁盤分區(qū)/boot/grub下,用于讀取grub.conf配置文件脓魏,并實現(xiàn)引導(dǎo)功能的擴展
stage2以及內(nèi)核等通常防止于一個基礎(chǔ)磁盤分區(qū)/boot目錄下
grub的配置文件
grub的配置文件為/boot/grub/grub.conf和/etc/grub.conf兰吟,實際上/etc/grub.conf是指向/boot/grub/grub.conf的軟連接。通常其內(nèi)容為:
- default=0:表示默認的啟動條目轧拄,加入同事安裝有多個操作系統(tǒng)揽祥,0表示定義的第一個title的系統(tǒng)
- timeout=5:表示在grub菜單中可供選擇的等待時間,若超過5秒未選擇檩电,則使用default中指定的title菜單中的配置拄丰。
- splashimage=(hd0,0)/grb/splash.xpm.gz:定義引導(dǎo)才當(dāng)中的背景圖片的路徑
- (hd0,0):表示第一塊硬盤上的第一個分區(qū)。硬盤代號以()括起來俐末,hd表示硬盤料按,后面接的數(shù)值表示餐盤編號,第一個搜尋到的磁盤編號為0卓箫,第二個為1载矿,以此類推。
- hiddenmenu:啟動時是否要顯示菜單,默認情況下是不現(xiàn)實菜單信息闷盔,若要現(xiàn)實菜單弯洗,可將此項配置注釋掉。
- title:定義引導(dǎo)菜單中顯示的每個操作系統(tǒng)的名稱
- root (hd0,0):表示內(nèi)核文件存放的位置逢勾,此處指的是分區(qū)位置牡整,而非根目錄
- kernel:定義內(nèi)核的名稱以及一些啟動時的核心參數(shù),通常為要運行的內(nèi)核文件路徑以及相關(guān)的內(nèi)核參數(shù)溺拱。
- initrd:微內(nèi)核運行指定可用的ramdisk文件逃贝,其版本必須與內(nèi)核版本一致。
grub程序的功能
grub程序的功能如下:
1. 提供引導(dǎo)菜單迫摔,并提供交互式的命令行接口沐扳。在菜單界面中,按e進入編輯模式句占,用于編輯菜單沪摄。按c可以進入命令模式,提供了命令行交互式接口纱烘。
2. 加載用戶選擇的內(nèi)核或操作系統(tǒng)卓起,并允許傳遞參數(shù)給內(nèi)核。也可以隱藏此菜單凹炸。
3. 為菜單提供保護機制戏阅,可分別為編輯菜單和啟用內(nèi)核或操作系統(tǒng)設(shè)置認證。
在啟動系統(tǒng)是按任意鍵可進入grub菜單啤它,進入菜單后會顯示菜單信息:
grub的命令行接口
在grub菜單頁面奕筐,按c進入命令模式,打開命令行接口变骡,即可配置grub的相關(guān)設(shè)置离赫。grub命令行接口的常用指令有:
help:獲取幫助列表
help KEYWORD:詳細幫助信息
find(hd#,#) /path/to/somefile:用于查找對應(yīng)分區(qū)下的文件。常用于當(dāng)不確認內(nèi)核文件在哪個分區(qū)時塌碌,可使用此命令確認文件所在路徑渊胸;支持tab補全;
root(hd#,#):指定系統(tǒng)和內(nèi)核文件所在的分區(qū)台妆,如root(hd0,0)翎猛。
kernel /path/to/kernel_file:設(shè)定本次啟動使用到的呢和文件;額外還可以添加許多內(nèi)核支持使用的cmdline參數(shù)
initrd /part/to/initranfs:設(shè)定為選定的內(nèi)核提供額外文件ramdisk
boot:引導(dǎo)啟動選定的內(nèi)核
grub的安裝
- 使用grub-install命令安裝:
grub-install [--root-directory=DIR] DEVICE
--root-directory=DIR:指定gruv鏡像文件的存放位置接剩,默認為當(dāng)前系統(tǒng)根目錄切厘。grub-install會在指定的目錄下創(chuàng)建boot/grub/的層級目錄,并生成相關(guān)的grub文件生成在DIR/boot/grub/下懊缺。
DEVICE:grub安裝的目標(biāo)磁盤
- 在grub命令行模式下安裝grub
grub的保護機制
grub程序提供了菜單保護機制疫稿,可以為grub菜單和啟用內(nèi)核或操作系統(tǒng)設(shè)置認證。
設(shè)置認證的方法:在grub的配置文件grub.conf中添加passwd --md5 STRING
在第一個title之上添加passwd --md5 STRING,適用于保護grub菜單編輯功能遗座,在title中添加passwd --md5 STRING適用于保護內(nèi)核舀凛。
生成md5加密密碼的命令為:grub-md5-crypt
以下為菜單編輯認證:
以下為內(nèi)核認證:在選定了操作系統(tǒng)或內(nèi)核并確定之后,會要求輸入密碼途蒋,然后才能啟動系統(tǒng)腾降。
三、kickstart文件制作和光盤鏡像制作
kickstart是一個定義了Linux系統(tǒng)安裝過程的配置文件碎绎,比如說定義了系統(tǒng)要使用的時區(qū)、硬盤如何分區(qū)抗果、安裝哪些安裝包等等筋帖。通過自定義該文件,我們可以實現(xiàn)不需要人工干預(yù)即可完成Linux系統(tǒng)的自動化安裝冤馏,這種方法在同時部署大量的主機時非常有用日麸。在Centos系統(tǒng)中,完成系統(tǒng)安裝后逮光,在root目錄下會生成一個名為anaconda-ks.cfg的kickstart文件代箭。
kickstart文件的組成和配置
kickstart文件由命令段、程序包段和腳本段三部分組成涕刚,每部分的功能和配置選項如下:
- 命令段:用于配置系統(tǒng)安裝時處理安裝軟件之外的自動應(yīng)答操作
必備命令
1嗡综、auth或authconfig:認證選項;
--useshadow或--enableshadow啟用shadown文件來驗證杜漠;
--passalgo=sha512:使用sha512算法极景;
2、bootloader:指定如何安裝引導(dǎo)程序驾茴,需要提供分區(qū)盼樟,指明引導(dǎo)程序安裝的位置等;
--location=mbr:指定引導(dǎo)程序的位置锈至;
--driverorder=sda:指定grub安裝所在的分區(qū)晨缴;
--append="crashkernel=auto rhgb quiet":指定內(nèi)核參數(shù);
3峡捡、keyboard:指定鍵盤類型击碗,一般使用keyboard us;
4们拙、lang:設(shè)置系統(tǒng)語言類型:
lang zh_CN.UTF-8:安裝中文語言包延都;
5、part:創(chuàng)建分區(qū)睛竣;
-fstype=FSSTYPE:指定創(chuàng)建的分區(qū)類型晰房;
--grow:允許使用剩下的磁盤空間建立分區(qū);
--size=NUM:設(shè)置分區(qū)大小殊者;
--maxsize=NUM:設(shè)置分區(qū)大小的最大值与境;
6、rootpw:設(shè)置管理員密碼猖吴;
--iscrypted STRING:輸入加密的密鑰串摔刁,STRING為加密后的密鑰串
7、timezone:設(shè)置時區(qū)海蔽;```
可選命令
1共屈、selinux:設(shè)置selinux的狀態(tài);
--enforcing
--permissice
--disable
2党窜、driverdisk:指定驅(qū)動程序所在的位置拗引;
driverdisk --source=sda
3、firewall:設(shè)置firewall的狀態(tài)幌衣;
--disable:禁用防火墻
4矾削、graphical:在圖形化模式下根據(jù)kickstart執(zhí)行安裝,默認為該選項豁护;
5哼凯、cmdline:在完全非交互的命令行模式下進行安裝;
6楚里、text:在文本模式下根據(jù)kickstart執(zhí)行安裝断部;
7、reboot:安裝完成后自動重啟班缎;
8家坎、install/upgrade:指定是安裝還是升級系統(tǒng);
對于install吝梅,還指定系統(tǒng)安裝包的來源為下述之一:
cdrom:指定從第一個光盤驅(qū)動器安裝虱疏;
harddrive:從本地硬盤安裝,要求硬盤必須是vfat或者ext2文件系統(tǒng)格式苏携;
nfs:指定從nfs路徑獲取安裝包來源做瞪;
url:指定從ftp、http右冻、https安裝装蓬;如:url --url=ftp://1.1.1.1
13、network:為系統(tǒng)配置網(wǎng)絡(luò)信息纱扭,并在安裝過程中激活該網(wǎng)絡(luò)設(shè)備牍帚,可多次出現(xiàn)使用;
--bootproto:設(shè)置dhcp或static乳蛾;
--device:指定網(wǎng)卡名稱暗赶;
--hostname:指定主機名鄙币;
--onboot:是否在系統(tǒng)開機后開啟網(wǎng)卡;
如:network --bootproto=static --ip=1.1.1.1 --netmask=255.255.255.0 --gateway=1.1.1.2 --onboot=on
14蹂随、autopart:自動創(chuàng)建分區(qū)十嘿;
15、zerombr:清除磁盤分區(qū)表mbr岳锁;
16绩衷、clearpart:在安裝系統(tǒng)前清除分區(qū)表;
--all:清除所有分區(qū)激率;
--linux:清除Linux分區(qū)咳燕;
--none:不清楚分區(qū);
--initlabel:創(chuàng)建標(biāo)簽乒躺,對于沒有MBR或者GPT的新硬盤招盲,該選項是必須的;
--drivers=sdb:清除指定分區(qū)聪蘸;
clearpart --all --initlabel是常見的方式;
17表制、user:在系統(tǒng)中生成一個用戶健爬;
--name:指定用戶名;
--groups:指定用戶的附加組么介,非默認組娜遵;
--homedir:指定用戶的家目錄,不指定則默認為/home/USERNAME壤短;
--password:設(shè)置該用戶的密碼设拟,不指定的話創(chuàng)建后用戶處于鎖定狀態(tài);
--shell:指定用戶的默認shell久脯;
--uid:指定用戶的UID纳胧;
- 程序包段
程序包段用于指明系統(tǒng)安裝的個程序以及包組,包括不安裝的程序包帘撰。
程序包段的開始標(biāo)記為%packages跑慕,結(jié)束標(biāo)記為%end。在兩者之間為相應(yīng)的程序包及程序包組摧找,其中@GROUP_NAME表示為需要安裝的程序包組核行,PACKAGES_NAME為需要安裝的程序包,不安裝某個程序包則在對應(yīng)的程序包前加"-"號蹬耘。@base和@core兩個包組為默認選項芝雪。 如:
%packages
@Base
@Core
@Desktop
@Fonts
@General Purpose Desktop
@Internet Browser
@Printing client
@X Window System
binutils
gcc
kernel-devel
make
patch
python ?
%end
- 腳本段
腳本段可以概括為兩部分:%pre和%post,兩者均以%end為結(jié)束標(biāo)記综苔。
%pre:其后緊跟系統(tǒng)安裝前執(zhí)行的命令或腳本惩系,支持命令很少位岔;
%post:表示系統(tǒng)安裝完成后執(zhí)行的命令,基本支持所有命令蛆挫; 如:
%post
if [ -f /boot/grub/menu.lst -a ! -h /boot/grub/menu.lst ]; then cp /boot/grub/menu.lst /boot/grub/menu.lst.bak && sed -i 's/ rhgb//' /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf -a ! -h /boot/grub/grub.conf ]; then cp /boot/grub/grub.conf /boot/grub/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf -a ! -h /boot/grub2/grub.conf ]; then cp /boot/grub2/grub.conf /boot/grub2/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub2/grub.conf; fi
if [ -f /etc/rc.d/rc.local ]; then cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup; fi
cat >>/etc/rc.d/rc.local <<EOF
#!/bin/bash
echo
echo "Installing VMware Tools, please wait..."
if [ -x /usr/sbin/getenforce ]; then oldenforce=\$(/usr/sbin/getenforce); /usr/sbin/setenforce permissive || true; fi
mkdir -p /tmp/vmware-toolsmnt0
for i in hda sr0 scd0; do mount -t iso9660 /dev/\$i /tmp/vmware-toolsmnt0 && break; done
cp -a /tmp/vmware-toolsmnt0 /opt/vmware-tools-installer
chmod 755 /opt/vmware-tools-installer
cd /opt/vmware-tools-installer
mv upgra32 vmware-tools-upgrader-32
mv upgra64 vmware-tools-upgrader-64
mv upgrade.sh run_upgrader.sh
chmod +x /opt/vmware-tools-installer/*upgr*
umount /tmp/vmware-toolsmnt0
rmdir /tmp/vmware-toolsmnt0
if [ -x /usr/bin/rhgb-client ]; then /usr/bin/rhgb-client --quit; fi
cd /opt/vmware-tools-installer
for s in sr0 sr1; do eject -s /dev/\$s; done
./run_upgrader.sh
if [ -f /etc/rc.d/rc.local.backup ]; then mv /etc/rc.d/rc.local.backup /etc/rc.d/rc.local; else rm -f /etc/rc.d/rc.local; fi
rm -rf /opt/vmware-tools-installer
sed -i 's/3:initdefault/5:initdefault/' /etc/inittab
if [ -f /boot/grub/menu.lst.bak ]; then mv /boot/grub/menu.lst.bak /boot/grub/menu.lst; fi
if [ -f /boot/grub/grub.conf.bak ]; then mv /boot/grub/grub.conf.bak /boot/grub/grub.conf; fi
if [ -f /boot/grub2/grub.conf.bak ]; then mv /boot/grub2/grub.conf.bak /boot/grub2/grub.conf; fi
if [ -x /usr/sbin/getenforce ]; then /usr/sbin/setenforce \$oldenforce || true; fi
if [ -x /bin/systemd ]; then systemctl restart prefdm.service; else telinit 5; fi
EOF
kickstart文件的制作
kickstart文件有兩種制作方式:
- 手動編輯kickstart文件赃承,可參考/root/anaconda-ks.conf文件進行修改編輯
- 通過system-config-kickstart圖形化工具編輯生成kickstart文件。此工具需要使用yum -y install system-config-kickstart 命令安裝悴侵。制作完成后也可同時使用ksvalidator命令來驗證kickstart文件中是否有語法錯誤
創(chuàng)建光盤鏡像文件
- 將系統(tǒng)安裝光盤掛載至/media目錄下
- 創(chuàng)建一個存放創(chuàng)建光盤鏡像文件的目錄myboot(名稱隨意)瞧剖,并移動至該目錄下
- 將/media/isolinux/目錄復(fù)制到myboot目錄下。
- 由于/myboot/isolinux目錄下內(nèi)容是從光盤中復(fù)制可免,無法編輯抓于,需要加寫權(quán)限
- 在/myboot/isolinux目錄下有個isolinux.cfg文件,可修改此文件中選項參數(shù)浇借,添加自己需要的內(nèi)容捉撮,如修改背景圖片等···
- 將事先準(zhǔn)備好的kickstart問價ks.cfg復(fù)制到/myboot目錄下,要確保ks文件無問題即可使用妇垢。
- 此時就可以使用mkisofs命令創(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/
注:"CentOS 6 x86_64 boot"此名稱隨意指定;/root/boot.iso此為保存路徑闯估,按需指定灼舍。