2017 08-28 啟動(dòng)和內(nèi)核管理

  • CentOS 5和6的啟動(dòng)流程 ?
  • 服務(wù)管理 ?
  • Grub管理

一.Linux組成

(1)Linux: kernel+rootfs——內(nèi)核及其他應(yīng)用程序組成
kernel: 進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理、驅(qū)動(dòng)程序、文件系統(tǒng)、安
全功能
rootfs:程序和glibc 庫(kù):函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述) 過(guò)程調(diào)用:procedure,無(wú)返回值 函數(shù)調(diào)用:function 程序:二進(jìn)制執(zhí)行文件 ?
(2)內(nèi)核設(shè)計(jì)流派:
單內(nèi)核(monolithic kernel):Linux 把所有功能集成于同一個(gè)程序

ldd /bin/ls——查看執(zhí)行的命令是否調(diào)用了靜態(tài)庫(kù)或是動(dòng)態(tài)庫(kù)
image.png

ls /boot
image.png

微內(nèi)核(micro kernel):Windows, Solaris 每種功能使用一個(gè)單獨(dú)子系統(tǒng)實(shí)
(3)內(nèi)核
  • Linux內(nèi)核特點(diǎn): 支持模塊化:.ko(內(nèi)核對(duì)象)——驅(qū)動(dòng)模塊
    如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等 支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載 ?
    組成部分: 核心文件:/boot/vmlinuz-VERSION-release
  • ramdisk:輔助的偽根系統(tǒng) ——存放在該initramfs-2.6.32-696.el6.x86_64.img系統(tǒng)文件中
    作用:解決開(kāi)機(jī)啟動(dòng)的中間順序問(wèn)題。
    在開(kāi)機(jī)啟動(dòng)時(shí),首先要進(jìn)入/boot中,來(lái)啟動(dòng)vmlinuz-VERSION-release,
    但是由于/boot的文件系統(tǒng)類型是ext4,它的驅(qū)動(dòng)模塊存放在/lib/modules/2.6.32-696.el6.x86_64/kernel/fs/ext4/ext4.ko,而如果想要調(diào)用該庫(kù)文件就必須要進(jìn)入內(nèi)核進(jìn)行加載,所以進(jìn)入了一個(gè)死循環(huán)階段。
    因此加入ramdisk來(lái)解決該問(wèn)題,在initramfs-2.6.32-696.el6.x86_64.img文件中,存有ext4.ko驅(qū)動(dòng),這樣就可驅(qū)動(dòng)/boot/,來(lái)加載內(nèi)核,從而進(jìn)入根目錄,執(zhí)行接下來(lái)的動(dòng)作
  • CentOS 5: /boot/initrd-VERSION-release.img
  • CentOS 6,7: /boot/initramfs-VERSION-release.img ——"initramfs-2.6.32-696.el6.x86_64.im"
  • 模塊文件:/lib/modules/VERSION-release

    locate ext4.ko
    image.png

    實(shí)現(xiàn)功能模塊化,將硬件的相關(guān)功能功存放在模塊中,而不是內(nèi)核中

二.CentOS6啟動(dòng)流程

image.png
  • 啟動(dòng)順序
    1.加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備
    2.讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
    3.加載核心操作系統(tǒng)的核心信息,核心開(kāi)始解壓縮,并嘗試驅(qū) 動(dòng)所有的硬件設(shè)備
    4.核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
    5.init程序執(zhí)行/etc/rc.d/rc.sysinit文件
    6.啟動(dòng)核心的外掛模塊
    7.init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
    8.init執(zhí)行/etc/rc.d/rc.local
    9.執(zhí)行/bin/login程序,等待用戶登錄 1
    0.登錄之后開(kāi)始以Shell控制主機(jī)

