啟動和內核管理

啟動和內核管理 : 

    CentOS 5和6的啟動流程

    服務管理

    Grub管理

    自制Linux

    啟動排錯

    編譯安裝內核

  1. CentOS 5和6的啟動流程

Linux系統的組成部分:內核+根文件系統

    內核(kernel):進程管理,內存管理,完了協議棧,文件系統,驅動程序,安全功能

    根文件系統(rootfs):程序和glibc

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

            過程調用:proceduce,無返回值

            函數調用:function

        程序:二進制執行文件

運行的系統環境可分為兩層:內核空間,用戶空間

    用戶空間:應用程序(進程或線程)    

    內核空間:內核代碼(系統調用)

內核設計流派:

    單內核設計(monolithic kernel):把所有功能集于同一個程序;

        Linux

    微內核設計(micro kernel):每種功能使用一個單獨的子系統實現

        Windows,solarls

        blob.png

Linux內核特點:

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

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

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

組成部分:

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

     ramdisk:輔助的偽根文件系統

         CentOS5/boot/initrd-VERSION-release.img

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

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

CentOS系統的啟動流程:

    1.PSOT:加電自檢,是BIOS功能的一個主要部分。負責完成對CPU,主板,內存,硬盤子系統,

顯示子系統,串并行接口,鍵盤。CD-ROM光驅等硬件情況的檢測

        ROM:BIOS,Basic Iuput Output System,保存著有關計算機系統最重要的基本輸入輸出

    程序,系統信息設置,開機加電自檢程序和系統啟動自舉程序等

        RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定

    2.Boot Sequence:

        按次序查找引導設備,第一個引導程序的設備為本次啟動設備

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

            Windows:ntloader,僅是啟動OS

            Linux:

              LILO:Linux LOader

              GRUB:Grand Uniform Bootloader

                centos 5:GRUB 0.x==>Grub Legacy(現名)

                centos 7: GRUB 1.x==>Grub2(現名)

             功能(Linux):提供一個菜單,運行用戶選擇要啟動的系統或不同的內核版本;把用戶選定的

            內核裝載到RAM中的特定空間中,解壓,展開,而后把系統控制權移交給內核。

            MBR:Master Boot Record

                512bytes:

                    446bytes:bootloader

                    64bytes:分區別

                     2bytes:55AA

            GRUB:

                primary boot loader:1st stage 1.5 stage

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

stage1:/boot/grub中的stage1的文件大小為512字節,它是引導扇區中引導程序(前446字節為引導程序)的備份文件,

功能是用來裝載 stage1.5或stage2

stage1.5:因為stage2較大,通常都是放在一個文件系統當中的,但是stage1并不能識別文件系統格式,所有才需要stage1.5

來引導位于某個文件系統當中的stage2,根據文件系統格式的不同,stage1.5也需要相應的文件,如:e2fs_stage1_5,fat_stage1_5

分別識別的ext和fat的文件系統格式,我的系統上stage1_5如下:

blob.png

但是,當stage1加載1.5時,原則上是不認識ext文件系統的,應該也是無法找到1.5程序的,而實際上在安裝

grub時,程序已經把1.5程序寫到磁盤最前面的32k中,因為緊連著MBR的一段磁盤空間通常是空白無用的,

grub就把1.5程序寫到這個地方,這個地方沒有文件系統,stage1程序可以直接去加載1.5

stage2:grub能讓用戶以選項方式將OS加載,改變參數,修改選項等,這些都是stage2程序的功能。stage2可以去

