Linux啓動流程

    Linux內核是由單內核和支持動態裝卸載功能化模塊(.ko: kernel object)組成,所有的模塊都必須依託與內核才能運行,並且所有的模塊和內核版本對應使用,不能跨版本使用.

    Linux內核 內核的功能:
          進程管理:task_struct, scheduler  分配進程的CPU及內存資源使用
          內存管理:內存分配管理
          I/O管理:中斷及中斷處理
          文件系統:ext3, ext4, reiserfs, xfs
          驅動程序:驅動硬件設備
          安全相關: SELinux

          通用軟件,平臺類的軟件

   

一, Linux系統的初始化流程:POST --> BIOS (Boot Sequence) --> MBR(bootloader) -->  GRUB(bootloader (stage1: mbr; stage2: grub目錄中)) -->Kernel (CentOS5: initrd, CentOS6: initramfs) --> /sbin/init (CentOS5:/etc/inittab, CentOS6: /etc/inittab, /etc/init/*.conf)

          POST:ROM(開機自檢)+RAM

          BIOS: Boot Sequence

          MBR: 存儲於0磁道總共512字節大小的引導文件.其中 446字節的bootloader引導加載器,64字節設備分區表,2字節5A效驗

          GRUB: initrd或initramfs獨立於內核的一個根文件系統,幫助內核初始化,掛載根.在安裝時生成基礎硬件信息.

          kernel文件:基本磁盤分區

              /sbin/init在redhat和centos中內核啓動以後由init做爲所有用戶進程的父進程,負責管理用戶空間的進程.所以init的PID爲1,可執行文件位於/sbin/init

                  /etc/inittab 啓動配置文件

                  /etc/rc.d/rc.sysinit腳本 啓動

                  /lib/modules/  內核模塊

 

二,GRUB: GRand Unified Bootloader.Redhat6使用的一種BooTLoader,MBR中的前 446 個字節,它的作用是引導啓動內核。
 1,GRUB程序的組成,位於文件/boot/grub/,主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。

    1st stage: 位於MBR中,爲了引導2nd stage
    1.5 stage: 位於boot基本磁盤分區中,爲識別內核文件所在的文件系統提供文件系統識別擴展
    2nd stage: 位於boot基本磁盤分區中,GRUB的引導程序      配置文件grub.conf

 2,Grub的功能:
    (1)選擇要啓動的內核或系統;能隱藏選擇界面
    (2)提供交互式接口 e: 編輯模式 a:傳遞參數 c:grub命令行模式 p:輸入密碼,設置了密碼纔會出現該選項

wKiom1QEGmPBaWnlAAE1P2TZw3w443.jpg   

                編輯模式:b:啓動引導 e:選擇編輯的項 c:命令行模式 o:新建在上方一行 O:下方新建一行 d:刪除選擇的行 

wKiom1QEHYSDhicjAAF6FDce1gw997.jpg

   (3)提供基於密碼的保護,密碼保護的兩種模式
                單獨保護啓用內核映像使用密碼;
                定義在相應的全局段title上使用密碼進入編輯模式

wKioL1QEHGyAI-3aAABcdtY27Ho132.jpg
            grub-md5-crypt:生成MD5加密密碼


 3,grub.conf:配置文件的定義

default=0   #指定默認啓動的內核或OS;
timeout=5   #等待用戶選擇要啓動的內核或OS的時長,單位爲秒;
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz   #指定使用的背景圖片
hiddenmenu   #隱藏菜單
password --md5 ***  #說明設置進入編輯模式密碼爲MD5加密
title CentOS (2.6.32-431.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_jt-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_jt/lv_root rd_LVM_LV=vg_jt/lv_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img

             title: 操作系統或內核的標題.在title前加入password字段則對進入編輯模式加密碼,在title後加入password則只對啓動系統映象加密碼
             root: 設定內核文件所在的分區爲grub的根(不是操作系統的根)
             kernel: 定義要使用的內核文件,ro標識開始定義內核的根及相關quiet爲結束標識,可附加傳遞給內核的啓動參數,

             initrd: 指定爲內核提供額外驅動等功能的ram disk或ram fs文件


                 

 

 

三, init相關配置和功能 /etc/inittab:
CentOS5: 每一行定義一個操作
CentOS6: upstart 腳本

  1,配置文件:   每行定義一種操作:id:5:initdefault:

1,id: 操作的ID
2,runlevels: 在哪些級別下執行此操作
3,action: 動作常用的有initdefault,sysinit,wait,等
    initdefault: 設置默認運行級別,無需定義操作
    sysinit:指定系統初始化腳本
        si::sysinit:/etc/rc.d/rc.sysinit (id:si 所有級別 動作爲sysinit 操作爲:/etc/rc.d/rc.sysinit)
    wait: 等待系統切換至此級別時運行一次;
    ctrlaltdel: 定義組合鍵被按下時要運行的命令;
    respawn: 當指定操作進程被關閉時立即再啓動一次;
        tty1:2345:respawn:/sbin/mingetty tty1
4,process: 操作


 

  2,init要完成的任務:
   (1)設定默認運行級別
   (2)指定系統運行的初始化腳本
   (3)啓動指定級別下的要啓動的服務,並關閉需要停止的服務

       /etc/rc.d/ 腳本文件內有被註釋的chkconfig -** ** 定義啓動順序會被chkconfig命令讀取. /etc/rc.d/rcN.d (0-6)內S##代表啓動腳本,K##關閉腳本.在chkconfig 裏查看服務對應級別的開啓和關閉        rc0.d代表0級別的啓動服務連接文件
        rc1.d代表1級別的啓動服務連接文件
        rc2.d代表2級別的啓動服務連接文件
        rc3.d代表3級別的啓動服務連接文件
        rc4.d代表4級別的啓動服務連接文件
        rc5.d代表5級別的啓動服務連接文件
        rc6.d代表6級別的啓動服務連接文件

      運行級別: 0-6: 7個級別
        0:關機
        1: 單用戶模式, 直接以root用戶登錄(不用輸入root密碼)
        2:多用戶模式,不支持NFS文件系統
        3:完全多用戶模式,文本模式
        4:預留級別
        5:完全多用戶模式,圖形模式
        6:重啓    /etc/init.d/  
   (4)定義CtrlAltDel組合鍵的動作
   (5)初始化終端:
        終端:對應的是設備
             /dev/tty#, /dev/ttyS#, /dev/console, /dev/pts/#
        調用登錄入口:login-->/etc/issue     
        啓動圖形終端:
        X-Window, 桌面管理器

   (6)系統初始化腳本/etc/rc.d/rc.sysinit 
   (7)設置主機名
   (8)打印文本歡迎信息
   (9)激活SELinux和udev(探測裝載額外硬件設備)
   (10)激活swap
   (11)掛載/etc/fstab定義的本地文件系統
   (12)檢測根文件系統並對其以讀寫方式重新掛載
   (13)設置系統時鐘
   (14)裝載鍵盤映射
   (15)根據/etc/sysctl.conf設置內核參數
   (16)激活RAID和LVM設備
   (17)清理操作 

 

四,啓動故障修復

 1,在日常使用中可能會出現忘記root用戶密碼的情況,在系統啓動級別中1級別是可以不用輸入密碼進入系統.就可以利用這個特性去修改root密碼

    (1)在系統尚未啓動按↑↓鍵進入GRUB編輯模式修改啓動級別

wKiom1QENofwRaNAAABabGgvgXc168.jpg

        init的級別1的表示方式:1, s, single, S
        單用戶模式幾乎不會啓動任何服務,且不需要用戶登錄;但是會執行/etc/rc.d/rc.sysinit腳本;
        如是連/etc/rc.d/rc.sysinit文件也不加載,則傳遞 emergency

    (2)回車到GRUB選擇界面按B保存修改並啓動

    (3)進入系統修改root密碼

wKioL1QEOG6BPqiuAACwrCiQ0qU059.jpg

    (4)修改密碼以後不需要重啓,使用init命令切換運行級別即可:
            # init [0-6]

            查看運行級別:
            # runlevel
            # who -r

 2,grub配置丟失bootloader並未損壞的情況,在grub中添加原配置文件信息

    (1)在系統尚未啓動按↑↓鍵進入GRUB選擇C進入grub命令行模式

    (2)設置系統引導必須的root,kernel,initrd信息

grub配置丟失後在grub中添加原配置文件信息
grub> root (hd0,0)
grub> kernel /vmlinuz-2.6.32-431.el6.x86_64(grub中原配置文件信息,tab鍵可以找到的文件) ro root=/dev/vg0/root quiet
grub> initrd /initramfs-2.6.32-431.el6.x86_64.img(initrd通常爲cpio歸檔,並使用gzip壓縮;通常以.img作爲文件名後綴;,tab鍵可以找到的文件)
grub> boot

 3,grub程序損壞丟失,grub的安裝:
    (1)進入安裝模式選擇rescue installed system(救援已安裝系統)
    (2)/mnt/sysp_w_picpath 修復光盤在硬盤上檢測到的根並掛載到這個目錄
    (3)chroot /mnt/sysp_w_picpath 切換到這個需要修復的根系統
    (4)第一種方式:

# grub
grub> root (hd#,#)
grub> setup (hd#)
grub> quit

第二種方式:
    # grub-install --root-directory=/ /dev/sda
                                指定根目錄 指定磁盤硬件


五, 根據自己的需求製作一個簡單的可啓動的Linux,:
  1、給將要製作的目標磁盤分區掛載到宿主機上:/dev/sdb1, /dev/sdb2
    /dev/sdb1 掛載至 /mnt/boot  #bootloader不能識別lvm,xfs等高級文件系統
    /dev/sdb2 掛載至 /mnt/sysroot  #掛載內核系統根文件系統

  2、安裝grub至目標磁盤
   # grub-install --root-directory=/mnt /dev/sdb

  3、複製內核和initrd文件
   # cp /boot/vmlinuz-VERSION  /mnt/boot/vmlinuz
   # cp /boot/initramfs-VERSION.img  /mnt/boot/initramfs.img

  4、創建目標主機的根文件系統
   # mkdir -pv /mnt/sysroot/{etc/rc.d, usr, var, proc, sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root}

  5,利用腳本接着去移植bash等程序至目標主機的根文件系統;

  6、爲grub提供配置文件最基礎的title,root,kernel,initrd信息
  

# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title MageEdu Little Linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash
    initrd /initramfs.img

   

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