(1) POST

  • Power-On-Self-Test,加電自檢,是BIOS功能的一個(gè)主要部分。
    負(fù)責(zé)完成對(duì)CPU、主板、內(nèi)存、硬盤子系統(tǒng)、顯示子系統(tǒng)、串并行接 口、鍵盤、CD-ROM光驅(qū)等硬件情況的檢測(cè)。
    按順序檢查由哪個(gè)硬件來(lái)驅(qū)動(dòng)引導(dǎo)計(jì)算機(jī)的開(kāi)啟:硬盤、u盤、光盤、網(wǎng)卡都可以來(lái)引導(dǎo)計(jì)算機(jī)的開(kāi)啟,一般情況下用硬盤來(lái)引導(dǎo)
  • ROM:BIOS,Basic Input and Output System,保存著有關(guān)計(jì) 算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置、開(kāi)機(jī)加電自檢程序和 系統(tǒng)啟動(dòng)自舉程序等。
  • RAM:CMOS互補(bǔ)金屬氧化物半導(dǎo)體,保存各項(xiàng)參數(shù)的設(shè)定 按次序查找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動(dòng)設(shè)備 ?
  • bootloader: 引導(dǎo)加載器,引導(dǎo)程序
    windows: ntloader,僅是啟動(dòng)OS
    Linux:功能豐富,提供菜單,允許用戶選擇要啟動(dòng)系統(tǒng)或不同的內(nèi) 核版本;把用戶選定的內(nèi)核裝載到內(nèi)存中的特定空間中,解壓、展開(kāi),并把 系統(tǒng)控制權(quán)移交給內(nèi)核 LILO:LInux LOader GRUB: GRand Unified Bootloader GRUB 0.X:
    GRUB Legacy, GRUB2

    centos6——
    image.png

    centos7——
    image.png

(2)?MBR

  • 第一階段
    一部分grub文件存放在MBR的前446字節(jié)中,用來(lái)驅(qū)動(dòng)——bootloader

    這一部分的grub驅(qū)動(dòng)無(wú)法驅(qū)動(dòng)/boot,因?yàn)樗奈募愋褪莈xt4,其驅(qū)動(dòng)模塊 etx4.ko的大小為633k
    image.png
    ,
    所以無(wú)法驅(qū)動(dòng)。
  • 第1.5階段
    在MBR中的512字節(jié)后續(xù)空間中,存在一個(gè)1.5階段,來(lái)解決ext4.ko的驅(qū)動(dòng)問(wèn)題,也就說(shuō),先通過(guò)grub來(lái)解決掛載/boot的問(wèn)題,然后進(jìn)入下一階段來(lái)解決掛載根的問(wèn)題
  • 第2階段
    在第1.5階段加載內(nèi)核后,進(jìn)入該階段來(lái)掛載根,cat grub.conf


    image.png

    根的啟動(dòng)文件系統(tǒng)程序存在于initramfs-2.6.32-696.el6.x86_64.img這個(gè)文件中,而該文件系統(tǒng)又存在于/boot 中,也就是說(shuō)先啟動(dòng)/boot,才能啟動(dòng)根。

(3)ramdisk: ?

  • 內(nèi)核中的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤上的文件 訪問(wèn),并加載相應(yīng)的硬件驅(qū)動(dòng)
    ramdisk --> ramfs 提高速度 ——該方式直接訪問(wèn)文件體系統(tǒng)上的數(shù)據(jù),而不需要先進(jìn)入磁盤中,再訪問(wèn)文件系統(tǒng)
    CentOS 5: initrd ——模擬磁盤
    工具程序:mkinitrd
    CentOS 6,7: initramfs ——模擬文件系統(tǒng)
    工具程序:mkinitrd, dracut——用來(lái)修復(fù)initramfs文件
    rm -f initramfs-2.6.32-696.el6.x86_64.img ——?jiǎng)h除該文件
    或者刪除直接重啟,進(jìn)入就救援模式來(lái)修復(fù)
    mkinitrd initramfs-2.6.32-696.el6.x86_64.img——修復(fù)該文件
    系統(tǒng)初始化: POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) -> init(systemd)

二.系統(tǒng)啟動(dòng)流程

(一)init程序的類型: ?

  • SysV: init, CentOS 5之前
    配置文件:/etc/inittab ?
    *Upstart: init,CentOS 6
    image.png

    配置文件:/etc/inittab, /etc/init/
    .conf ?
    image.png

    默認(rèn)模式可以更改,將5改變成其他數(shù)字,那么開(kāi)機(jī)就會(huì)進(jìn)入修改后的模式中。
    **Systemd:systemd,
    image.png

    CentOS 7 配置文件:/usr/lib/systemd/system /etc/systemd/system
    image.png

