zoukankan      html  css  js  c++  java
  • LinuxDay16——启动流程和内核管理

    CentOS 5和6的启动流程

    Linux: kernel+rootfs

      kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

      rootfs: 

        glibc

      库:函数集合,function,调用接口

        过程调用:procedure(没有任何返回值即结果)

        函数调用:function(必有返回值即结果)

      程序

    内核设计流派:

      单内核设计:集中管理,linux

        把所有功能集成于同一个程序;

      微内核设计:分散管理,Windows,solaris

        每个功能使用一个单独子系统实现;

    Linux内和特点:

      支持模块化:.ko

      支持模块的动态装载和卸载;

    组成部分:

      核心文件:/boot/vmlinuz-VERSION-release(压缩格式)

        ramdisk:

          CentOS 5:/boot/initrd-VERSION-release.img

          CentOS 6:/boot/initrmfs-VERSION-release.img

      模块文件:/lib/modules/VERSION-release

    CentOS 系统启动流程:

    I POST:加电自检;

      ROM:CMOS

        BIOS:Basic Input&Output System

        ROM+RAM

    II BOOT Sequence:引导加载次序

      按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备;

      bootloader:引导加载器,程序

        windows:ntloader

        Linux:

          LILO:lInux LOader(早期or安卓手机中)

          GRUB:GRand Uniform Bootloader

            GRUB 0.X:GRUB Legac

            GRUB 1.X:GRUB2

        功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权交给内核;

      MBR:主引导记录 (0磁道0扇区)

        446:bootloader

        64:fat 磁盘分区表 (文件系统分配表)

        2:55AA

      GRUB:

        bootloader:1st stage 位于MBR(主要目的是找到硬盘上的第二阶段)

        1.5stage(帮助GRUB识别分区文件系统)(安装时匹配好文件系统 放置在MBR之后的扇区)

        disk:2nd stage

    III kernel:

      自身初始化:

        探测可识别到的所有硬件设备;

        加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

        以只读方式挂载根文件系统;

        运行用户控件的第一个应用程序:/sbin/init

        

      init程序的类型:

        sysV:init,CentOS 5

          配置文件:/etc/inittab

        Upstart:init,CentOS 6

          配置文件:/etc/inittab, /etc/init/*.conf

        Systemd:systemd,CentOS 7

          配置文件:/usr/lib/systemd/system,/etc/systemd/system

      ramdisk:

        内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

          ramdisk --> ramfs

          CentOS 5:initrd,工具程序:mkinitrd

          CentOS 6:initramfs,工具程序:mkinitrd,dracut

      系统初始化(前半段):

      POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(取决于配置文件)

    IV /sbin/init

      CentOS 5:

        运行级别:为例系统的运行或维护等应用目的而设定:

          0~6:7个级别

          0:关机

          1:单用户模式(root,无需登录),single,维护模式;

          2:多用户模式,会启动网络功能,但不会启动NFS;维护模式;

          3:多用户模式,正常模式;文本界面;

          4:预留级别;可同3级别;

          5:多用户模式,正常模式;图形界面

          6:重启

        默认级别:

          3,5

        切换级别

          init 0

        查看级别

          runlevel

          who -r

    V 配置文件:/etc/inittab

      每一行定义一种action以及与之对应的process

        id:runlevel:action:process

          action:

    wait:切换至此级别运行一次;

    respawn:此process终止,就重新气动之;

    initdefault:设定默认运行界别:process省略

    sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit;

    ...

    id:3:initdefaule:设定默认级别3

    si: :sysinit:/etc/rc.d/rc.sysinit

    l0:0wait:/etc/rc.d/rc 0

    l1:1wait:/etc/rc.d/rc 1

    ...

        l6:6wait:/etc/rc.d/rc 6

    说明 rc 0 --> 意味着读取/etc/rc.d/rc0.d

    K*:K##* 运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;

    S*:S##* 运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖别的服务;

    for srv in /etc/rc.d/rc0.d/K*;do

      $srv stop

    done

    for srv in /etc/rc.d/rc0.d/S*;do

      $srv star

    done

    chkconfig命令

    查看服务在所有级别的启动或甘比设定情况;

    chkconfig --list name

    添加:

    SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)

    chkconfig --add name

    #!/bin/bash

    #

    # chkconfig: LLLL(0~6)级别 nn(S#) mm(K#)

    删除:

    chkconfig --del name

    修改指定的链接类型

    chkconfig [--level levels] name <on|off|reset>

    --level LLLL: 指定要设置的级别;省略默认表示2345

    注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此不便或不需写为服务脚本放置位于/etc/rc.d/rc.local文件中/etc/rc.d/rc.local在指定运行级别脚本后运行;可以根据情况,进行自定义修改;

    tty1:2345:respawn:/usr/sbin/mingetty tty1

    tty2:2345:respawn:/usr/sbin/mingetty tty2

     ...

    tty6:2345:respawn:/usr/sbin/mingetty tty6

    mingetty会自动调用login程序

    x:5:respawn:/etc/X11/prefdm -nodaemon

    VI /etc/rc.d/rc.sysinit: 系统初始化脚本

    (1)设计主机名;

    (2)设置还原信息;

    (3)激活udev和SELinux

    (4)挂载/etc/fstab文件中定义的文件系统;

    (5) 检测根文件系统,并以读写方式重新挂载根文件系统

    (6) 设置系统时钟

    (7) 激活swap设备

    (8) 根据/etc/sysctl.conf文件设置内核参数

    (9) 激活lvm及software raid设备

    (10) 加载额外设备的驱动程序

    (11) 清理操作

    总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> 关闭对应下需要关闭的服务,启动需要启动的服务 --> 设置登录终端

    CentOS 6:

      init程序为:start其配置文件:

        /etc/inittab, /etc/init/*.conf,

        注意:/etc/init/*.conf配置文件的语法 遵循 upstart配置文件语法格式,和CentOS5不同

    启动系统时,设置其运行级别1;

    进入单用户模式:

    (1) 编辑grub菜单(选定要编辑的title,而后使用e命令)

    (2) 在选定的kernel后附加

    1, s, S或single都可以

    (3) 在kernel所在行,键入“b”命令

    (4)passwd

    GRUB(Boot Loader):

    GRUB:GRand Uniform Bootloader

      GRUB 0.X:GRUB Legac

      GRUB 1.X:GRUB2

    grub Legacy

      stagel:mbr

      stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

      sstage2:磁盘分区(/boot/grub)

      配置文件:/boot/grub/grub.conf <-- /etc/grub.conf

      stage2及内核等通常放置于一个基本磁盘分区

    功能

    (1)提供菜单、并提供交互式接口

    a:编辑模式,用于编辑菜单;

    c:命令模式,交互式接口;

    (2)加载用户选择的内核或操作系统

    允许传递参数给内核

    可隐藏此菜单

    (3)为菜单提供了保护机制

    为编辑菜单进行认证

    为启用内核或操作系统进行认证

    注意* 若/boot未独立分区(即boot在根下): grub寻找文件路径为 /boot/grub/grub.conf

    若/boot独立分区:grub寻找文件路径为(即绕过boot) /grub/grub.conf

    如何识别设备:

    (hd#,#)

    hd#:硬盘编号,用数字表示;从0开始编号

    #:分区编号,用数字表示;从0开始编号

    (hd0,0)第一块硬盘第一分区

    grubd命令行接口

    help:获取帮助列表

    help KEYWORD :详细列出信息

    find (hd#,#)/PATH/TO/SOMEFILE查找某个文件

    root(hd#,#)

    kernel /PATH/TO/KERNEL_FILE:设定本次启动时间用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

    例如:init=/path/to/init,selinux=0

    initrd /PATH/TO/KERNEL_FILE:设定为选定的内核提供额外文件的ramdisk

    boot:引导启动选定的内核;

    手动在grub命令行接口启动程序;

    grub > root(hd#,#)

    grub > kernel /vmlinuz-VERSION-release ro root=/dev/DEVICE

    grub > initrd /initramfs-VERSION-release.img

    grub > boot

    配置文件:/boot/grub/grub.conf

    配置项

    default=#:指定默认启动的菜单项;菜单项(title)编号从0开始

    timeout=#:指定菜单项等待选项选择的时长

    splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE;指明菜单背景图片文件路径

    hiddenmenu:隐藏菜单

    password [--md5] STRING;菜单编辑认证

    title TITLE:定义菜单项“标题”。可出现多次

    root (hd#,#),grub查找stage2及kernel文件所在设备分区,为grub的“根”

    kernel /PATH/TO/VMLUNZ_FILE [PARAMETERS]:启动的内核

    initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件

    password [--md5] STRING;启动选定的内核或操作系统时进行认证;

      grub-md5-crypt(openssl) 命令

    进入单用户模式:

      (1)编辑grub菜单(选定要编辑的title,而后使用e命令);

    (2)在选定的kernel后附加

        1,s,S,或single都可以

      (3)在kernel所在行,键入“b”命令;

    CentOS7系列启动流程

     CentOS7与6版本的不同之处:

    6 : grub0.9和upstart

    7 : grub2和systemd

    主要介绍一下grub2和systemd吧,其他的启动流程几乎一样

    grub2

    /etc/default/grub
    /boot/grub2/grub.cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg 生成grub2的配置文件
    *在救援模式下修复grub
    # chroot /mnt/sysimage
    # grub2-install /dev/sda
    # grub2-mkconfig -o /boot/grub2/grub.cfg

    在grub命令行启动系统
    > insmod xfs
    > set root=(hd0,1)
    > linux16 /vmlinux-... root=/dev/sda2 selinux=0
    > initrd16 /initramfs-...

    systemd

    系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

    Systemd新特性:

    系统引导时实现服务并行启动

    按需启动守护进程

    自动化的服务依赖关系管理

    同时采用socket式与D-Bus总线式激活服务

    系统状态快照

    unit:表示不同类型的systemd对象

    /usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于6系列的/etc/init.d/目录的功能

    /run/systemd/system:系统执行过程中所产生的服务脚本

    /etc/systemd/system:管理员建立的执行脚本,功能类似于6系列中/etc/rc.d/rcN.d/Sxx目录的功能

    类型:

    Service unit: (.service),用于定义系统服务

    Target unit: (.target),用于模拟实现运行级别

    Device unit: (.device),用于定义内核识别的设备

    Mount unit: (.mount),定义文件系统挂载点

    Socket unit: (.socket), 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动

    Snapshot unit: (.snapshot),管理系统快照

    Swap unit: (.swap), 用于标识swap设备

    Automount unit:(.automount),文件系统的自动挂载点

    Path unit:(.path),用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务

    systemctl命令

    相关管理工具:

    sysctl修改内核参数的工具

    -p 重新读入/etc/sysctl.conf

    -a 列出当前生效的内核参数

    -w net.ipv4.ip_forward = 1 即时生效

    uname

    -r:显示内核版本号

    -a:显示全部信息

    -n:显示主机名

    lsmod:显示已经装载的模块

    modinfo:显示模块的详细信息

    -n:显示模块路径

    -p:显示模块参数

    -a:显示模块作者

    -d:显示模块描述信息

    -l:显示模块的遵循的协议

    modprobe:装载模块

    -r:卸载模块

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

    insmod:指定装载模块文件,但不自动解决依赖模块

    rmmod:卸载模块

    time cmd 检测命令执行花的时间

    lscpu:查看CPU信息

    lspci:查看pci相关信息

    lsusb:查看usb相关信息

    lsblk:查看块设备相关信息

    hal-device:查看所有硬件信息(CentOS6.x)

  • 相关阅读:
    Nginx使用
    MySQL 分区
    php PDO预处理
    php
    php
    linux 下编译安装MySQL
    php 工厂模式
    MySQL 权限管理
    hadoop集群安装20181016(20111130:前面太忙,没有写完,后面继续)
    JavaScript函数参数翻转——连接多个数组——zip、zipwith
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/9032604.html
Copyright © 2011-2022 走看看