启动和内核管理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

评论列表(1条)

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

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