(二)啟動(dòng)流程

  • /sbin/init CentOS6之前 ?
    運(yùn)行級(jí)別:為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定;0-6:7個(gè)級(jí)別
    0:關(guān)機(jī)
    1:?jiǎn)斡脩裟J?root自動(dòng)登錄), single, 維護(hù)模式
    2: 多用戶模式,啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式
    3:多用戶模式,正常模式;文本界面
    4:預(yù)留級(jí)別;可同3級(jí)別

    5:多用戶模式,正常模式;圖形界面 ——默認(rèn)開(kāi)機(jī)會(huì)進(jìn)入該模式下,但也可以手動(dòng)修改
    image.png

    例如將5改成3,那么開(kāi)機(jī)就會(huì)自動(dòng)進(jìn)入3模式,也就是字符界面模式
    6:重啟 ——如果將默認(rèn)模式改為6,那么開(kāi)機(jī)機(jī)會(huì)重啟,始終無(wú)法進(jìn)入界面。
    修復(fù)方案時(shí):在重啟機(jī)器時(shí),按a鍵進(jìn)入修改模式,然后輸入1進(jìn)入單用戶模式,打開(kāi)配置文件——/etc/inittab,將默認(rèn)模式改回5或3模式,然后init3或5重新進(jìn)入界面?
    默認(rèn)級(jí)別: 3, 5 ?
    切換級(jí)別:init # ——在圖形界面中輸入init 3就會(huì)進(jìn)入字符界面?
    查看級(jí)別:runlevel ; who -r
    image.png

(三)init初始化

(1)init讀取其初始化文件:/etc/inittab
(2)初始運(yùn)行級(jí)別(RUN LEVEL)
(3)系統(tǒng)初始化腳本
(4)對(duì)應(yīng)運(yùn)行級(jí)別的腳本目錄
(5)捕獲某個(gè)關(guān)鍵字順序
(6)定義UPS電源終端/恢復(fù)腳本
(7)在虛擬控制臺(tái)生成getty
(8)在運(yùn)行級(jí)別5初始化X11

(四)CentOS 5的inittab文件

配置文件:/etc/inittab ?
每一行定義一種action以及與之對(duì)應(yīng)的process id:runlevel:action:process

  • action:
    wait: 切換至此級(jí)別運(yùn)行一次
    respawn:此process終止,就重新啟動(dòng)之 initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別;process省略 sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定 /etc/rc.d/rc.sysinit ca::ctrlaltdel:/sbin/shutdown -t3 -r now :在字符界面中,按以上三個(gè)鍵會(huì)重啟機(jī)器
    id:3:initdefault:默認(rèn)進(jìn)入3模式
    si::sysinit:/etc/rc.d/rc.sysinit:開(kāi)機(jī)會(huì)先運(yùn)行該初始化腳本,無(wú)論在哪個(gè)模式,都會(huì)先運(yùn)行腳本
    l0:0:wait:/etc/rc.d/rc 0——進(jìn)入0模式,就會(huì)運(yùn)行rc0.d腳本
    l1:1:wait:/etc/rc.d/rc 1——進(jìn)入1模式,就會(huì)運(yùn)行rc1.d腳本
    l6:6:wait:/etc/rc.d/rc 6——進(jìn)入6模式,就會(huì)運(yùn)行rc6.d腳本
    image.png

(五)CentOS 6 /etc/inittab和相關(guān)文件

  • /etc/inittab 設(shè)置系統(tǒng)默認(rèn)的運(yùn)行級(jí)別 id:3:initdefault: ?
    示例: 破解CentOS5和6的root口令
    /etc/init/control-alt-delete.conf ?
    /etc/init/tty.conf ?
    /etc/init/start-ttys.conf ?
    /etc/init/rc.conf ?
    /etc/init/prefdm.conf
    或者重啟機(jī)器,在開(kāi)機(jī)界面進(jìn)入單用戶模式,就可以直接進(jìn)入界面,相當(dāng)于破解了root密碼,登陸后可以通過(guò)passwd直接修改新的密碼,破解了原來(lái)的root密碼,這種方法無(wú)法通過(guò)遠(yuǎn)程來(lái)實(shí)現(xiàn)

(六)啟動(dòng)流程順序

  • /etc/rc.d/rc.sysinit: 系統(tǒng)初始化腳本
    (1) 設(shè)置主機(jī)名
    (2) 設(shè)置歡迎信息
    (3) 激活udev和selinux
    (4) 掛載/etc/fstab文件中定義的文件系統(tǒng)
    (5) 檢測(cè)根文件系統(tǒng),并以讀寫(xiě)方式重新掛載根文件系統(tǒng)
    (6) 設(shè)置系統(tǒng)時(shí)鐘
    (7) 激活swap設(shè)備
    (8) 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
    (9) 激活lvm及software raid設(shè)備
    (10) 加載額外設(shè)備的驅(qū)動(dòng)程序
    (11) 清理操作

說(shuō)明:

