启动和内核管理

启动和内核管理 : 

    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,内核编译成功

以上出现的问题还需研究!!

blob.png

blob.png

原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/45873

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

相关推荐

  • 计划任务

    任务计划Linux任务计划、周期性任务执行未来的某时间点执行一次任务:atbatch:系统自行选择空闲时间去执行此处指定的任务周期性运行某任务:cron     at任务at命令:at [option] TIME常用选项:-V 显示版本信息:-l: 列出指定队列中等待运行的作业;相当于atq-d: 删除指定的作业;相当于atrm-c: 查…

    Linux干货 2017-08-28
  • 正则表达式grep,sed

    HTTP 一个简单的网页文件 service iptables stop echo “<h1>I  LOVE YOU</h1>” > /var/www/html/index.html 文本排序sort sort 1.txt   排序规则先数字后字母,小写字母在前。 sort -t “:&#82…

    Linux干货 2018-03-13
  • 配置DNS服务

    DNS:Domain Name System:域名系统 DNS:Domain Name System:域名系统 域名和IP地址相互映射的一个分布式数据库,使用户使用域名更方便的访问互联网,不用去记更利于机器读取的IP地址,域名解析由DNS服务器提供。 DNS服务器的类型: 主DNS服务器:管理和维护所负责解析的域内解析库的服务器 从DNS服务器:从主服务器或…

    Linux干货 2016-10-24
  • linux系统网络配置基础实例(网卡别名、bong、路由)

    概述:本文主要介绍网卡别名(一张网卡多个IP)、bonging(多张网卡绑定一个IP)、以及路由实验 Linux网络配置基础 基本网络配置 将Linux主机接入到网络,需要配置网络相关设置。一般包括如下内容:主机名:hostname示例:临时有效 [root@centos6 ~]# hostname MyHostName [ro…

    Linux干货 2016-09-06
  • N25第1周作业

    1.计算机的组成及功能 地址:博客园http://www.cnblogs.com/qingyangzi/p/6133274.html 2.linux主要的发行版及其区别和联系 地址:博客园http://www.cnblogs.com/qingyangzi/p/6135801.html 3.linux哲学思想 地址:博客园http://www.cnblogs.…

    Linux干货 2016-12-05
  • 初识mysql:基本原理和使用

    一、 数据库的出现      1. 数据库是什么: 数据库简单来说,就是存储数据的地方(废话),对于用户认证这个过程来说,当用户登录服务器时, 系统需要把用户的输入的用户认证信息和存储的用户认证信息进行比对,这一过程就需要事先把所有用户的信息存储在一个数据库中,然后逐条进行比对。早起最传统的数据库当然就是文本…

    Linux干货 2015-06-04