zoukankan      html  css  js  c++  java
  • grub启动流程和配置

    grub stage  1

           MBR中前 446个字节,如果把这里面的内容损坏,那么系统会认为当前磁盘没有启动引导功能,会尝试从光盘或者网络启动系统

    grub  stage  1.5

           存放识别/boot分区的文件系统的驱动,一般占用的空间是在MBR扇区后面的27个扇区

           如果数据被损坏,启动系统的时候还是会从磁盘引导,但是不会出现启动菜单.会一直出现黑屏等待状态

    grub  stage 2

       只要看到内核的启动菜单,表示已经成功的进入了grub的stage 2阶段,因为启动菜单是在2 stage生成的.

       

      读取grub.conf文件

     

    系统启动到执行启动第一个进程

        1.通过grub stage1 中的MBR 找到 grub stage 1.5

        2.通过读取存储在stage 1.5中的/boot分区的驱动文件使grub能够以文件的方式读取/boot分区下面的文件

        3.通过stage2中读取/boot/grub.conf加载linux内核文件到内存,然后再加载虚拟文件系统initramfs使内核能够以文件系统的方式识别操作系统的根分区

        4.grub程序在加载完成内核后,会把程序执行权限移交给内核

        5.当内核识别操作系统的根分区后,启动系统的第一个进程,执行系统初始化脚本

    grub命令

       1.grub-install      /dev/sda            修复grub1  1.5  2  所有阶段的数据  修复的时候不依赖于任何外部配置文件

       2.grub中对应的/根分区不是操作系统的根分区,它代表的是/boot分区

       3.(hd0,0) 表示第一块磁盘的第一个分区  即代表sda1

       4.(hd0)    表示第一块磁盘    即表示sda

       5.grub是一个交互式命令       (1) grub    >  (2)  root(hd0,0)    >   (3) setup(hd0)

       6.grub这个命令依赖于/boot/grub目录下的一些配置文件,如果这些文件被删除或者移动,那么使用grub命令无法正常修复

       7.如果没有使用grub修复过系统,那么/boot/grub/目录下的文件只有两个文件影响系统启动(grub.conf 和 splash.xpm.gz)

          如果使用过grub修复过系统,那么 /boot/grub 目录下的其它配置文件同样会影响到系统启动.

       

    系统启动脚本流程(系统启动第一个进程后/sbin/init)

         /etc/rc.d/rc.sysinit:    系统初始化脚本(系统启动后运行的第一个脚本)

            1.设置主机名

            2.设置欢迎信息

            3.激活udev和selinux

            4.挂在/etc/fstab文件中定义的文件系统

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

            6.激活swap设备

            7.根据/etc/sysctl.conf文件设置内核参数

            8.激活lvm以及software raid设备

            9.加载额外设备的驱动程序

       运行设定级别脚本

            根据设定的启动级别,执行 /etc/rc.d/rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  中的其中一个目录下的脚本

            按照文件名中包含的数字从小到大依次执行各个服务脚本

               1.先执行k开头的叫不能文件 停止相关服务

               2.再执行s开头的脚本文件    启动相关服务

           系统启动最后执行的启动脚本是   /etc/rc.local  这个脚本是等所有的服务脚本执行完后才会执行的

          可以把一些简单的命令写到这个文件作为开机启动命令

          读取/etc/inittab(读取系统启动级别)  》  /etc/rc.d/rc.sysinit    》  /etc/rc.d/rc[0-6].d目录下的所有脚本   》/etc/rc.local 脚本

     1 [root@yxh6 rc.d]# ls
     2 init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
     3 [root@yxh6 rc.d]# cd rc3.d
     4 [root@yxh6 rc3.d]# ls
     5 K01smartd          K69rpcsvcgssd      K95firstboot     S15mdmonitor         S28autofs
     6 K02oddjobd         K73winbind         K99rngd          S22messagebus        S50bluetooth
     7 K05wdaemon         K74ntpd            S01sysstat       S23NetworkManager    S55sshd
     8 K10psacct          K75ntpdate         S02lvm2-monitor  S24nfslock           S80postfix
     9 K10saslauthd       K75quota_nld       S05rdma          S24openct            S82abrtd
    10 K15htcacheclean    K76ypbind          S08ip6tables     S24rpcgssd           S83abrt-ccpp
    11 K15httpd           K84wpa_supplicant  S10network       S25blk-availability  S90crond
    12 K30spice-vdagentd  K87restorecond     S11auditd        S25cups              S95atd
    13 K36mysqld          K88sssd            S11portreserve   S25netfs             S99certmonger
    14 K50dnsmasq         K89netconsole      S12rsyslog       S26acpid             S99local
    15 K50kdump           K89rdisc           S13cpuspeed      S26haldaemon
    16 K60nfs             K92iptables        S13irqbalance    S26udev-post
    17 K61nfs-rdma        K92pppoe-server    S13rpcbind       S27pcscd
    View Code
     设置系统服务开机启动或停止

          1.    chkconfig   --list   atd                                  查看atd服务开机设置状态

          2.    chkconfig    --level  235  atd off                 设置atd服务在2,3,5启动级别中为不启动状态

          3.    chkconfig    --level  235  atd  on                设置atd服务在2,3,5启动级别中为启动状态

          4.    不指定模式的时候,默认指定的是2,3,4,5模式

       

    自定义服务启动脚本

       1.必须首先在/etc/init.d目录下创建一个服务脚本,格式如下:

     1 #!/bin/bash
     2 #chkconfig: 35 96 03
     3 #description: test my service
     4 source /etc/init.d/functions
     5 case $1 in
     6  start)
     7      action "testservice is start"
     8      touch /var/lock/subsys/testservice
     9  ;;
    10  stop)
    11      rm -fr /var/lock/subsys/testservice
    12      action "testservice is stop"
    13  ;;
    14  status)
    15     [ -f /var/lock/subsys/testservice ] && echo testservice is starting || echo testservice is stoped
    16  ;;
    17 *)
    18   echo "usage start stop status"
    19  ;;
    20 esac
    View Code

       2.给服务脚本添加执行权限        chmod +x testservice.sh

       3.把服务脚本变成后台服务        chkconfig  --add  testservice

       4.系统启动时候这些显示都是执行都是 /etc/init.d目录下的后台脚本

       

      5.如果某个后台服务在启动时出现异常,把系统重启进入1模式, 然后执行 chkconfig   service  off.  最后正常重启后  修改服务脚本  

    xinetd管理的服务(非独立服务) 

         使用频率不高,如果设置为开机启动会浪费资源。如果设置为开机不启动,当有用户访问的时候再去启动就已经来不及了.

         xinetd管理的服务在开机的时候不用启动,由xinetd服务负责监听用户的请求.只有当用户访问这些服务的时候再由xinetd服务

         激活相应的进程,处理完用户的请求后被xinetd激活的服务又会自动关闭.

    centos7的Systemd服务

        centos7上由systemd代替了xinetd服务,启动系统的时候只启动systemd服务

        其它的服务都无需启动,只有被访问的时候才会由systemd激活

        这就是centos7系统启动比较快速的原因   按需启动服务的方式

  • 相关阅读:
    设计模式
    idea多个项目
    多个tomcat配置
    mysql数据库默认时间字段格式
    读取文件
    上传图片
    数据库创建用户授权
    统计12个月份的数据
    行列转换
    分页
  • 原文地址:https://www.cnblogs.com/yxh168/p/9016667.html
Copyright © 2011-2022 走看看