啟動和內核管理

一、Linux組成

    Linux: kernel+rootfs

        kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能

        rootfs:程序和glibc

        庫:函數集合, function, 調用接口(頭文件負責描述)

            過程調用: procedure,無返回值

            函數調用: function

        程序:二進制執行文件

    內核設計流派:

        單內核(monolithic kernel): Linux

            把所有功能集成于同一個程序

        微內核(micro kernel): Windows, Solaris

            每種功能使用一個單獨子系統實現

    內核

        Linux內核特點:

            支持模塊化: .ko(內核對象)

                如:文件系統,硬件驅動,網絡協議等

            支持內核模塊的動態裝載和卸載

        組成部分:

            核心文件: /boot/vmlinuz-VERSION-release

                ramdisk:輔助的偽根系統

                CentOS 5: /boot/initrd-VERSION-release.img

                CentOS6,7: /boot/initramfs-VERSION-release.img

            模塊文件: /lib/modules/VERSION-release

二、CentOS5、6啟動流程

blob.png

    CentOS6啟動流程

        1.加載BIOS的硬件信息,獲取第一個啟動設備

        2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息

        3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備

        4.核心執行init程序,并獲取默認的運行信息

        5.init程序執行/etc/rc.d/rc.sysinit文件

        6.啟動核心的外掛模塊(/etc/modprobe.conf)

        7.Init執行運行的各個批處理文件(scripts)

        8.Init執行/etc/rc.d/rc.local

        9.執行/bin/login程序,等待用戶登錄

        10.登錄之后開始以Shell控制主機

    啟動流程

        POST: Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、 串并行接口、鍵盤、 CD-ROM光驅等硬件情況的檢測。

            ROM: BIOS, Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、 開機加電自檢程序和系統啟動自舉程序等。

            RAM: CMOS互補金屬氧化物半導體,保存各項參數的設定,按次序查找引導設備,第一個有引導程序的設備為本次啟動設備

        bootloader: 引導加載器,引導程序

            windows: ntloader,僅是啟動OS

            Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核

                LILO: LInux LOader

                GRUB: GRand Unified Bootloader

                    GRUB 0.X: GRUB Legacy, GRUB2

        MBR:

            446: bootloader, 64: 分區表, 2: 55AA

        GRUB:

            primary boot loader : 1st stage, 1.5 stage

            secondary boot loader : 2nd stage,分區文件

        kernel:

            自身初始化:

                探測可識別到的所有硬件設備

                加載硬件驅動程序(可能借助于ramdisk加載驅動)

                以只讀方式掛載根文件系統

                運行用戶空間的第一個應用程序: /sbin/init

        nit程序的類型:

        SysV: init, CentOS 5之前

            配置文件: /etc/inittab

        Upstart: init,CentOS 6

            配置文件: /etc/inittab, /etc/init/*.conf

        Systemd: systemd, CentOS 7

            配置文件: /usr/lib/systemd/system

                /etc/systemd/system

    ramdisk:

    內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問

        ramdisk –> ramfs 提高速度

        CentOS 5: initrd, 工具程序: mkinitrd

        CentOS 6: initramfs, 工具程序: mkinitrd, dracut

    系統初始化:

        POST –> BootSequence (BIOS) –>Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init( systemd)

    /sbin/init CentOS6之前

    運行級別:為系統運行或維護等目的而設定; 0-6: 7個級別

        0:關機

        1:單用戶模式(root自動登錄), single, 維護模式

        2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式

        3:多用戶模式,正常模式;文本界面

        4:預留級別;可同3級別

        5:多用戶模式,正常模式;圖形界面

        6:重啟

    默認級別: 3, 5

    切換級別: init #

    查看級別: runlevel ; who -r

    init讀取其初始化文件: /etc/inittab

        初始運行級別(RUN LEVEL)

        系統初始化腳本

        對應運行級別的腳本目錄

        捕獲某個關鍵字順序

        定義UPS電源終端/恢復腳本

        在虛擬控制臺生成getty

        在運行級別5初始化X

    CentOS 5的inittab文件

        配置文件: /etc/inittab

        每一行定義一種action以及與之對應的process

            id:runlevel:action:process

            action:

                wait: 切換至此級別運行一次

                respawn:此process終止,就重新啟動之

                initdefault:設定默認運行級別; process省略

                sysinit:設定系統初始化方式,此處一般為指定

                    /etc/rc.d/rc.sysinit

                ca::ctrlaltdel:/sbin/shutdown -t3 -r now

            id:3:initdefault:

            si::sysinit:/etc/rc.d/rc.sysinit

            l0:0:wait:/etc/rc.d/rc 0

            l1:1:wait:/etc/rc.d/rc 1…

            l6:6:wait:/etc/rc.d/rc 6

    CentOS 6 /etc/inittab和相關文件

        /etc/inittab

            設置系統默認的運行級別

            id:3:initdefault:

        /etc/init/control-alt-delete.conf

        /etc/init/tty.conf

        /etc/init/start-ttys.conf

        /etc/init/rc.conf

        /etc/init/prefdm.conf

    啟動流程

        /etc/rc.d/rc.sysinit: 系統初始化腳本

            (1) 設置主機名

            (2) 設置歡迎信息

            (3) 激活udev和selinux

            (4) 掛載/etc/fstab文件中定義的文件系統

            (5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統

            (6) 設置系統時鐘

            (7) 激活swap設備

            (8) 根據/etc/sysctl.conf文件設置內核參數

            (9) 激活lvm及software raid設備

            (10) 加載額外設備的驅動程序

            (11) 清理操作

        說明: rc N –> 意味著讀取/etc/rc.d/rcN.d/

            K*: K##*: ##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務

            S*: S##*: ##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務

            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

    chkconfig命令

        查看服務在所有級別的啟動或關閉設定情形:

            chkconfig [–list] [name]

        添加:

            SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d)

            chkconfig –add name

                #!/bin/bash

                #LLLL 表示初始在哪個級別下啟動, -表示都不啟動

                # chkconfig: LLLL nn nn

        刪除:

            chkconfig –del name

        修改指定的鏈接類型

            chkconfig [–level levels] name <on|off|reset>

                –level LLLL: 指定要設置的級別;省略時表示2345

    ntsysv命令

Grub管理

自制Linux

啟動排錯

編譯安裝內核

三、服務管理

    xinetd管理的服務

        service 命令:手動管理服務

            service 服務 start|stop|restart

            service –status-all

        瞬態( Transient)服務被xinetd進程所管理

            進入的請求首先被xinetd代理

            配置文件: /etc/xinetd.conf、 /etc/xinetd.d/<service>

            與libwrap.so文件鏈接

            用chkconfig控制的服務:chkconfig tftp on

    啟動流程

        注意:正常級別下,最后啟動一個服務S99local沒有鏈接至

/etc/rc.d/init.d一個服務腳本,而是指向了

/etc/rc.d/rc.local腳本

        不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中

            /etc/rc.d/rc.local在指定運行級別腳本后運行

            可以根據情況,進行自定義修改

        1:2345:respawn:/usr/sbin/mingetty tty1

        2:2345:respawn:/usr/sbin/mingetty tty2

        

        6:2345:respawn:/usr/sbin/mingetty tty6

            mingetty會自動調用login程序

        x:5:respawn:/etc/X11/prefdm -nodaemon

    總結: /sbin/init –> (/etc/inittab) –> 設置默認運行級別 –> 運行系統初始腳本、完成系統初始化 –> (關閉對應下需要關閉的服務)啟動需要啟動服務 –> 設置登錄終端

    CentOS 6 init程序為: upstart, 其配置文件:/etc/inittab, /etc/init/*.conf,配置文件的語法 遵循upstart配置文件語法格式,和CentOS5不同

    示例:破解CentOS5和6的root口令

四、grub管理

    grub legacy

        CentOS 6啟動流程:

        POST –> Boot Sequence(BIOS) –> Boot Loader –>Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –> 系統初始化腳本rc.sysinit –> 關閉或啟動對應級別的服務 –> 啟動終端

        grub: GRand Unified Bootloader

            grub 0.x: grub legacy

            grub 1.x: grub2

            grub legacy:

                stage1: mbr

                stage1_5: mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統

                stage2:磁盤分區(/boot/grub/)

        配置文件: /boot/grub/grub.conf <– /etc/grub.conf

        stage2及內核等通常放置于一個基本磁盤分區

        功用:

            (1) 提供啟動菜單、并提供交互式接口

                a:內核參數

                e: 編輯模式,用于編輯菜單

                c: 命令模式,交互式接口

            (2) 加載用戶選擇的內核或操作系統

                允許傳遞參數給內核

                可隱藏啟動菜單

            (3) 為菜單提供了保護機制

                為編輯啟動菜單進行認證

                為啟用內核或操作系統進行認證

    grub的命令行接口

        help: 獲取幫助列表

        help KEYWORD: 詳細幫助信息

        find (hd#,#)/PATH/TO/SOMEFILE:

        root (hd#,#)

        kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可添加許多內核支持使用的cmdline參數

            例如: max_loop=100 selinux=0 init=/path/to/init

            initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;

            boot: 引導啟動選定的內核

        cat /proc/cmdline 內核參數

        內核參數文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

        識別硬盤設備:

            (hd#,#)

            hd#: 磁盤編號,用數字表示;從0開始編號

            #: 分區編號,用數字表示; 從0開始編號

            (hd0,0) 第一塊硬盤,第一個分區

        手動在grub命令行接口啟動系統:

            grub> root (hd#,#)

            grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

            grub> initrd /initramfs-VERSION-RELEASE.img

            grub> boot

    grub legacy配置文件

        配置文件: /boot/grub/grub.conf

            default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始

            timeout=#:指定菜單項等待選項選擇的時長

            splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑

            hiddenmenu:隱藏菜單

            password [–md5] STRING: 啟動菜單編輯認證

title TITLE:定義菜單項“標題” , 可出現多次

            root (hd#,#): grub查找stage2及kernel文件所在設備分區;為grub“根”

            kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核

            initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件

            password [–md5] STRING: 啟動選定的內核或操作系統時進行認證

    grub加密

        grub-md5-crypt命令

        破解root口令:

            啟動系統時,設置其運行級別1

        進入單用戶模式:

            (1) 編輯grub菜單(選定要編輯的title,而后使用e命令);

            (2) 在選定的kernel后附加

                1, s, S或single都可以;

            (3) 在kernel所在行,鍵入“ b”命令

    grub安裝

        (1) grub-install

        安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復制GRUB相關文件到 DIR/boot目錄下

            grub-install –root-directory=DIR /dev/DISK

        (2) grub

            grub> root (hd#,#)

            grub> setup (hd#)

原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/47529

(0)
DYWDYW
上一篇 2016-09-18
下一篇 2016-09-18

相關推薦

  • bash-條件測試

                     條件測試 1.條件測試          ? 判斷某需求是否滿足,…

    Linux干貨 2016-08-12
  • rsyslog將日志記錄于MySQL中

    數據庫服務器:CentOS7 192.168.119.159   日志:CentOS6 192.168.119.129     準備mysql數據庫 和 用戶賬戶 [root@localhost ~]# yum install mariadb-server   [root@localhost ~]# systemctl…

    2018-02-05
  • 流編輯器Sed(Stream Edit)詳解

    流編輯器Sed(Stream Edit)詳解       Grep 、sed 和awk并稱為文本三劍客。使用Grep就可以很好的實現文本查找的功能,而且簡單有效。然而其卻無法直接對其進行編輯,sed的出現便解決了這一問題。 Sed被稱為流編輯器,它是一種新型的非交互式的文本編輯器,它逐行處理文件或輸入,并將結…

    Linux干貨 2016-08-22
  • ifcfg家族命令介紹

    ifcfg家族命令: ifconfig ifconfig [interface] add<地址>:設置網絡設備IPv6的ip地址; del<地址>:刪除網絡設備IPv6的IP地址; down:關閉指定的網絡設備;<硬件地址>:設置網絡設備的類型與硬件地址; io_addr:設置網絡設備的I/O地址; irq:設置…

    Linux干貨 2016-07-29
  • 編譯安裝httpd-2.4.9及新特性詳解

    前言 前面我們講解了httpd在CentOS6上(httpd-2.2)的相關功能配置,而CentOS7上采用了httpd-2.4的版本,那么httpd-2.4增加了哪些特性呢?接下來讓我們在CentOS6.6上手動編譯安裝一下httpd-2.4.9,看一下和httpd-2.2有什么不同,順便補充說一下httpd的其它功能。 環境及新特性介紹 環境介紹 系統環…

    Linux干貨 2015-04-15
  • 馬哥教育網絡班20期-第五周課程作業

    Table of Contents 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; 3、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行; 4、添加用戶bash, tes…

    Linux干貨 2016-07-12
欧美性久久久久