Linux之Centos系統的啟動流程詳述

概述

了解系統的啟動流程,有助于我們了解Linux系統上的一些工作原理,有助于我們深入的理解一個系統的運作方式,那么本篇就以CentOS6系統為例,介紹一下有關Linux系統啟動相關的內容,分為一下幾個部分

1、Linux系統的一些基礎概念

2、CentOS6上的啟動流程概述


第一章 Linux系統的一些基礎概念

Linux系統的組成部分:內核(kernel)+根文件系統(rootfs)
   rootfs:程序和glibc(GNU發布的libc庫)
       庫:
           函數集合,function,調用接口(頭文件負責描述)
           過程調用:procedure,無返回值
           函數調用:function
       程序:二進制執行程序

   內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能
       進程的通信
           IPC:Inter Process Communication
           消息隊列、semerphor、shm(共享內存):本地的通信機制
           socket:跨主機的通信機制

運行中的系統環境可分為兩層:內核空間、用戶空間
   用戶空間:應用程序(進程或線程)
   內核空間:內核代碼(系統調用)

內核設計流派:
   單內核設計:把所有的功能集成與同一個程序;
       Linux
   微內核設計:每種功能使用一個單獨的子系統實現;
       Windows、Solaris

Linux內核特點:
   支持模塊化: .ko(kernel object)
       如:文件系統,硬件驅動,網絡協議等
   支持模塊運行時動態裝載或卸載;

啟動分區:/boot
   rootfs:遵循FHS目錄結構
   如:/bin
,/sbin./lib,/etc,/etc,/proc,/sys,/dev,/boot

   組成部分:
       核心文件:/boot/vmlinuz-VERSION-release
           在www.kernel.org的官方站點有各種內核版本
               mainline:開發版本
               stable:穩定版本
               longterm:長期維護版本
ramdisk(輔助的偽根系統):系統在啟動時,根文件系統一定是在某個磁盤分區上,而內核如果沒有編譯該文件系統的相關驅動,就會導致系統無法正常啟動;并且內核需要夾在的各種模塊文件,其都在/lib/modules/目錄下,此目錄也必然是在根目錄下,而根無法驅動,也會造成模塊無法正常運行,進而不能進入系統.此時ramdisk的作用就體現出來,因為ramdisk是在/boot目錄下,/boot目錄是有grub的1.5階段進行驅動的,它的作用就是一個偽根系統,內核在啟動之后會驅動他到內存中,來對系統中的相關驅動和模塊進行啟動和運行,等待所有任務執行之后就會切換給真正磁盤根目錄.
   Centos5:/boot/initrd-VERSION-release.img
   Centos 6,7:/boot/initramfs-VERSION-release.img
       模塊文件:/lib/modules/VERSION-release
            如果安裝了多個內核版本,則對應的目錄下就有多個文件,或多個目錄


第二章 Centos系統的啟動流程

POST(Power On Self Test):加電自檢;
   自檢主要是檢測一下硬件設備是否存在并且正常運行;這些自檢的功能是有一個軟件程序來實現的,這個軟件程序就是BIOS;
   ROM:CMOS
       BIOS:Basic Input and Output System
           BIOS即基本輸入輸出系統,他是裝載與一個硬件芯片CMOS之上.
   ROM+RAM

