启动和内核管理2

五、自制linux系统

    分区并创建文件系统

        fdisk /dev/sdb

        分两个必要的分区

        /dev/sdb1对应/boot /dev/sdb2对应根 /

        mkfs.ext4 /dev/sdb1

    挂载boot

        mkdir /mnt/boot

        mount /dev/sdb1 /mnt/boot

    安装grub

        grub-install –root-directory=/mnt /dev/sdb

    恢复内核和initramfs文件

        cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

        cp /boot/initramfs-2.6.32-642.el6.x86_64.img/mnt/boot

    建立grub.conf:

        vim /mnt/boot/grub.conf

            title wanglinux

            root (hd0,0)

            kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash

            initrd /initramfs-2.6.32-642.el6.x86_64.img

    chroot /mnt/sysroot

    创建一级目录

        mkdir /mnt/sysroot

        mount /dev/sdb2 /mnt/sysroot

        mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

    复制bash和相关库文件

    复制相关命令及相关库文件

        如: ls,cat, vim,reboot,hostname等

六、排错

    救援环境

        在根文件系统无法使用时需要,如/bin/mount删除

        对系统没有特殊要求

        从光盘引导( boot.iso或者安装光盘#1)

        从USB盘(由boot.iso制作)引导

    文件系统重组

        Anaconda将会询问是否应该挂载文件系统

        /mnt/sysimage/*

        /mnt/stage2

        $PATH包括硬盘的目录

    文件系统节点

        提供系统特定的设备文件

        mknod了解major/minor #’s

    系统配置文件丢失修复

        系统在引导期间,很重要的一个过程就是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”表示覆盖安装,执行完成后,即已经恢复了此文件

        如果想只提取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目录下相应位置即可

七、内核编译

    单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

    内核组成部分:

        kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;

        kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/

        [ ]: N

        [M]: M

        [*]: Y

        辅助文件:

            ramdisk

            initrd

            initramfs

    内核版本

        运行中的内核:

        uname命令:

            uname – print system information

        uname [OPTION]…

             -n: 显示节点名称;

            -r: 显示VERSION-RELEASE;

            -a:显示所有信息

    内核模块命令

        lsmod命令:

            显示由核心已经装载的内核模块

            显示的内容来自于: /proc/modules文件

        modinfo命令:

            显示模块的详细描述信息

            modinfo [ -k kernel ] [ modulename|filename… ]

                -n: 只显示模块文件路径

                -p: 显示模块参数

                -a: author

                -d: description

                -l: license

            lsmod |grep xfs;modinfo xfs

    内核模块管理

        modprobe命令:装载或卸载内核模块

        modprobe [ -C config-file ] [ modulename ] [ moduleparame-ters… ]

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

            modprobe [ -r ] modulename…

    

        depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具

        装载或卸载内核模块:

            insmod命令:指定模块文件,不自动解决依赖模块

                insmod [ filename ] [ module options… ]

                insmod `modinfo –n exportfs`

                lnsmod `modinfo –n xfs`

            rmmod

                rmmod [ modulename ]

                rmmod xfs

                rmmod exportfs

    /proc目录:

    内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

        参数:

            只读:输出信息

            可写:可接受用户指定“新值”来实现对内核某功能或特性的配置

    /proc/sys

        (1) sysctl命令用于查看或设定此目录中诸多参数

            sysctl -w path.to.parameter=VALUE

            sysctl -w kernel.hostname=mail.magedu.com

        (2) echo命令通过重定向方式也可以修改大多数参数的值

            echo "VALUE" > /proc/sys/path/to/parameter

            echo “websrv” > /proc/sys/kernel/hostname

    sysctl命令

        默认配置文件: /etc/sysctl.conf

            (1) 设置某参数

                sysctl -w parameter=VALUE

            (2) 通过读取配置文件设置参数

                sysctl -p [/path/to/conf_file]

        内核中的路由转发:

            /proc/sys/net/ipv4/ip_forward

        常用的几个参数:

            net.ipv4.ip_forward

            net.ipv4.icmp_echo_ignore_all

            vm.drop_caches

/sys目录:

        sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性。

        udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序

        专用工具: udevadmin, hotplug

        udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下

    ramdisk管理

        ramdisk文件的制作:

            (1) mkinitrd命令

                为当前正在使用的内核重新制作ramdisk文件

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

            (2) dracut命令

                为当前正在使用的内核重新制作ramdisk文件

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

    编译内核

        前提:

            (1) 准备好开发环境

            (2) 获取目标主机上硬件设备的相关信息

            (3) 获取目标主机系统功能的相关信息

                例如:需要启用相应的文件系统

            (4) 获取内核源代码包

                www.kernel.org

        开发环境准备

            包组(CentOS 6):

                Server Platform Development

                Development Tools

        目标主机硬件设备相关信息:

            CPU:

                #cat /proc/cpuinfo

                #x86info -a

                #lscpu

        硬件设备

            PCI设备:

                lspci

                    -v

                    -vv

                lsusb

                    -v

                    -vv

                lsblk 块设备

            了解全部硬件设备信息

                hal-device

    内核编译安装系统

        安装开发包组

        下载源码文件

        .config:准备文本配置文件

        make menuconfig:配置内核选项

        make [-j #]

        make modules_install:安装模块

        make install :安装内核相关文件

            安装bzImage为/boot/vmlinuz-VERSION-RELEASE

            生成initramfs文件

            编辑grub的配置文件

    编译安装内核实例

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

        cd /usr/src

        ln -sv linux-3.10.67 linux

        cd /usr/src/linux

        cp /boot/config-$(uname -r) ./.config

        make help

        make menuconfig

        make -j 2

        make modules_install

        make install

        reboot

    编译内核

        (1) 配置内核选项

            支持“更新”模式进行配置: make help

                (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项

                (b) make menuconfig:基于curses的文本窗口界面

                (c) make gconfig:基于GTK (GNOME)环境窗口界面

                (d) make xconfig:基于QT(KDE)环境的窗口界面

            支持“全新配置”模式进行配置

                (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置

                (b) make allyesconfig: 所有选项均回答为“yes“

                (c) make allnoconfig: 所有选项均回答为"no“

        (2) 编译

            全编译:make [-j #]

            编译内核的一部分功能:

                (a) 只编译某子目录中的相关代码:

                    # cd /usr/src/linux

                    # make dir/

                (b) 只编译一个特定的模块:

                    # cd /usr/src/linux

                    # make dir/file.ko

                    例如:只为e1000编译驱动:

                #make drivers/net/ethernet/intel/e1000/e1000.ko

    如何交叉编译内核:

        编译的目标平台与当前平台不相同;

            # make ARCH=arch_name

    要获取特定目标平台的使用帮助

        # make ARCH=arch_name help

        # make ARCH=arm help

    在已经执行过编译操作的内核源码树做重新编译:

    需要事先清理操作:

        # make clean:清理大多数编译生成的文件,但会保留config文件等

        # make mrproper: 清理所有编译生成的文件、 config及某些备份文件

        # make distclean: mrproper、 patches以及编辑器备份文件

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

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

相关推荐

  • 文本处理工具之sed

    文本处理工具之sed 1、sed是一种行编辑器,对文本逐行处理。处理时,它会将文本行载入”模式空间”(临时缓冲区),接着用sed命令对模式空间的内容进行处理,处理完成后,将模式空间内容输出到显示屏 与之类似的处理工具还有grep和awk,相比grep,sed不仅对文本有过滤功能,还可以对文本进行其他增删改的操作。而相比awk,sed显得更加简单高效。下面我们…

    2017-03-18
  • Web缓存核心技术点需知

    Edit Web缓存核心技术点需知 5.1 HTTP首部控制 5.2 基于新鲜度检测机制: 2.1 特征1:时间局部性 2.2 特征2:空间局部性 2.3 缓存的优点 2.4 哪类数据应该被缓存 2.5 哪类数据可缓存但不应该被缓存 2.6 缓存命中率决定缓存有效性 2.7 缓存数据生命周期 2.8 缓存处理步骤 2.9 缓存和普通数据读取的区别 1. 完整…

    Linux干货 2016-11-14
  • 马哥教育网络班21期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@itop ~]# cp -r /etc/skel /home/tuserl [root@itop ~]# chmod -R&nbsp…

    Linux干货 2016-08-01
  • shell脚本编程之if条件判断与for、while、until循环

    一、if语句 语法: if 测试条件1 ; then        分支1 elif  测试条件2; then        分支2 … else&nbsp…

    Linux干货 2015-08-24
  • N25-Bazinga-第三周作业

    N25-Bazinga-第三周作业 1.列出当前系统上登录的所有用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# w | cut -d' ' -f1 | uniq -c |&nbs…

    Linux干货 2016-12-21
  • Linux sed命令详则

    sed命令 sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前的行储存在临时缓存区中,称为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓存区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed…

    2017-08-11

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 11:08

    可以参考别人笔记,但是我们一定要将别人的笔记转换成自己的东西