Linux學習博客7

簡述linux操作系統(tǒng)啟動流程

以CentOS 5歹茶、6為例
系統(tǒng)啟動流程大體可以表示為POST加電自檢-->BIOS根據(jù)其中的啟動順序-->MBR設(shè)備的bootloader(GRUB)-->啟動Kernel(中間可能需要借助ramdisk加載根文件系統(tǒng)并進行rootfs轉(zhuǎn)換)-->Init-->Runlevel關(guān)閉和啟動對應的服務進程。
上述過程從Init開始就是用戶空間的啟動操作了,CentOS 5、6、7的Init啟動機制有所不同侠讯,所以Init的啟動過程會有所區(qū)別:
CentOS 5:systemV
CentOS 6:Upstart
CentOS 7:systemd
下面的過程以systemV的Init機制為基礎(chǔ):

CentOS_boot.png

  1. BIOS
    BIOS(Basic Input/Output System)淫痰,基本輸入輸出系統(tǒng)沸柔,該系統(tǒng)存儲于主板的ROM芯片上循衰,計算機在開機時,會最先讀取該系統(tǒng)勉失,然后會有一個加電自檢過程羹蚣,這個過程其實就是檢查CPU和內(nèi)存,計算機最基本的組成單元(控制器乱凿、運算器和存儲器)顽素,還會檢查其他硬件,若沒有異常就開始加載BIOS程序到內(nèi)存當中。BIOS主要的一個功能就是存儲了磁盤的啟動順序全蝶,BIOS會按照啟動順序去查找第一個磁盤頭的MBR信息,并加載和執(zhí)行MBR中的Bootloader程序抑淫,若第一個磁盤不存在MBR,則會繼續(xù)查找第二個磁盤(PS:啟動順序可以在BIOS的界面中進行設(shè)置)姥闪,一旦BootLoader程序被檢測并加載內(nèi)存中,BIOS就將控制權(quán)交接給了BootLoader程序。

  2. MBR
    MBR(Master Boot Record),主引導記錄梳毙,MBR存儲于磁盤的頭部哺窄,大小為512bytes牌废,其中,446bytes用于存儲BootLoader程序,64bytes用于存儲分區(qū)表信息番甩,最后2bytes(魔術(shù)字)用于MBR的有效性檢查窍育。

  3. GRUB
    Grand Unified Bootloader,多系統(tǒng)啟動程序宴胧,其執(zhí)行過程可分為三個步驟:

  • Stage1:這個其實就是MBR中的啟動引導程序漱抓,由于只有446字節(jié)不能實現(xiàn)復雜的功能,它的主要工作就是查找并加載第二段Bootloader程序(stage2)恕齐,但系統(tǒng)在沒啟動時乞娄,MBR根本找不到文件系統(tǒng),也就找不到stage2所存放的位置显歧,因此仪或,就有了stage1_5
  • Stage1_5:安裝在MBR之后的磁盤扇區(qū),該步驟就是為了識別文件系統(tǒng)士骤,進而可以進入stage2
  • Stage2:GRUB程序會根據(jù)/boot/grub/grub.conf文件查找Kernel的信息范删,然后開始加載Kernel程序,當Kernel程序被檢測并在加載到內(nèi)存中敦间,GRUB就將控制權(quán)交接給了Kernel程序瓶逃。
    PS:實際上這個步驟/boot還沒被掛載,GRUB直接識別grub所在磁盤的文件系統(tǒng)廓块。
  1. Kernel
    內(nèi)核厢绝,Kernel是Linux系統(tǒng)最主要的程序,實際上带猴,Kernel的文件很小昔汉,只保留了最基本的模塊,并以壓縮的文件形式存儲在硬盤中拴清,當GRUB將Kernel讀進內(nèi)存靶病,內(nèi)存開始解壓縮內(nèi)核文件。
  • 講內(nèi)核啟動口予,應該先講下initrd這個文件:
    initrd(Initial RAM Disk)娄周,它在stage2這個步驟就被拷貝到了內(nèi)存中,這個文件是在安裝系統(tǒng)時產(chǎn)生的沪停,是一個臨時的根文件系統(tǒng)(rootfs)煤辨。因為Kernel為了精簡裳涛,只保留了最基本的模塊,因此众辨,Kernel上并沒有各種硬件的驅(qū)動程序端三,也就無法識rootfs所在的設(shè)備,故產(chǎn)生了initrd這個文件鹃彻,該文件裝載了必要的驅(qū)動模塊郊闯,當Kernel啟動時,可以從initrd文件中裝載驅(qū)動模塊蛛株,直到掛載真正的rootfs团赁,然后將initrd從內(nèi)存中移除。
  • Kernel會以只讀方式掛載根文件系統(tǒng)泳挥,當根文件系統(tǒng)被掛載后然痊,開始裝載第一個進程(用戶空間的進程),執(zhí)行/sbin/init屉符,之后就將控制權(quán)交接給了init程序剧浸。
  1. Init
    該程序就是進行OS初始化操作,實際上是根據(jù)/etc/inittab(定義了系統(tǒng)默認運行級別)設(shè)定的動作進行腳本的執(zhí)行矗钟,第一個被執(zhí)行的腳本為/etc/rc.d/rc.sysinit唆香,這個是真正的OS初始化腳本,這個腳本的任務有:
  • 激活udev和selinux吨艇;
  • 根據(jù)/etc/sysctl.conf文件躬它,來設(shè)定內(nèi)核參數(shù);
  • 設(shè)定系統(tǒng)時鐘东涡;
  • 裝載硬盤映射冯吓;
  • 啟用交換分區(qū);
  • 設(shè)置主機名疮跑;
  • 根文件系統(tǒng)檢測组贺,并以讀寫方式重新掛載根文件系統(tǒng);
  • 激活RAID和LVM設(shè)備祖娘;
  • 啟用磁盤配額失尖;
  • 根據(jù)/etc/fstab,檢查并掛載其他文件系統(tǒng)渐苏;
  • 清理過期的鎖和PID文件
    上述都執(zhí)行完后掀潮,根據(jù)配置的啟動級別,執(zhí)行對應目錄底下的腳本琼富,最后執(zhí)行/etc/rc.d/rc.local這個腳本(所以很多自定義的啟動腳本可以寫入這個文件中)仪吧,至此,系統(tǒng)啟動完成鞠眉。
    關(guān)于init程序的配置文件路徑邑商,除了/etc/inittab外摄咆,還有/etc/init/*.conf,及/usr/lib/systemd/system/(CentOS7)人断。
  1. Runlevel
    運行級別,不同的級別會啟動的服務不一樣朝蜘,init會根據(jù)定義的級別去執(zhí)行相應目錄下的腳本恶迈,Linux的啟動級別分為以下幾種
  0:關(guān)機模式

  1:單一用戶模式(直接以管理員身份進入)

  2:多用戶模式(無網(wǎng)絡)

  3:多用戶模式(命令行)

  4:保留

  5:多用戶模式(圖形界面)

  6:重啟

在不同的運行級別下,/etc/rc.d/rc這個腳本會分別執(zhí)行不同目錄下的腳本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/

這些目錄下的腳本只有K*和S*開頭的文件谱醇,K開頭的文件為開機需要執(zhí)行關(guān)閉的服務暇仲,S開頭的文件為開機需要執(zhí)行開啟的服務。

簡述grub啟動引導程序配置及命令行接口詳解

grub啟動引導程序配置

grub的配置文件/boot/grub/grub.conf副渴,該配置文件的信息如下:

    grub.conf: 

    #boot=/dev/sda

    default=0        #設(shè)定默認啟動的title的編號奈附,從0開始

    timeout=5       #等待用戶選擇的超時時間

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景圖片

    hiddenmenu     #隱藏菜單

    title CentOS (2.6.18-194.el5PAE)      #內(nèi)核標題

        root (hd0,0)         #內(nèi)核所在的設(shè)備hd表示硬盤,第一個0是硬盤號煮剧,第二個0是分區(qū)號

        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #內(nèi)核文件路徑以及傳遞給內(nèi)核的參數(shù)

        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路徑

grub 命令行用法

  1. 進入GRUB的命令行模式
    開機后grub引導菜單
    grub1.png
  • 輸入c即可進入grub命令行模式
grub>
  • 輸入e可對進入選定的菜單項的編輯
    grub2.png
  1. 獲取GRUB命令行幫助
    在grub>提示符的后面輸入help
grub> help


如果需要得到某個指令的幫助斥滤,就在 help 后加空格跟指令,比如:
grub>help kernel
  1. cat查看文件內(nèi)容
    有時我們不知道Linux的/boot分區(qū)勉盅,以及/ 根分區(qū)所在的位置佑颇,要查看/etc/fstab的內(nèi)容來得知,這時草娜,我們就要用到cat (hd[0-n],y)/etc/fstab 來獲得這些內(nèi)容挑胸,注意要靈活使用tab鍵命令補齊的功能
grub> cat (hd0,  #輸入hd0,然后再按tab鍵會跳出hd0有的分區(qū)
grub> cat (hd0,2)/etc/fstab  #顯示所在分區(qū)的/etc/fstab文件信息
  1. root (hd[0-n,y) 指令來指定/boot所在的分區(qū)
比如我們確認/boot在(hd0,0)
grub> root (hd0,0)
  1. kernel 指令,用來指定Linux的內(nèi)核宰闰,及/所在的分區(qū)
  • 如果我們已經(jīng)通過root (hd[0-n],y) 指定了/boot所在的分區(qū)茬贵,語法有兩個:
    • 如果/boot和Linux的/位于同一個分區(qū),應該是下面的一種格式移袍;
grub> kernel /boot/vmlinuz在這里按tab鍵來補齊解藻,就看到內(nèi)核全稱了 ro root=根所在的路徑

    • 如果/boot有自己獨立的分區(qū),應該是咐容;
grub> kernel /vmlinuz在這里按tab鍵來補齊舆逃,就看到內(nèi)核全稱了 ro root=根所在的路徑
例如
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=[fstab文件中查詢到的root所在的掛載UUID]
  1. initrd 命令行來指定initrd文件
grub> initrd /boot/initr  #在這里tab來補齊有可能是initrd,也可能是initramfs
grub> initrd /boot/initrmfs-2.6.32-696.el6.x86_64.img

如果/boot是獨立的一個分區(qū)
grub> initrd /initr  #在這里tab來補齊
grub> initrd /initrmfs-2.6.32-696.el6.x86_64.img
  1. boot命令來引導系統(tǒng)
grub>boot
  1. grub的保護機制
    grub可以通過設(shè)置密碼來保護配置文件不被輕易的修改戳粒,方法為:
  • 在配置文件的title之上添加 password --md5 md5生成的密碼 (用于啟動時保護配置文件編輯)
  • 在配置文件的某個title之內(nèi)添加password --md5 md5生成的密碼 (用于保護此項內(nèi)核不被輕易啟動 或編輯)
  • 生成md5密碼的命令:grub-md5-crypt
  1. grub-install重建grub
重建grub到第一硬盤mbr
grub-install /dev/sda
  1. grub救援模式
    如果系統(tǒng)無法啟動路狮,利用CentOS安裝光盤進入Rescue installed system救援模式
進入命令行后,使用命令
#chroot /mnt/sysimage #掛載原系統(tǒng)的根蔚约,此路徑在進入救援模式后有提示
掛載根后即可進行各種命令行操作了奄妨,例如重裝grub
#grub-install /dev/sda

實現(xiàn)kickstart文件制作與光盤鏡像制作

關(guān)于kickstart

kickstart是一個定義了Linux安裝過程的配置文件,比如系統(tǒng)語言苹祟、鍵盤選項砸抛、要在系統(tǒng)中使用的時區(qū)评雌、如何對磁盤進行分區(qū)、應該安裝哪些軟件包等直焙。有了這個文件可以解放雙手景东,讓Linux安裝過程按照我們預先定義的要求進行自動化安裝,同時部署大量主機時十分有用奔誓。一般centos系統(tǒng)安裝后斤吐,會在root目錄下生成一個名為anaconda-ks.cfg的kickstart配置文件
ks文件主要由三個部分組成:

  1. 命令段:用于配置系統(tǒng)
install  #出現(xiàn)install可代表下面為安裝配置命令段
cdrom    #安裝介質(zhì)
lang zh_CN.UTF-8    #安裝語言
keyboard us    #鍵盤類型
selinux --enforcing    #是否開啟selinux
timezone --utc Asia/Shanghai    #時區(qū)、系統(tǒng)時鐘是否使用UTC時間
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
  1. 軟件包段:選擇要安裝的軟件包組及軟件包
@core    #安裝
@base    #安裝
lftp    #安裝
-zsh    #這里說明不安裝厨喂,但如果有其他安裝的文件需要依賴其時和措,也會安裝
  1. 腳本段:安裝前后執(zhí)行的腳本
%pre    #安裝過程開始之前執(zhí)行的腳本;所能夠執(zhí)行的操作較少蜕煌,因為是anaconda加載的簡潔版的shell環(huán)境
%post    #所有軟件包安裝完成之后執(zhí)行的腳本派阱;由于是此時系統(tǒng)已安裝完成,所以是完整的shell環(huán)境

利用ks文件安裝系統(tǒng)

在boot提示符指定本機的網(wǎng)絡參數(shù)和kickstart配置文件斜纪,配置文件中又設(shè)定了安裝源(一般自建http贫母、ftp服務器和yum源),執(zhí)行下面的命令后傀广,系統(tǒng)會自動結(jié)合kickstart文件颁独,實現(xiàn)快速安裝系統(tǒng)

  1. 利用光盤引導后,在CentOS安裝界面按ESC鍵進入boot提示符
    kickstart1.png

在boot提示符后鍵入安裝命令

例如指定了網(wǎng)絡配置伪冰、ks文件路徑
boot:linux ip=192.168.1.106 netmask=255.255.255.0 gateway=192.168.1.1 dns=192.168.1.1 ks=http://10.1.1.100/centos6-x86_64.cfg
  1. 指定kickstart配置文件的路徑
支持以下格式:
CD            ks=cdrom:/directory/ks.cfg
硬盤驅(qū)動器     ks=hd:device/directory/ks.cfg 
FTP服務器      ks=ftp://server.mydomain.com/directory/ks.cfg
HTTP服務器     ks=http://server.mydomain.com/directory/ks.cfg
HTTPS服務器    ks=https://server.mydomain.com/directory/ks.cfg
NFS服務器      ks=nfs:server.mydomain.com:/directory/ks.cfg
其它設(shè)備       ks=file:/device/directory/ks.cfg

kickstart文件制作

  1. 利用圖形化工具system-config-kickstart制作ks文件
運行system-config-kickstart
~]# system-config-kickstart
ks1.jpg
ks2.jpg
ks3.jpg
ks4.jpg
ks5.jpg
ks6.jpg
ks7.jpg
ks8.jpg
ks9.jpg
ks10.jpg
  1. 制作包含ks文件的光盤映像
將制作好的ks文件和安裝光盤中的isolinux文件夾都復制到一個文件夾下例如/tmp/mykickstart下
]# ls
isolinux  ks.cfg
編輯/isolinux/isolinux.cfg文件
]# vim /isolinux/isonux.cfg
在文件中添加新的label并設(shè)置成默認選項誓酒,將原來的默認default行刪除
label linux
  menu label ^Install CentOS based mykickstart
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
#此處指定了ks文件所在的路徑
在ks.cfg和isolinux文件夾共同的父目錄的父目錄即/tmp下執(zhí)行
]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 by mykickstart" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /tmp/centos6.9_by_ks.iso mykickstart
]# ls
mykickstart  centos6.9_by_ks.iso
光盤映像制作完成
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贮聂,隨后出現(xiàn)的幾起案子靠柑,更是在濱河造成了極大的恐慌,老刑警劉巖吓懈,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歼冰,死亡現(xiàn)場離奇詭異,居然都是意外死亡耻警,警方通過查閱死者的電腦和手機隔嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甘穿,“玉大人腮恩,你說我怎么就攤上這事∥录妫” “怎么了秸滴?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長募判。 經(jīng)常有香客問我荡含,道長咒唆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任释液,我火速辦了婚禮全释,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘均澳。我一直安慰自己恨溜,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布找前。 她就那樣靜靜地躺著,像睡著了一般判族。 火紅的嫁衣襯著肌膚如雪躺盛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天形帮,我揣著相機與錄音槽惫,去河邊找鬼。 笑死辩撑,一個胖子當著我的面吹牛界斜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播合冀,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼各薇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了君躺?” 一聲冷哼從身側(cè)響起峭判,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棕叫,沒想到半個月后林螃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡俺泣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年疗认,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伏钠。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡横漏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贝润,到底是詐尸還是另有隱情绊茧,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布打掘,位于F島的核電站华畏,受9級特大地震影響鹏秋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亡笑,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一侣夷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仑乌,春花似錦百拓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厕九,卻和暖如春蓖捶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扁远。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工俊鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畅买。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓并闲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谷羞。 傳聞我的和親對象是個殘疾皇子帝火,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容