獲取grub.conf等文件內容

    3.kernel

      自身初始化:

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

        2.加載硬件驅動程序;(有可能會借助ramdick)

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

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

        

      init程序的類型:

        CentOS 5-:SysV init

            配置文件:/etc/inittab   

        CentOS 6 :Upstart

            配置文件/etc/inittab        

                /etc/init/*conf

        CentOS 7 :Systemd        

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

       ramdisk:

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

            ramdisk—>ramfs 提高速度

            CentOS 5:initrd, 

                工具程序:mkinitrd

            CentOS 6 7:initramfs

                工具程序:dracut,mkinitrd

總結:

系統初始化流程(內核級別):POST–>Boot Sequence(BIOS)–>BootLoader(MBR)–>kernel(ramdisk)–>rootfs(只讀readonly)–>/sbin/init()

/sbin/init:

    CentOS 5-:SysV init

運行級別:為系統的運行或維護等目的而設定的機制

  0-6:7個級別

    0:關機。shutdown

    1:單用戶模式(single user),root用戶,無須認證;維護模式

    2:多用戶模式(multi user),會啟動網絡功能,但不會啟動DNS,維護模式

    3:多用戶模式(multi user),完全功能模式;本文界面

    4:預留級別;目前無特別使用目的,但習慣同3級別功能使用

    5:多用戶模式(multi user),完全功能模式;圖形界面

    6:重啟模式,reboot

默認級別:3,5

級別切換:init #

查看級別:runlevel ; who -r

        blob.png    

命令顯示的第一個數字為上一次的運行級別,第二個數字為當前運行級別  

        blob.png

配置文件:/etc/inittab


        blob.png

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

        id:runlevels:action:process

            id:一個任務的標識符

            runlevels:在哪個級別啟動此任務;#,###,也可以為空,表示使用默認級別

            action:在什么條件下啟動此任務

            process:任務

        action:

            wait:等待切換此任務所在的級別時執行一次

            respawn:一旦此任務終止時,就自動重新啟動之

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

            sysinit:設定系統初始化方式,此處一般指定/etc/rc.d/rc/sysinit

        例如;

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

            表示去啟動或關閉/etc/rc.d/rc3.d/目錄下的服務器腳本所控制服務;

            K*:要停止的服務;K##*。優先級,數字越小,越是優先關閉;依賴的服務先關閉,而后關閉依賴的服務

            S*:要啟動的服務;S##*。優先級,數字越小,越是優先啟動;被依賴的服務先啟動,而依賴的服務后啟動

        

     rc腳本:接受一個運行級別數字為參數

        腳本框架:

            for srv in /etc/rc.d/rc#.d/K*;do

                $srv stop

            done

            for srv in /etc/rc.d/rc#.d/S*;do

                $srv start

            done

        /etc/init.d/*(/etc/rc.d/init.d/*)腳本執行方式;

            #/etc/init.d/SRV_SCRIPT{start|stop|restart|status}

            #service SRV_SCRIPT{start|stop|restart|status}

chkconfig命令:管控/ect/init.d/每個服務器各級別下的啟動或關閉狀態

    查看:chkconfig –list [name]

    添加:chkconfig –add name

        能被添加的服務的腳本的定義格式之一

        #!/bin/bash

        #chkconfig:LL NN NN

        #Description:info

    刪除:chkconfig -del name

    修改指定的鏈接類型:

        conkconfig [–level LEVELS] name <on|off|reset>

            –level LEVELS:指定要控制的級別,默認為2345

創建服務腳本

將以前寫的一個腳本稍微修改下,變成一個服務腳本,

將此腳本移至/etc/init.d目錄下

#!/bin/bash
#chkconfig:35 98 12
file=/var/lock/subsys/pingxiong

start(){

        if [[ -f $file ]];then
                echo "$file is exsit"
        else
                touch $file&&echo "start finshed"
        fi
        }

stop(){

        if [[ -f $file ]];then
                rm -rf $file &&echo "stop finshed"
        else
                echo "No such file"
        fi
        }

status(){

        if [[ -f $file ]];then
                echo "$file is running"
        else
                echo "$file is stoped"
        fi
        }

case $1 in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                start
                ;;
        status)
                status
                ;;
                *)
                echo "you should input {start|stop|restart|status}"
esac

使用chkconfig命令添加此腳本

         blob.png

添加成功后在/etc/rc.d目錄下已自動增加了相應的軟鏈接文件

服務器啟用和關閉的優先級也自動對應(12 98)

         blob.png

可以用service pingxiong {start|stop|restart|status}啟用或關閉

         blob.png

這個簡單的腳本就算成功了(雖然沒什么用)

xinetd管理的服務

service命令:手動管理服務

    service服務 start|stop|stop|restart

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

進入的請求首先被 xinetd代理

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

與libwrap.so文件鏈接

用chkconfig控制的服務

    chkconfig SERVICE on|off

     blob.png

注意:正常級別下,最后啟動的一個服務S99local沒有鏈接值/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc/.local(/etc/rc.;local)

腳本;因此,不便或不需寫為服務腳本的程序期望能開機啟動運行時,直接放置于此腳本文件即可

    

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

    ….

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

        1.mingetty會調用login程序

        2.打開虛擬終端的程序除了mingetty之外,還有諸如getty等

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

    1.設置主機名

    2.設置歡迎信息

    3.激活udev和selinux

    4.掛載/etc/fatab文件中定義的所有文件系統

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

    6.設置系統時鐘

    7.根據/etc/sysctl.conf文件的設置,來設置內核參數

    8.激活lvm和軟raid設備

    9.激活各swap設備

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

    11.清理操作

總結:(用戶空間的啟動流程):/sbin/init(/etc/inittab)    

設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下需要停止的服務,啟動對應級別下需要啟動的服務

–>設置登錄終端[–>啟動圖形終端]

CentOS 6 :

    init程序:upstart,但依然為/sbin/init。其配置文:

        /etc/init*.conf/inittab(僅用于定義默認運行級別);

注意:*.conf巍峨哦upstart風格的配置文件

CentOS 7 :

    init程序:systemd;配置文件:/usr/lib/systemd/system/*, /etc/systemd/system/*

    完全兼容SysV腳本機制;因此,service命令依然可用不過,建議使用sysytemctl命令來控制服務

    sysytemctl {start….} name [.service]

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

我們以往老師給我們的redhat 5為例

1.進入開機界面時按回車進入到如下界面

blob.png

2.鍵入a鍵進入選擇修改內核參數,進入到如下界面

blob.png

3.在命令行中輸入空格加數字1,出現如下界面

blob.png

4.無須輸入帳號密碼進入系統中,且為root用戶登錄的,將密碼修改為自己的密碼,然后重啟系統

blob.png

5.成功登錄進了redhat 5 系統(密碼破解成功)

blob.png

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 Uniform Bootloader

    centos5: GRUB 0.x ==>Grub Legacy(現名)

    centos7 :GRUB 1.x===>Grub2(現名)

grub legacy:

    stage1:mbr

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

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

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

    

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

    功用:

        1.提供菜單,并提供交互式接口

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

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

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

            允許傳遞參數給內核

            可隱藏此菜單

        3.為菜單提供了保護機制

            為編輯模式進行認證

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

如何識別設備:

    (hd#,#)

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

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

    (hd0,0):第一個磁盤的第一個分區

grub的命令行接口

    help:獲取幫助列表

    help keyword:詳細幫助信息

    find (hd#,#0) /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:引導啟動選定的內核

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

第一步:在此界面鍵入c鍵,

blob.png

第二步:在命令行中輸入命令

grub> root(hd#,#)

grub>kernel  /vilinuz-version-release  ro root=/dev/device

grub>initrd  /initramfs-version-release.img

grub>boot

blob.png

第三步:進入到登錄界面

blob.png

grub legacy配置文件

    /boot/rgub/grub.conf

我的grub legacy配置文件做過修改了,和原裝的有一些配置沒了

blob.png

參數如下:

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

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

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

hiddenmenu:隱藏菜單

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

tutle 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命令

blob.png

破解root口令:

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

進入單用戶模式:

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

    2.在選定的kerne后附加1,s,S或single都可以

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

和上面的破解案例的效果是一樣的,這里就不演示了

grub安裝

安裝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#)

實驗1:破壞stage1,然后修復

1.要破壞stage1,只需要破壞第一磁盤的第0扇區的前446字節即可

blob.png

2.reboot重啟系統,因為引導程序被破壞了,所以系統直接進入了光盤引導界面,我們選擇救援模式(Rescue installed system)

blob.png

3.在進入到就救援模式系統中,會有一些列的選項,例如選擇語言,是否開啟網絡等等,這里就

一一截圖了,一系列選項選完了進入到如下界面

blob.png

4.因為此時是光盤引導登錄的,要到root環境下,需要切換到/mnt/sysimage

blob.png

5.安裝grub,可將grub stage1安裝到磁盤上,如出現以下Unknown partition table signature

不要慌(第一次遇到慌得要死,到處找錯誤….),這是正常現象,耐心等待即可!

blob.png

blob.png

6.輸入exit兩次,退出選擇重啟

blob.png

7.到了登錄界面,修復成功

blob.png

實驗2:破壞stage1.5,然后修復

  1. 前文有講到stage1.5在第一磁盤的第0扇區的前32k中,而MBR占用了前面的512字節,

    所以需要破壞512字節后的內容即可

blob.png

blob.png

2.reboot重啟,stage1.5被破壞了,系統界面如下,我們切換到光盤引導界面

blob.png

3.選擇Rescue installed system

blob.png

4.默認選擇英文

blob.png

5.默認選擇us鍵盤

blob.png

6.是否開啟網絡接口,可根據自己的實際情況選擇,我這里選擇不開網絡接口

blob.png

7.進入到Rescue界面,選擇Continue

blob.png

8.系統掛載在/mnt/sysimage下,如果要進入到root環境,運行chroot /mnt/sysimage命令

blob.png

9.系統已掛載在/mnt/sysimage下

blob.png

10.三種選項:shell 進入命令行模式;fakd是診斷模式;reboot重啟電腦;我們這里選擇shell

blob.png

11.進入shell界面,切換到root環境

blob.png

12.安裝grub,可將grub stage1安裝到磁盤上,使用命令:grub-install /dev/sda 

blob.png

blob.png

13.輸入兩次exit退出,選擇reboot重啟

blob.png

14.進入登錄界面,修復成功

blob.png

實驗3:刪除boot目錄

  1. 刪除/boot目錄下內容,然后卸載/boot,然后刪除/boot目錄

blob.png

2.進入如下界面。

blob.png

3.重啟選擇光盤引導進入救援模式,上面兩個例子,已經詳細講述了這么進入救援模式,限于篇幅,

在這里就不重復寫了,直接進入到救援模式界面(詳細步驟參照上面案例)

blob.png

4.因為這里刪除的stage2,所以只使用grub安裝時無法修復的,內核也修要重新安裝,要安裝內核需要先掛載光盤

在安裝內核的時候加上–force選項強制安裝

blob.png

5.內核安裝好了 ,安裝grub

blob.png

blob.png

6.編輯/boot/grub/grub.conf文件,保存退出

blob.png

7.鍵入exit兩次,選擇reboot重啟系統

blob.png

8.進入登錄界面,登錄成功

blob.png

實驗四:刪除/boot目錄和/etc/fatab文件,然后修復系統!

1.刪除/boot和/etc/fstab,然后重啟系統

blob.png

2.進入到救援模式,詳細步驟就不寫了因為/etc/fstab刪了,各分區沒有自動掛載,所有我們首先要掛載分區

但是我們的分區使用邏輯卷做的,所以要先找到邏輯卷并啟用!

blob.png

3.在生產環境中,我看你不知道顯示的分區中,那個是/,/boot,/usr…所有我們首先將這些分區隨便掛載在一個目錄下,然后通過目錄訪問

磁盤分區內容來判斷此分區究竟是什么分區,然后在/根分區里面編輯/etc/fatab文件,內容如下,任何reboot重啟

blob.png

4.然后就是安裝內核和grub了

blob.png

blob.png

blob.png

5.編輯/boot/grub/grub.conf文件,編輯內容如下:

blob.png

6.exit退出,reboot重啟,修復中……

blob.png

7.修復成功

blob.png

自制Linux系統

1.分區并創建文件系統

blob.png

2.掛載分區

blob.png

3.安裝grub(注意安裝位置,root位置)

blob.png

blob.png

4.恢復內核和initramfs文件

blob.png

5.建立grub.conf  /mnt/boot/grub/grub.conf

blob.png

備注:此處的root=/dev/sda2是因為此磁盤會單獨作為一個Linux的磁盤,到時候會自動讀取為/dev/sda

二,/dev/sda1為boot分區,所有root=/dev/sda2

5.創建一級目錄

blob.png

6.:

    復制bash 和相關 庫文件

    復制相關命令及相關庫文件

    如:ls,cat, vim,reboot,hostname,bash等 利用之前的腳本

blob.png

7.新建一個虛擬機,將/dev/sdb當作此虛擬機的磁盤,啟動系統,如下

blob.png

一個超簡易的linux就完成了!!大部分命令都是可以使用的!

blob.png

如果系統出現了什么故障,導致無法啟動,或者一些配置文件的丟失,損壞,

都可進入到救援模式中,

系統在引導期間,很重要的一個過程就是init 進程讀取其配置文件/etc/inittab ,

啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果/etc/inittab 誤刪除

或修改錯誤,Linux 將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。

    有備份文件的回復方法

    沒有備份文件的恢復辦法

有備份文件的恢復辦法:

進入救援模式,執行chroot 命令后,如果有此文件的備份(強烈建議系統中的重要數據目錄

,如/etc 、/boot 等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是

配置文件修改錯誤,如比較典型的/boot/grub/grub.conf及/etc/passwd 的文件修改錯誤

,也可以直接修正恢復。假設有備份文件/etc/inittab.bak ,則在救援模式下執行:

    sh-3.1# chroot /mnt/sysimage

    sh-3.1# cp /etc/inittab.bak /etc/inittab

沒有備份文件的恢復辦法

如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復

,首先查找到/etc/inittab 屬于哪一個RPM包

    # chroot /mnt/sysimage

    # rpm -qf /etc/inittab

    initscripts-9.03.49-1.el6.centos.x86_64

退出chroot 模式 :

    # exit

掛載存放RPM 包的安裝光盤(在救援模式下,光盤通常掛載在/mnt/source 目錄下):

    # mount /dev/sr0 /mnt/source

CentOS6 系統的RPM 包存放在光盤Package 目錄下,要修復的硬盤系統的根目錄在

/mnt/sysimage 下,需要使用–root 選項指定其位置。覆蓋安裝/etc/inittab 文件

所在的RPM 包:

# rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm

其中的rpm 命令選項“–replacepkgs”或者–force 表示覆蓋安裝,執行完成

后,即已經恢復了此文件

如果想只提取RPM 包中的/etc/inittab 文件進行恢復,可以在進

入救援模式后,執行命令 :

    # rpm2cpio /mnt/source/Packages/initscripts-9.03.49-

    1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab

    # cp etc/inittab /mnt/sysimage/etc

注意此命令執行時不能將文件直接恢復至/etc 目錄,只能提取到當前目錄下,

且恢復的文件名稱所在路徑要寫完整 的路徑 。提取文件成功后,將其復制到根分

區所在的/mnt/sysimage 目錄下相應位置即可

linux內核的組成部分:

    1.kernel:內核核心,一般為bzlmage,通常位于/boot目錄,名稱為vmlinuz-VERSION-release

    2.kernel object:內核對象,即內核模塊,一般放置于/lib/modules/VERSION-release/

        內核模塊內核核心版本一定要嚴格匹配;

        [    ] :N

        [ M]:Module

        [*]  :Y,編譯進內核核心

        內核:動態裝載和卸載

    3.ramdisk:輔助性文件,并非必須,這取決于內核是否直接驅動rootfs所在的設備;

        目標設備驅動,例如SCSI設備的驅動

        邏輯設備驅動,例如LVM設備的驅動

        文件系統,例如xfs文件系統

        ramdisk:是一個簡裝版的根文件系統;為了讓內核找到真正的根文件系統

內核信息查看:

    uname命令

    -r:內核的release號

    -n:顯示當前主機名

    -a:顯示所有信息

模塊信息獲取和管理:

    lsmod:顯示模塊信息

        來自cat  /proc/modules 信息

modinfo命令:顯示一個內核模塊的信息

    -F file:僅顯示指定自動的信息

    -n:顯示文件路徑

modprobe命令:模塊的動態裝載和卸載

    格式:modproe [-r] module_name(帶r選項是卸載,不帶是裝載)

啟動和內核管理        blob.png

depmod命令:內核模塊依賴關系文件的生成工具;

模塊的裝載和卸載的另一組命令:

    insmod命令:

        insmod [filename] [module options…](完整路徑)

        例:insmod 'modinfo -n  btrfs'

    rmmod命令:

        rmmod [module_name]

        例:rmmod btrfs

ramdisk文件的管理:

    1.mkinitrd命令

        為當前使用中的內核重新制作ramdisk文件

            –with=<module>:除了默認額模塊之外需要裝載至initramfs中的模塊

            -preload-<module>:initramfs所提供的模塊需要預先裝載的模塊

        實例:mkinitrd  /boot/initramfs-$(uname -r).img $(uname -r)

    2.dracut命令

        dracut [OPTION…] [<image> [<kernel version>]]

    實例:dracut /boot/initramfs-$(uname -r ).img  $(uname -r )

內核信息輸出的偽文件系統:

    /proc:內核狀態和統計信息的輸出接口;同時還提供一個配置接口。/proc/sys;

        參數:

            只讀:信息輸出;例如/proc/#/*

            只寫:可接受用戶指定一個“新值”來實現對內核某功能或特性的配置;/proc/sys/

            /proc/sys:

                net/ipv4/ip_forward相當于net,ipv4.ip_forward

    1.sysctl命令

        專用于查看或設定/proc/sys命令下參數的值;

        sysctl [options] [varilable=value]

            查看:

            #sysctl -a

            #sysctl variable

            cat /proc/sys/PATH/TO/SOME_KERNEL_FILE

            修改其值:

            #sysctl -w variable=value

    2.文件系統命令(cate,cho命令)

        查看:

        cat /proc/sys/PATH/TO/SOME_KERNEL_FILE

        修改:

        echo “ VALUE” >/proc/sys/PATH/TO/SOME_KERNEL_FILE

    注意:上述兩種方式的設定僅當前運行內核有效;

    配置文件:/etc/sysctl.conf, /etc/sysctl.d/*.conf

        立即生效的方式: sysctl  -p  [/PATH/TO/CONFIG_FILE]

內核參數:

    net.ipv4.ip_forward:核心轉發

    vm

    kernel.hostname:主機名

    net.ipv4icmp_echo-ignore_all:忽略所有ping操作

/sys目錄:

    sysfs:輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的可設置參數;對此些參數的修改,即可定制硬件設備工作特性

    udev:通過讀取/sys目錄下的硬件設備信息按需為各硬件設備創建設備文件

    udev是用戶空間程序,專用工具:devamdin,hotplug;

    udev為設備創建設備文件時,會讀取其實現定義好的規則文件,一般在/etc/udev/rules.d/目錄下。以及/usr/lib/udev/rules.d/目錄下

   

內核編譯

程序包的編譯安裝:

    ./configure ,make,make install

編譯內核前提:開發環境(開發工具,開發庫),頭文件:/usr/include

前提:

    1.準備好開發環境

    2.獲取目標主機上硬件的相關信息

    3.獲取到目標主機系統功能的相關信息,例如要啟用的文件系統

    4.獲取內核源代碼

1.準備開發環境

    centos 6 7:

        包組:

           Devrlopment Tools

             Server platfrom Development

    centos 7:

        包組:

           Devrlopment Tools

             Server platfrom Development

具體命令 

yum groupinstall "Development tools" "Server Platform Development"

2.獲取目標主機上的硬件上的相關信息 

CPU:

    cat /proc/couinfo

    lscup

    x86info -a (查看更詳細的信息,但是此命令需要安裝),如下

yum install x86info

blob.png

PCI設備:

    lspci命令:

           -v:顯示詳細信息

             -vv:顯示更詳細信息

    lsusb命令:

          -v:顯示詳細信息

             -vv:顯示更詳細信息

blob.png

    lsblk命令

了解全部硬件設備信息

    hal -device

3.不做深入了解  

4.內核編譯過程

步驟如下:

    1.tar xf linux-3.18.41.tar.xz -C /usr/src

     2.cd /usr/src

     3.ln -sv linux-3.18.41  linux

     4.cd linu

     5.make menuconfi        配置內核選項

     6.make               編譯內核,可使用-j指定編譯線程數量

     7.make modules_install    安裝內核模塊

     8.make install          安裝內核

重啟系統,選擇使用新內核

詳細如下:

1.下載一個新內核,然后解壓到指定目錄下,通常在/usr/src目錄

tar xf linux-3.18.41.tar.xz -C /usr/src

2.cd /usr/src,進入到此目錄

blob.png

3和4 . 給生成的目錄創建軟鏈接文件,進入到此目錄

ln -sv linux-3.18.41  linux

blob.png

5.配置內核選項

如果不知道編譯內核時要選擇那些選項,可參照/boot/config-2.6.32-642.el6.x86_64

cp /boot/config-2.6.32-642.el6.x86_64  .config

配置內核選項有很多選項,后面會做詳細解說,此次博客簡單了解,如下

blob.png

6.因為編譯內核時間太長,未免出現意外,我們使用screen命令,之前博客有提到,這里不做詳細說明

我們在終端是使用screen命令,然后在會話中執行make命令編譯,即使此終端意外斷開,再次連接終端后,

進入screen中,編譯不會斷開,會保持編譯中狀態中…

命令如下:

screen
make

blob.png

7.安裝內核模塊

執行命令

make modules_install

blob.png

最后竟然報錯了 ,在網上查找時,說是內存不夠,然后就增加了一個swap分區,并啟用,看是否能夠正常安裝內核模塊?blob.png

重新安裝內核模塊結果如下,沒有報錯,看來就是內存的原因了 

blob.png

8.安裝內核,然后reboot重啟,新內核無法讀取,只顯示了原內核,發現/boot/grub/gurb.conf文件中沒

有自動生成新內核條目,以下為手動添加,在重啟,新內核顯示了,且內核版本為3.18.41,內核編譯成功

以上出現的問題還需研究?。?/p>

blob.png

blob.png

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

(0)
qiuweiqiuwei
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • 淺談篩選日志中的IP地址信息

    作為運維人員,經常會需要會對日志中的某些重要信息進行篩選,比如說ip等參數。 案例一:篩選出IP地址信息 日志信息如下: [root@C67-X64-A1 hanghang]# cat test.txt  Jul 13 08:13:09 localhost sshd[14678]…

    系統運維 2016-07-22
  • 計算機組成、Linux命令基礎

    計算機組成 控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。 運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 存儲器(Memory):存儲器的功能是存儲程序、數據和各種信號、命令等信息…

    Linux干貨 2016-09-19
  • 腳本小練習

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。                            …

    Linux干貨 2016-08-15
  • 查找 -數據結構

    幾種查找算法:順序查找,折半查找,分塊查找,散列表 一、順序查找的基本思想:  從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查找成功,并給出數據元素在表中的位置;若整個表檢測完,仍未找到與kx 相同的關鍵碼,則查找失敗,給出失敗信息。 說白了就是,從頭到尾,一個一個地比,找著相同的就成功,找不到就失敗。很明顯的缺點就是查找效…

    Linux干貨 2015-07-28
  • 對軟連接進行cp,rm

    軟連接的原理 圖1 由 1 號inode 讀取到連結檔的內容僅有檔名,根據檔名鏈接到正確的目錄去取得目標文件的inode , 最終就能夠讀取到正確的數據了。 軟連接的使用 創建軟連接,從下圖可以看出軟連接的大小是11個字節,對比/etc/passwd和passwdlns可知他們不是同一個文件。 在復制cp的時候對軟連接的處理 對指向文件的的軟連接:使用cp …

    Linux干貨 2017-02-25
  • 【N25第四周作業】grep

    文本處理工具: Linux上文本處理三劍客: grep, egrep, fgrep:文本過濾工具(模式:pattern)工具; grep:基本正則表達式,-E,-F egrep:擴展正則表達式, -G,-F grep:不支持正則表達式, sed:stream editor, 流編輯器;文本編輯工具; awk:…

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