天天看點

Linux學習日志(十二)

Linux核心

OS

核心的功能

程序管理:task_struct,scheduler
記憶體管理:
I/O管理:中斷及中斷處理
檔案系統:ext3,ext4,reiserfs,xfs
驅動程式:
安全相關:SELinux


##定義:是通用軟體,平台類的軟體 
           

核心設計流派:

單核心:單一體系結果

Linux 
         子產品化設計:核心+外圍功能性子產品組成                  ko:kernel object 
         核心支援動态裝解除安裝子產品
           

微核心:核心子系統

windows 
       Solaris
           

fork() :

init:負責管理使用者空間的程序
   init:PID 1      
           

Linux系統的初始化流程

POST:

ROM+PAM
           

BIOS:

boot sequence 
           

MBR :

466:bootloader
64: 分區表
2: 5A  
           

Kernel檔案:基本磁盤分區,無法放在LVM

vmlinuz 壓縮存放,有兩段代碼組成,一個解壓代碼,一個為核心代碼


    /sbin/init
    /lib/modules/
           

initrd :

rd:ram disk 
           

/sbin/init:

/etc/inittab
  /etc/rc.d/rc.sysinit 腳本
  init:
    CentOS 5: SysV格式的系統初始化程式
        串行化:100
    CentOS 6:Upstart
         Dbus
              A
               B
              C

     SystemD:參考OS X中并行初始化過程
           

運作級别:

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

/sbin/init的配置檔案(centos5):

每行定義一種操作:
  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中定義的操作:

設定預設運作級别
   指定系統運作的初始腳本
   啟動指定級别下的要啟動的服務,并關閉需要停止的服務
   定義ctrlAltDel組合的動作
   初始化字元終端
   啟動圖開終端
           

流程: post–>BIOS (boot sequence)–>MBR(bootloader)–>Kernel (Centos: initrd, Centos6:intramfs)–>/sbin/init (Centos5:/etc/inittab,Centos6:/etc/inittab,/etc/init/.conf)*

/etc/inittab:

CentoS5: 每一行定義一個操作
CentoS6: Upstart腳本

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
      啟動圖開終端     
           X-Windos,桌面管理器
           

啟動初始化腳本/etc/rc.d/rc.sysinit

設定主機名
 激活SELinux和Udev     
 激活swap 
 挂載/etc/fstab定義的本地檔案系統
 檢測根檔案系統并對其以讀寫方式重新挂載
 設定系統時鐘
 裝載鍵盤映射
 根據/etc/sysctl.conf設定核心參數
 激活RAID和LVM裝置
 清理操作
           

MBR (446位元組)

bootloader:程式 
     LILO: Linux Loader    
            不能引導位于1024,Cylinder以後的分區中的OS
           

GRUB:Grand Unified Bootloader

1st stage: 位于MBR中(為引導2nd)
            1.5 stage: 位于boot基本磁盤分區中,為識别核心檔案所在的檔案系統提供檔案識别擴充 
            2nd stage: 位于boot基本磁盤分區中,GRUB的引導程式 
             boot分區大小:
                 CentOS5:100M 
                 Centos6:200M 

      /boot/grub/
         stage2:讀取配置檔案grub.conf            
         groub.conf
           

Group的功能:

1.選擇要啟動的核心或系統
 2.互動式接口
         e:編輯模式
 3.基于密碼保護
       1.啟用核心映像
            定義在響應title下
       2.傳遞參數(進入編輯模式)
                在配置檔案中 輸入 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
           

啟動流程: POST–》BIOS(boot sequenc)—-》GRUB(bootloader(Stage1:mb4;stage2;grub目錄中))–>kernel(initrd)–>shell

HOST :主控端

Target:目标機

制作基于HOST制作一個簡單的可啟動的linux;

1.給目标磁盤分區  兩個: 主控端上:/dev/sdb1 /dev/sdb2
       /dev/sdb1 挂載至 /mnt/boot
       /dev/sdb2 挂載至  /mnt/sysroot
   2. 安裝grub至目标磁盤
        grob-install --root-directory=/mnt /dev/sdb
   3. 複制核心和Initrd的檔案
          cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz

          cp /root/initramfs-VERSION.img /mnt/root/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} 

        ***接着去移植bash等至目标主機的根檔案系統  ***
  5.為grub提供配置檔案

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

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),數字越小,優先級越大


     chkconfig --add 添加服務

     指定級别
     --level 

     删除:
     chkconfig --del 
           

繼續閱讀