rc N --> 意味著讀取/etc/rc.d/rcN.d/
K: K##:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字 越小的服務(wù),通常為依賴到別的服務(wù)
S: S##:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字 越小的服務(wù),通常為被依賴到的服務(wù)
for srv in /etc/rc.d/rcN.d/K; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S
; do
$srv start
done

image.png

K與S的排列順數(shù):數(shù)字的優(yōu)先級(jí)高于字母,注意按數(shù)字排列最大為99,而不是100
image.png

(七)chkconfig命令

chkconfig命令 ?

查看服務(wù)在所有級(jí)別的啟動(dòng)或關(guān)閉設(shè)定情形: chkconfig [--list] [name]
image.png

image.png

添加: SysV的服務(wù)腳本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
刪除: chkconfig --del name ?

修改指定的鏈接類型 chkconfig [--level levels] name <on|off|reset> --level LLLL: 指定要設(shè)置的級(jí)別;
image.png
image.png

省略時(shí)表示2345 ——chkconfig --level atd on,不寫(xiě)模式,自動(dòng)默認(rèn)開(kāi)啟2345模式
ntsysv命令
image.png

例子:

chkconfig --level 5 atd off——關(guān)閉5模式的atd功能
此時(shí)查看ls K*


image.png

重新開(kāi)啟——chkconfig --level 5 atd on
ls S*
image.png

小練習(xí)

在/etc/init.d中編輯一個(gè)服務(wù)
vim testsrv
1 #!/bin/bash
2 #chkconfig:2345 96 07——必須寫(xiě)明,2345代表在這些模式下,開(kāi)啟testsrv功能,96代表開(kāi)啟編號(hào)為96 07代表關(guān)閉時(shí)的編號(hào),相當(dāng)于創(chuàng)建了一個(gè)軟連接


image.png
image.png
image.png

3 #description service testsrv 在五中必須加入描述,六中可寫(xiě)可不寫(xiě)
4 . /etc/init.d/functions——調(diào)用腳本
5 case $1 in
6 start)
7 touch /var/lock/subsys/testsrv
8 action " testsrv is start..." :
9 ;;
10 stop)
11 rm -f /var/lock/subsys/testsrv
12 action "testsrv is stopped" /bin/true
13 ;;
14 restart)
15 rm -f /var/lock/subsys/testsrv
16 action "testsrv is stopped " /bin/true
17 touch /var/lock/subsys/testsrv
18 action "testsrv is start..." :
19 ;;
20 status)
21 [ -f /var/lock/subsys/testsrv ] && echo "testsrv is running"|| echo "testsrv is stopped"
22 ;;
23 *)
24 echo "usage : testsrv start|stop|restart|status"
25 ;;
26 esac


image.png

寫(xiě)完腳本后,通過(guò)chkconfig --add testsrv 加入列表中
刪除選項(xiàng)——chkconfig --del testsrv

(八)xinetd服務(wù)

servce 命令:手動(dòng)管理服務(wù)
service 服務(wù) start|stop|restart service --status-all ?
瞬態(tài)(Transient)服務(wù)被xinetd進(jìn)程所管理
進(jìn)入的請(qǐng)求首先被xinetd代理 ,它只是監(jiān)聽(tīng),并不是代替工作,喚醒非獨(dú)立文件后,由非獨(dú)立文件來(lái)進(jìn)行工作


image.png

配置文件:
/etc/xinetd.conf——會(huì)影響所有的非獨(dú)立文件,屬于總的配置服務(wù)

/etc/xinetd.d/<service> 與libwrap.so文件鏈接
image.png

用chkconfig控制的服務(wù): chkconfig tftp on——開(kāi)啟該服務(wù)
或者在 vim /etc/xinetd.d/tftp 將disable=no 改為yes,來(lái)開(kāi)啟服務(wù)
image.png

image.png

修改之后通過(guò)service xinetd testart 來(lái)是修改文件生效

注意:正常級(jí)別下,最后啟動(dòng)一個(gè)服務(wù)S99local沒(méi)有鏈接至 /etc/rc.d/init.d一個(gè)服務(wù)腳本,而是指向了 /etc/rc.d/rc.local腳本 ?
不便或不需寫(xiě)為服務(wù)腳本放置于/etc/rc.d/init.d/目錄,且 又想開(kāi)機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于 /etc/rc.d/rc.local文件中 ?
/etc/rc.d/rc.local在指定運(yùn)行級(jí)別腳本后運(yùn)行 ?
可以根據(jù)情況,進(jìn)行自定義修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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