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系統啟動比較快速的原因   按需啟動服務的方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM