Linux的初始化流程

pathfinder_cui發表於2015-09-10
POST:ROM+RAM
 BIOS:Boot Sequence

 MBR:
     446:bootloader,還要能識別檔案系統
     64:分割槽表,16個位元組一個分割槽
     2:5A
 
 kernel檔案:基本磁碟分割槽,無法放在LVM上
             vmlinuz 壓縮存放,有兩段程式碼組成,一個解壓程式碼,一個為核心程式碼
 /sbin/init
 /lib/
 
 initrd:
    rd:ram disk

 /sbin/init:
      /etc/inittab
         /etc/rc.d/rc.sysinit指令碼



 init:
    CentOS 5: SysV格式的系統初始化程式
         序列化:
    CentOS 6:Upstart
         dbus
           A
       B
       C
     SystemD:參考OS X中並行初始化過程

   執行級別:
     0-6:7個級別
        0:關機
    1:單使用者模式,直接以root使用者登入
    2:多使用者模式,不支援NFS檔案系統
    3:完全多使用者模式,文字模式,不啟動圖形介面
    4:預留級別
    5:完全多使用者模式,圖形模式
    6:重啟

/sbin/init的配置檔案:
    每行定義一種操作:
      id:操作的id
      執行級別:runlevels:在那些級別下執行此操作
      action:動作
         initdefault:設定預設執行級別,無需定義操作
           sysinit:指定系統初始化指令碼
       si::sysinit:/etc/rc.d/rc.sysinit
     wait:等待系統切換至此級別時執行一次;
     ctrlaltdel:定義組合鍵被按下時要執行的命令:
     respawn:當指定的操作程式被關閉時立即在重啟一次
       tty1:2345:respawn:/sbin/mingetty tty1
      process:操作
   /etc/inittab中定義的操作(init要完成的任務)
      指定預設執行級別
      指定系統執行的初始指令碼
      啟動指定級別下的要啟動的服務,關閉要停止的服務
        /etc/init.d
             /etc/rc.d/rc.N.d(0-6)
                s##
            k##
      定義ctrlaltdel組合的動作
      初始化字元終端
          終端:對應的是裝置
                /dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#
      呼叫:login-->/etc/issue
      啟動圖形終端
cmdline:核心啟動時傳遞給核心的引數
系統初始化指令碼:/etc/rc.d/rcinit
      設定主機名:
      列印文字歡迎資訊
      啟用SELinux和udev
      啟用swap
      掛載/etc/fstab定義的本地檔案系統
      實現檢查根檔案系統並對其以讀寫重新掛載
      設定系統時鐘
      裝載鍵盤對映
      根據/etc/sysctl.conf設定核心引數
      啟用RAID和LVM裝置
      清理操作
MBR:
    bootloader:引導載入器,是一個程式
         LILO:LInux LOader
          不能引導位於1024 Cylinder(柱面)以後的分割槽中的os;
     GRUB:GRand Unified Bootloader
          1st stage:位於MBR中,為了引導2nd stage
          1.5 stage:位於boot基本磁碟分割槽中,為識別核心檔案所在的檔案系統提供檔案識別擴充套件
          2nd stage:位於boot基本磁碟分割槽中,GRUB的引導成勳
              boot分割槽大小
             Centos5:100M
             Centos6:200M

          /boot/grub/
             stage2:讀取配置檔案grub.conf
          Grub的功能:
          1.選擇要啟動的核心或系統
              隱藏互動式介面
          2.互動式介面
              e: 編輯模式
          3.基於密碼保護
              啟用核心映像
              定義在響應title下
          傳遞引數(進入編輯模式)
           在配置檔案中 輸入 password --md5 密碼
           定義在全域性段中
          grub介面
          title:作業系統或核心的標題
              root:設定核心檔案所在的分割槽為grub的根
                  kernel:定義要使用的檔案,後面可以附加傳遞給核心的啟動引數
          initrd:指定為核心提供額外驅動等功能的ram disk或ram fs檔案
          
      init的級別1的表示方法:
           1,s single S
           單使用者模式幾乎不會啟動任何服務,且不需要使用者登入;單是會執行/etc/rc.d/rc.sysinit指令碼
           如果連/etc/rc.d/rc.sysinit檔案也不載入,則傳遞emergency

           執行級別的切換
           #init [0-6]
           檢視執行級別:
                  runlevel
          who -r
        grub.conf配置檔案語法:
       default=#:指定預設啟動的核心或os
       timeout=#:等待使用者選擇要啟動的核心或os的時長,單位為秒鐘
       splashimage=   :指定使用的背景圖片
       hiddenmenu:隱藏選單
       title
          root(hd0,0)
                    (Device Part)
             Device(磁碟)表示方式:在grub中,統統以hd開頭,並緊跟一個數字做各磁碟裝置的標記,從0開始
             part表示方式:代表分割槽,從0開始編號
           kernel
                指定核心檔案及傳遞給核心的引數
            引數:ro root=裝置檔案,quiet 靜默模式輸出
        initrd
            檔案:通常為cpio歸檔,並使用gzip壓縮,通常以.img作為檔案字尾名

         grub的安裝:
        第一種方式
        #grub
          grub root(hd0,0)
          grub setup(hd0)
          grub quit

         第二種方式:
         # chroot /mnt/sysimage
         # grub-install --root-directory=/ /dev/sda


         sync 將記憶體檔案載入到硬碟上
啟動流程:POST-->BIOS(boot sequence) --> GRUB(bootloader(stage1:mbr;stage2:grub目錄中)) --> kernel(initrd) --> SHELL

  HOST:宿主機
  Target:目標機
 
  基於HOST只做一個簡單的可啟動的Linux
   1.給目標磁碟分割槽
      兩個:
         宿主機上:/dev/sdb1 /dev/sdb2
     /dev/sdb1 掛載至 /mnt/boot
         /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/iniyramfs.img

    4.建立目標檔案的根系統檔案
       mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}
       接著去移植bash等至目標主機的根檔案系統

     5.為grub提供配置檔案
       vim /mnt/boot/grub/grub.conf
       default=0
       timeout=5
       title
         root(hd0,0)
     kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
     initramfs /initramfs

Linux的核心,單核心,支援動態裝載和解除安裝
      模組:/lib/modules/Kernel_version/


      檢視pci裝置的命令
      lspci -v

      檢視當前核心裝載的所有模組
      lsmod

      檢視某模組的詳細資訊
      modinfo 模組

      動態解除安裝某模組
         modprobe -r 模組
         rmmod 模組

       動態裝載某模組
          modprobe 模組
      insmod 路徑檔案


       /sbin/init
          /etc/inittab
       /etc/rc.d/rc.sysinit
        啟動對應級別的需要啟動的服務。停止需要關閉的服務
         /etc/rc.d/rcN.d/
           S##
           K##
         符號連結:/etc/init.d

         ##:表示優先順序(0-99),數字越小,優先順序越大

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29620572/viewspace-1796329/,如需轉載,請註明出處,否則將追究法律責任。

相關文章