linux開機啓動流程

目錄

1 linux啓動過程linux啓動流程:

2 GRUB使用

3 內核初始化

 

一、BIOS初始化和自檢

POST(加電--加載ROM芯片中的BIOS啓動代碼--BIOS執行自檢程序(初始化硬件並檢測硬件是否工作正常)

    BIOS:存在於ROM中,保存基本的輸入輸出程序,系統該信息設置,自檢程序,系統啓動自舉程序

  CMOS:存在於RAM中,保存實時時鐘和 硬件配置信息和參數的設定按DEL可進入BIOS設置CMOS保存這些設置

  

 

二、裝載引導程序MBR(BIOS會讀取CMOS的信息獲得硬件配置和啓動順序)

BIOS會根據啓動順序 讀取某硬件(HD CD-ROM USB等)的MBR啓動引導程序(512b)並把控制權交給boot loader也就是交給了GRUB

   MBR3部分(如硬盤HD 0磁盤0分區1扇區 512b

       主引導程序 boot loader  446b(GRUB程序安裝在bootloader)

       分區表partition tables    64b

       校驗位magic muber 55AA   2b

 

           boot loader分類:GRUB是bootloader一種

               LILO ARM

               GRUB PC和服務器用

三、GRUB啓動引導階段

找到BMR的boot loader也就找到了GRUB

   GRUB引導過程:

      加載stage1,stage1通常位於MBR中,用於裝載stage2

      加載stage1.5,用於識別文件系統

      加載stage2,grub的核心程序

          注意:stage1.5和stage2文件位於/boot/grub目錄下

          使用/boot/grub/grub.conf配置文件來加載linux內核

四、內核引導(加載內核)

      1 自動識別文件系統

      2 加載linux內核vmlinuz到內存

           內核取得控制權,放到/boot (vmlinuz是一個gzip壓縮文件,加載時需要使用gzip解壓)

      3 加載initrd*.img鏡像到內存(通常是加載USB,LVM,RAID,SCSI等設備模塊和磁盤接口的驅動程序)

          臨時構建只讀的/文件系統,在這個文件系統各種執行臨時的init進程

           臨時init進程作用:

                  把硬件驅動運行起來,磁盤、聲卡、網卡等關鍵驅動的加載

      4 有了驅動,內核再去掛載真正的跟文件系統,內核吧控制權交給 /sbin/init進程

五、系統初始化和引導login

      1 系統初始化:

      運行/sbin/init程序進行初始化(使用配置文件/etc/inittab和/etc/init目錄下的文件),/etc/inittab設置系統的默認級別

         *運行/etc/rc.sysinit

             @獲取網絡環境

             @初始化硬件

             @設置主機名

             @設備映射器及相關初始化

             @初始化LVM

             @文件系統檢測

             @啓用磁盤配額和更新配額

             @掛載設備(根據/etc/fstab配置文件進行掛載)

             @清除開機過程中所產生垃圾文件

             @啓用交換分區

             @將信息寫入/var/log/dmesg文件

          *運行/etc/rc.local

          *按照設定的級別啓動相關的服務,使用/etc/rc.d/rc*.d目錄下的程序啓動服務;*表示0-6的7個級別。

           /etc/rc.d/rc*.d目錄下的文件由啓動狀態(S 表示啓動,K 表示不啓動)、啓動順序、和啓動服務程序三部分組成。

           

       引導用戶登錄login

          *運行/sbin/mingetty登錄程序

             用戶登錄(輸入用戶名和密碼)-->使用/etc/passwd和/etc/shadow檢測正確性-->運行/etc/profile、~/.bash_profile、

             ~/.bashrc、/etc/bashrc

             

       進入用戶桌面,運行相應的桌面程序(gdm gnome桌面,kde kde桌面,xdm 啓動X Windows)

       wKiom1i_qMrAGb3uAAixY_zIucM025.jpg-wh_50


 

  練習:(1)在系統開機時自動設置別名rm='rm -fr',並檢驗是否生效

               vim ~/.bashrc

      (2)如果忘記密碼怎麼辦?要求進入單用戶模式將root用戶密碼刪除

      (3)將系統的默認級別設置爲3

            vim /etc/inittab

      (4)將/boot所在的分區掛載從/etc/fstab文件裏面刪除,然後重啓機器進行恢復。

 

GRUB的使用:

/boot/grub/grub.conf配置文件

-------------------------------

default=0    #設定默認啓動的title的編號,從0開始

timeout=5    #等待時間 秒

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #背景圖片

hiddenmenu   #隱藏菜單

 

#passwordlitao_59   #grub的密碼

#password--md5 密文  #grub的密碼

 

titleCentOS (2.6.32-279.el6.x86_64)   #內核標題 或操作系統的名稱。可改。

       root (hd0,0)   #內核文件所在的設備 (hd磁盤,分區)

       kernel /vmlinuz-2.6.32-279.el6.x86_64 roroot=UUID=46eb83e8-17fc-4de6-9d39-50a47216881a rd_NO_LUKS  KEYBOARDTYPE=pcKEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgbquiet  #內核路徑和參數

       initrd /initramfs-2.6.32-279.el6.x86_64.img #initrd路徑(小根)

-------------------------------

 

------------------------------------------------------------------

  啓動流程2 GRUB界面init 

------------------------------------------------------------------

 

如何生成MD5密文:

    grub-md5-crypt

 

查看運行級別命令:

    1:runlevel

    2:who -r

 

查看內核版本號:

    uname -r 

 

1安裝修復GRUB:

    #grub

    grub> root (hd0,0)    指定ROOT(磁盤,分區)

    grub> setup (hd0) 安裝grub(磁盤)

 

2安裝修復GRUB:

    #grub-install --root-directory=/ boot的父目錄 /dev/sda1

 

3grub損壞時啓動內核:

    grub> find (hd0,0) 查找內核所在分區

    grub> root (hd0,0)

    grub> kernel /路徑

    grub> initrd /路徑

    grub> boot 啓動

 

Kernel初始化過程:

 

1 設備探測

2 驅動初始化(可能從initrd(initramfs)文件裝在驅動模塊)

3 以只讀方式掛載根

4 裝在第一個進程init (PID:1)

 

 

/sbin/init:(/etc/inittab)

    5.5 init 傳統 串行

    6.3 upstart:ububtu開發 並行啓動

    7.0 systemd: 並行啓動

 

標識符:運行級別:什麼情況下執行此行:要運行的程序

 

什麼情況下:

    initdefault  默認

    sysinit      初始化

    wait     等待級別切換到此級別是執行

    respawn      程序終止時重新執行

 

/etc/rc.d/rc.sysinit

    初始化流程 配置文件

 

/etc/rc.d/rc3

    啓動系統服務配置文件

 

------------------------------------------------------------------

啓動流程腳本SysV服務腳本

------------------------------------------------------------------

SysV /etc/rc.d/init.d

 

    start | stop | restart | status

 

chkconfig: 運行級別 ss kk

    當chkconfig來爲此腳本在rc#.d目錄穿件鏈接時,運行級別表示默認

    創建爲S*開頭的鏈接,除此之外的級別默認創建爲K*開頭的鏈接。

 

chkconfig命令:

    查看獨立進程:    chkconfig --list 進程名

    加入進程 chkconfig --add 進程名

    刪除進程 chkconfig --del 進程名

 

設定服務開機啓動或關閉:

    chkconfig {--level 指定級別} 服務名稱 (ON|OFF)

              默認2345

 

/etc/rc.d/tc.local

    系統最後一個服務,可用於用戶自定義開機啓動的程序

 

/etc/inittab的任務

    1設定默認級別

    2運行系統初始化腳本

    3運行指定運行級別對應的目錄下的腳本

    4設置重啓組合鍵

    5定義UPS電源

    6啓動虛擬終端(2345)

    7啓動圖形界面)(5)

 

守護進程:

 

    獨立進程(httpd vsftp)  需要關聯到運行級別

 

    超級守護進程 xinetd (NFS) 不需要關聯到運行級別

         啓動NFS:先啓動xinetd  然後啓動NFS

         關閉NFS:先關閉NFS     然後關閉xinetd

         開機啓動NFS : chkconfig 進程名 (ON |OFF)

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章