Boot Sequence(MBR):
   按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備;

   bootloader:引導加載器,程序;
   linux:
       LILO:LInux LOader
       GRUB:Grand Uniform Bootloader
           GRUB 0.X:Grub legacy
           GRUB 1.X:Grub2
       功能:提供一個菜單,允許用戶選擇要啟動的系統或不通的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,解壓,展開,而后把系統控制權移交給內核;

   MBR:Master Boot Record
       512bytes:
           446bytes:bootloader
           64bytes:fat
           2bytes:55AA

   GRUB:
       bootloader(MBR): 1st stage
       Partltion:filesystem driver;1.5 stage
       Partltion:/boot/grub;2nd stage

   注意:UEFI,GPT

   Kernel:
       自身初始化:
           探測可識別到的所有硬件設備;
           加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)
           以只讀方式掛載跟文件系統;
           運行用戶空間的第一個應用程序:/sbin/init

       init程序的類型:
           Centos 5-:SysV init
               配置文件:/etc/inittab
                   每行定義一種action以及與之對應的process
                       id:runlevels:action:process
                           id:一個任務的標識符;
                           runlevels:在哪些級別下啟動此任務;(#,###,也可以為空,表示所有級別)
                           action:在什么條件下啟動此任務;
                               walt:等待切換至此任務所在的級別時執行一次;
                               respawn:一旦此任務終止,則自動重新啟動之;
                               initdefault:設定默認運行級別;此時,process省略;
                               sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;
                                   例如:
                                   id:3:initdefault:
                                   si::sysinit:/etc/rc.d/rc.sysinit
                                   l0:0:walt:/etc/rc.d/rc 3
                                   l1:1:walt:/etc/rc.d/rc 1
                                   ..........
                                   l6:6:walt:/etc/rc.d/rc 6
                                       意味著去啟動或者關閉/etc/rc3.d/目錄下的服務腳本所控制的服務;
                                       K*:要停止的服務;K##*:優先級,數字越小,越是優先關閉;依賴的服務先關閉;而后關閉被依賴的;
                                       S*:要啟動的服務;S##*:優先級,數字越小,越是優先開啟;被依賴的服務先啟動;而依賴的服務后啟動;
                                       rc腳本:接受一個運行級別數字為參數;
                                           腳本框架:
                                               for srv in /etc/rc.d/rc#.d/K*;do
                                                   $srv stop
                                               done

                                               for srv in /etc/rc.d/rc#.d/S*;do
                                                   $srv start
                                               done
                                           /etc/init.d/* (/etc/rc.d/init.d/*)腳本執行方式:
                                               # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
                                               # service SRV_SCRIPT {start|stop|restart|status}
                           process:任務;

           Centos 6-: Upstart
               配置文件:/etc/inittab

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

       ramdisk:
           Linux內核的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問;

               ramdisk-->ramfs

               Centos 5:initrd
                   工具程序:mkinitrd

               Centos 6,7:initramfs
                   工具程序:dracut,mkinitrd

   系統初始化流程(內核級別):
       POST-->BootSequence(BIOS)-->BootLoader(MBR)-->kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()

       /sbin/init:

           Centos 5: SysV init

               運行級別:為了系統的運行或維護等目的設定的機制;
                   0-6:7個級別
                   0:關機,shutdown
                   1:單用戶模式(single user),root用戶,無須認證,維護模式;
                   2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式
                   3:多用戶模式(multi user),完全功能模式;文本界面;
                   4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用;
                   5:多用戶模式(multi user),完全功能模式;圖形界面
                   6:重啟,reboot

               默認級別:3,5
                   對于服務器一般為3,個人使用為5;

               級別切換: init #

               級別查看:
                   who -r
                   runlevel
                       N表示上一次級別

chkconfig命令:管控/etc/init.d/每個服務腳本在各級別下的啟動或關閉狀態;
   查看: chkconfig --list [name]

   添加: chkconfig --add name
       能添加的服務的腳本定義格式之一:
           #!/bin/bash
           #
           #chkconfig LLL KK SS
           #description:
               LLL:運行在哪些級別之上
               KK:停止的優先級
               SS:啟動的優先級
       能添加的服務的腳本定義格式之二
          ### BEGIN INIT INFO
          # Provides: foo
          # Required-Start: bar
          # Defalt-Start: 2 3 4 5
          # Default-Stop: 0 1 6
          # Description: Foo init script
          ### END INIT INFO
   刪除:chkconfig --del name

   修改指定的鏈接類型:
       chkconfig [--level LEVELS] name <on|off|reset>
           --level LEVELS:指定要控制的級別;默認為2345

注意:正常級別下,最后啟動的一個服務S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local腳本;為服務腳本的程序期望能開機自動運行時,直接放置于此腳本文件中即可

   tty1:2345:respawn:/usr/sbin/mingetty tty1
   ....
   tty6:2345:respawn:/usr/sbin/mingetty tty6
       (1)mingetty會調用login程序;
       (2)打開虛擬終端的程序除了mingetty之外,還有諸如getty等;

總結(用戶空間的啟動流程):/sbin/init(/etc/inittab)
   設置默認運行級別-->運行系統初始化腳本,完成系統初始化-->關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務-->設置登錄終端[-->啟動圖形終端]

   系統初始化腳本:/etc/rc.d/rc.sysinit
       (1)設置主機名;
       (2)設置歡迎信息;
       (3)激活udev和selinux;
       (4)掛載/etc/fstab文件中定義的所有文件系統;
       (5)檢測跟文件系統,并以讀寫方式重新掛載根文件系統;
       (6)設置系統時鐘;
       (7)根據/etc/sysctl.conf文件的設置,來設定內核參數;
       (8)激活lvm及軟raid設備;
       (9)激活swap設備;
       (10)加載額外設備的驅動程序;
       (11)清理操作;

Centos 6:
   init程序:upstat,但依然為/sbin/init,其配置文件:
       /etc/init/*.conf,/etc/inittab(僅用于定義默認運行級別)
           注意:*.conf為upstat風格的配置文件;
               rc.conf
               rcS.conf
               start-tty.conf

Centos 7:
   init程序:systemd,配置文件:/usr/lib/systemd/system/*,/etc/systemd/system/*
   完全兼容SysV腳本機制,因此,service命令依然可用;不過,建議使用systemct命令來控制服務;
       #systemctl {start|stop|restart|status} name[.service]

 

原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/49685

(0)
KartikKartik
上一篇 2016-09-29 10:10
下一篇 2016-09-29 21:31

相關推薦

  • NFS實現(雙httpd + php-fpm + nfs + mysql 搭建discuz論壇)

    NFS相關介紹一、NFS簡介1. NFS(Network File System): NFS是一個文件共享協議, 也是是在類Unix系統中在內核中實現的文件系統。2. 起源: 最早是由SUN公司研發,非常古老,只是實現文件共享,安全控制方面比較簡陋。 版本有, NFSv1, NFSv2,NFSv3,NFSv4. v4版開始支持kerber…

    Linux干貨 2016-10-19
  • linux 網路管理路由和team網絡組

    如何實現把linux當路由器來使用,實現不同網段之間的通信訪問,這就是今天所要實現的路由配置   環境準備:4臺虛擬機,兩臺中間兩臺作為路由器來使用(每天主機兩塊網卡),其他兩臺作為終端主機,目的是讓不同網段的兩臺主機之間互相訪問(這里在vmware里面做的實驗,所以網卡的類型都設置為橋接)   拓撲圖:   步驟一:將A、D兩…

    Linux干貨 2017-05-07
  • linux 加密和證書

    安全目標:機密性:明文傳輸的ftp, http,telnet 不安全數據完整性:身份驗證:可用性:安全技術:認證,授權,安全通信,審計密碼算法和協議:對稱加密,公鑰加密,單向加密,認證協議 1、對稱加密:加密,解密使用同一個秘鑰,效率高 DES:Data Encrption Standard, 56bit3DES:AES:AdvancedBlowfish缺點…

    2017-09-11
  • linux-系統啟動和內核管理

    一、Linux 組成及啟動過程 Linux: kernel+rootfs    kernel:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能      IPC:Inter Process Communication  &nbsp…

    Linux干貨 2016-09-26
  • 服務器故障的解決方法以及基本腳本的編寫

    1,當開機時一直重新啟動怎么辦? 在開機時就如字符界面后按下a鍵然后進入單用戶模式,通過設置 [root@CentOS6 boot]# vim /etc/inittab 這個文件,將里面的開機啟動項改為多用戶模式就可。 # id:3:initdefault: “/etc/inittab” 26L, 884C 講id這項設置完成后重新啟動就好。 2,忘記roo…

    Linux干貨 2017-05-15
  • awk與systemd

    GNU awkGNU awk 文本處理三工具:grep,sed,awk    grep,egrep,fgrep:文本過濾工具    sed:行(流)編輯器    awk:報告生成器,格式化文本輸出 awk awk: Aho, Weinberger, Kerni…

    Linux干貨 2016-09-22
欧美性久久久久