centos7 kafak 启动 centos7启动流程_加载

微内核设计使每种功能都单独独立出来.导致相互之间的逻辑关系变得很复杂.也有安全上的隐患.现在linux的内核是在单内核的基础上支持了模块化

linux把核心文件(文件系统之类)之外的其他功能多做成了模块化.支持了运行时的动态装/卸载

centos7 kafak 启动 centos7启动流程_centos7 kafak 启动_02

ramdisk就是为了解决这个矛盾的关系才存在的  ramdisk在内核之前装载到内存中 把内存中的某段空间当成磁盘来使用 让内核来当成根目录使用.内核把真根挂在进来之后让位 



CentOS系统启动流程: (仅用于MBR类型结构)


①POST(自检):

    加电自检,检查计算机各种硬件是否存在

    ROM : CMOS(最有代表性的)  通过ROM加载自检程序



②Boot Sequence

    根据BIOS中设定的启动顺序引导设备. 第一个有引导程序的设备即为文辞启动要用到的设备

    bootloader: 引导加载器.程序. 提供一个菜单.允许用户选择要启动的系统或不同的内核版本.

    并加载到RAM中 解压 把系统控制权移交给内核

        Linux : 




    CentOS 7 : GRUB 1.x

    bootloader装在MBR

    MBR:  (磁盘分区讲过) Master Boot Record





    注: GRUB会在最后进行单独介绍

③Kernel:

    自身初始化:





    init程序的类型:







    ramdisk:



        由于ramdisk是把内存中的部分空间当成硬盘来使用.所以需要数据时还是会从硬盘再            加载过来.这就造成了数据的两次读取 .所以会把ramdisk做成ramfs来优化


         工具程序: mkinitrd


            工具程序: dracut, mkinitrd



至此:内核级别的系统初始化流程为:

POST-->BootSequence(BIOS)-->Bootloader--> kernel(ramdisk)-->rootfs(只读方式)-->/sbin/init

rootfs以只读方式挂载根是因为防止在启动过程怕对文件进行修改 对系统造成损害

在启动了init之后就会init就会开始执行一系列操作:

用户空间的系统启动流程

设定默认运行级别-->系统初始化脚本-->启动/关闭相应级别下的服务-->启动终端


/sbin/init

    CentOS 有7个运行级别:

        0: 关机 init0



     3: 多用户模式 (multi user) 完全功能模式 文本界面 不激活桌面系统




    init # : 级别切换

    who -r | runlevel 可以查看当前系统的运行级别

    init的配置文件在/etc/inittab中

    

centos7 kafak 启动 centos7启动流程_CentOS_03

    以id:runlevels:action:process来定义每个相应级别的对应任务

        id: 任务的标识符

        runlevels: 在哪些级别启动此任务 #,###, 可以为空表示所有级别

        action: 在什么条件下启动此任务

        process: 任务 (通常是一个程序或者是脚本)

    action有:

        wait: 等待切换至此任务所在的级别时执行一次




    id的例:

        si::sysinit:/etc/rc.d/rc.sysinit   完成系统初始化

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


    mingetty只是用来打开终端的

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

    mingetty会调用login程序

            打开虚拟终端的程序除了mingetty之外 还有 getty


            启动图形界面   tty系列命令会一起出现 缺了哪个tty那个tty就无法运行

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

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



        只有切换至指定级别时运行一次 给 /etc/rc.d/rc  传递参数0~6 

        这个脚本会在切换界别时执行一次 对该级别下需要启动|关闭的服务进行相应操作

        核心部分为通过下面这段代码

        

centos7 kafak 启动 centos7启动流程_操作系统_04

        在每个级别对应的 /etc/rc.d/rc#.d 目录下存放着这些文件

    

centos7 kafak 启动 centos7启动流程_centos7 kafak 启动_05

    K开头的文件表示下次切换到该级别时需要关闭的服务

    S开头的文件表示下次切换到该级别时需要启动的服务

    上面的代码会通过读取指定开头全部文件来做相关的开启 关闭操作

    chkconfig 命令 : 管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态


    添加: chkconfig --add name   file必须是在/etc/init.d 下创建的才可以添加




 level里 - 表示所有级别一直都是关闭状态




    

===========================================================================================

grub

grub的主要作用是加载用户所选定的内核

grub在工作时有三个步骤:

    stage1:mbr   无法加载逻辑卷  所以内核只能放在基本卷中

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

stage2: 这个阶段存放在磁盘分区(/boot/grub)  这个分区上还有内核文件 ramdisk等 所以      grub能加载到内核文件

        stege2 及内核通常会单独放置于一个基本分区 但是不是必须的

        功用:

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

e: 编辑模式 用于编辑菜单

c: 命令模式 交互式接口

p: 输入密码 设定了密码的情况下 要先输入密码 否则没反应

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

允许传递参数给内核

可隐藏此菜单

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

为编辑菜单进行认证

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

     grub的命令行接口:    

    

centos7 kafak 启动 centos7启动流程_初始化_06

help: 获取帮助列表

help keyword : 详细指定命令的帮助

find (hd#,#) /path/to/somefile  find能查找到的文件是与启动相关的文件

root (hd0,0) 把哪个设备分区设定为根设备  

        (hd#,#) 第几块磁盘第几个分区 . 从零开始编号 hd0,0 第一个磁盘上的第一个分区

         -root是设置grub的跟设备  在root指定根设备的过程分为两种情况

            ①/boot在一个独立的分区

            root把grub所在的分区指为根 这样就能直接通过 /grub来启动了

            否则会出现一下这种情况

            

centos7 kafak 启动 centos7启动流程_操作系统_07

            此时root把/boot所在的区域指为根 就能解决这个死循环问题 grub是直接通                 过/grub来访问的

            ②/boot没有单独分区 在/分区下面 此时root就直接把真根指为根 

            此时grub的访问路径为 /boot/grub

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

例如 : init=/path/to/init  selinux=0  禁用selinux

    内核文件通常被取名为vmlinuz  z表示文件是以压缩格式存放的意思

initrd /PATH/TO/INITRAMFS_FILE:为选定的内核提供额外文件的ramdisk 必须与内核                                号完全匹配

boot: 引导启动选定的内核

    

        配置文件: /boot/grub/grub.conf   <-- /etc/grub.conf  链接指向/boot


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

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

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

hiddenmenu: 是否隐藏菜单

password [--md5] STRING 设定认证方式 

title TITLE: 定义菜单项标题   可出现多次 定义多个选项

root (hd#,#):grub查找stage2及kernel文件所在设备分区  必须要缩进写

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

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

password [--md5] STRING : 启动选定的内核或操作系统时进行的位置

        

centos7 kafak 启动 centos7启动流程_操作系统_08

这个设置对应于

    

centos7 kafak 启动 centos7启动流程_操作系统_09

     亲测 :不支持中文  按e进行编辑

    

centos7 kafak 启动 centos7启动流程_初始化_10

    可以按ESC返回  按C进入编辑模式

     注: 进入救援模式是从这里进行操作 进入的 具体方法 在上文中已经说过



转载于:https://blog.51cto.com/10998529/1729342