启动和内核管理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
下一篇 2016-09-18

相关推荐

  • httpd配置支持https

    httpd配置支持https 建一台私有CA 配置httpd支持ssl协议以及使用证书 测试基于https访问的相应主机 rpm包安装的httpd https https 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,也被称为HTTP over TLS,HTTP over SSL或HTTP …

    Linux干货 2016-12-21
  • 磁盘术语与磁盘管理

    磁盘术语与磁盘管理 磁盘术语 扩展1-4 逻辑5- sector 512 6位 sector 10位 track 1024 cylinder 8位head 256 0-1023 2^6=64 512*63*1024*256 cylinder=512*63*256 10M CHS 设备文件 磁盘设备的设备文件命名:/dev/DEV_FILE SCSI, SAT…

    Linux干货 2017-05-15
  • CentOS系统安装

    centos系统安装        安装程序:anaconda,Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。此外,其还支持许多启动参数,熟悉这些参数可为安装带来很多方便。该程序的功能是把位于光…

    Linux干货 2016-09-23
  • N21天天第十五周课程练习

    1、总结sed和awk的详细用法; sed Sed本质上是一个编辑器,但是它是非交互式的;同时它又是面向字符流的,输入的字符流经过sed的处理后输出。 Sed本身是一个管道命令,可以分析standard input的,主要是用来分析关键字的使用、统计等,此外还可以将数据进行替换、删除、   选取特定行等功能 格式:sed&nbs…

    Linux干货 2016-12-05
  • 硬链接与软链接

    引言: 链接,一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 Inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。 Block:存放档案内容数据的地方。 &n…

    Linux干货 2016-10-20
  • 关于大型网站技术演进的思考(十四)–网站静态化处理—前后端分离—上(6)

    原文出处: 夏天的森林    前文讲到了CSI技术,这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了,而时下web前端技术的前沿之一就是前后端 分离技术了,那么在这里网站静态化技术和前后端分离技术产生了交集,所以今天我将讨论下前后端分离技术,前后端分离技术讨论完后,下一篇文章我将会以网站 静态化技术…

    Linux干货 2015-03-11

评论列表(1条)

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

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