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系统启动比较快速的原因   按需启动服务的方式

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/yxh168/p/9016667.html
Copyright © 2011-2022 走看看