20170903 系统启动与内核管理(二)

  • 自制linux系统
  • /proc目录
  • /sys目录
  • 内核编译

一、自制linux系统

  • 分区并创建文件系统
    fdisk /dev/sdb
    设计成:/dev/sdb1对应/boot目录 /dev/sdb2对应根目录
    mkfs.ext4 /dev/sdb1
    mkfs.ext4 /dev/sdb2

  • 挂载boot
    mkdir /mnt/boot:子目录必须为boot,grub-install安装时会自动寻找/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 DIY_linux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
//虽然制作系统时,硬盘名称为/dev/sdb,但是制作完成后硬盘拆下来作为启动磁盘时名称应为/dev/sda,故root=/dev/sda2
//selinx=0用于禁用selinux,保证启动过程顺利
//没有默认初始化程序/sbin/init,设置为/bin/bash保证系统能够启动
initrd /initramfs-2.6.32-642.el6.x86_64.img
  • 创建一级目录
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和相关库文件
    利用脚本将程序和相关依赖的库文件复制到/mnt/sysroot

二、/proc目录

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

  • 参数:分为只读参数和可写参数

    • 只读:输出信息
    • 可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
  • /proc/sys:有两种方式修改目录下的参数

    • echo命令:通过重定向方式修改大多数参数的值
      echo "VALUE" > /proc/sys/path/to/parameter
    • sysctl命令:用于查看或设定此目录中诸多参数
      sysctl -w path.to.parameter=VALUE
  • 无论是sysctl命令还是echo命令重定向,对内核参数的修改都只在本次开机中有效,重启后修改的设置消失。通过修改/etc/sysctl.conf文件,可以实现永久生效。

  • sysctl命令用法:

    • sysctl -w parameter=VALUE:修改参数值,临时生效
    • sysctl -p:重新读取配置文件/etc/sysctl.conf使之生效,永久生效
    • sysctl -a:查看所有生效的参数
  • 实验:修改/proc/sys/net/ipv4/icmp_echo_ignore_all参数

1、echo修改参数值为1

2、sysctl修改参数值为0

可以看到其他主机对本机的ping命令在修改参数值为1后,忽略了icmp请求,当参数值改为0后,恢复了对icmp请求的响应。可以看到ping结果中的断层。

3、修改/etc/sysctl.conf文件,将参数改为1
在文件中加入一行net.ipv4.icmp_echo_ignore_all=1,执行sysctl -p重新读取配置文件

注意:删除之前增加的记录,执行sysctl -p重新读取配置文件后,会发现参数并没有消失。这是因为sysctl -p命令在读取配置文件后,对当前参数执行的是覆盖操作,而配置文件里面没有的参数将保留原状。

三、/sys目录

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

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

    • udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/usr/lib/udev/rules.d目录下,使用udevadm trigger命令可以使修改的规则文件立即生效

四、内核编译

(一)内核的组成与管理
  • 内核组成部分:一般可以理解分为内核核心和内核对象

    • kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE。还有内核启动需要的辅助文件ramdisk,与kernel位于相同目录下,名称为initramfs-VERSION-RELEASE-img。
    • kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/目录下。
  • 系统信息查询uname:
    uname -n:显示主机名称,等于hostname命令
    uname -r:显示内核版本信息
    uname -a:显示所有信息

  • 内核模块管理

    • lsmod命令:显示核心已经装载的内核模块
      显示的内容来自于: /proc/modules文件
    • modinfo命令: 显示模块的详细描述信息
      语法:modinfo [options] module_name
      -n: 只显示模块文件路径
      -p: 显示模块参数
      -a: author
      -d: description
      -l: license
    • modprobe命令:装载或卸载内核模块
      语法:
      modprobe module_name:装载内核模块,自动解决依赖模块
      modprobe -r module_name:卸载内核模块
    • depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具
    • insmod module_name:装载内核模块,不自动解决依赖模块
    • rmmod module_name:卸载模块
(二)编译内核前的准备工作
  • 准备工作一:
    开发环境准备:安装Server Platform Development和Development Tools包组

  • 准备工作二:获取主机硬件设备的相关信息

    • 查询CPU信息:
      cat /proc/cpuinfo
      x86info -a
      lscpu
    • 查看PCI设备信息:
      lspci
      lsusb
      lsblk
    • 了解全部硬件设备信息
      hal-device(CentOS 6专有)
  • 准备工作三:下载源码文件

(三)编译内核
  • 第1步,内核选项配置
    准备文本配置文件.config,位于源码解压缩目录中。里面详细说明了每个内核编译选项的配置。可以复制/boot/config-VERSION-RELEASE文件,并改名为.config
    ,再根据需要修改。

    make menuconfig:配置内核选项的字符界面工具,以源码目录下的.config为模板,可以对.config文件进行微调。
    菜单选项分为[ ], [M], []三种类型:[ ]指明该选项不编译,[M]指明该选项编译为内核模块,[]选项指明该选项编译进入kernel文件

    在general setup-->local version中,自定义内核本地版本号

  • 第2步,编译过程
    make [-j #]:-j 选项指定几个CPU核心用于编译内核

  • 第3步,安装
    make modules_install:安装模块
    make install :安装内核相关文件,完成以下几个工作

    • 安装bzImage为/boot/vmlinuz-VERSION-RELEASE
    • 生成initramfs文件
    • 编辑grub的配置文件
(四)编译内核清理
  • make clean:清理大多数编译生成的文件,但会保留config文件等
  • make mrproper:清理所有编译生成的文件、config及某些备份文件
  • make distclean:mrproper、patches以及编辑器备份文件
(五)卸载内核
  • 删除/lib/modules/目录下不需要的内核库文件
  • 删除/usr/src/linux/目录下不需要的内核源码
  • 删除/boot目录下启动的内核和内核映像文件
  • 更改grub的配置文件,删除不需要的内核启动列表

你可能感兴趣的:(20170903 系统启动与内核管理(二))