1. 程式人生 > >Linux 啟動流程及制作光盤鏡像

Linux 啟動流程及制作光盤鏡像

目的 清理 詳解 vml ESS initramfs load 裝載 歡迎信息

  • 1、 簡述linux操作系統啟動流程

  • 技術分享圖片

    • POST (加電自檢):自檢主要硬件設備如:CPU、內存、硬盤是否正常,以及輸入輸出設備是否存在問題等。
      BootSequence(BIOS):BIOS(基本的輸入輸出系統)裝載在硬件芯片CMOS之上,自檢時會啟動這個程序,並根據CMOS上的配置信息去讀取其他的硬件信息,檢測正常之後進行硬件設備的初始化。

    • Bootloader(MBR):引導加載程序,在MBR(主引導記錄)中,主要功能是識別,加載系統的核心文件,並提交到內存中運行來啟動對應的系統。

    • Kernel(ramdisk):Kernel會自身初始化,探測可識別的硬件設備,Kernel是存在硬盤之中的,但是在內核啟動時還沒有加載硬盤,為了解決這個問題Kernel內核通過ramdisk(虛擬文件系統)來加載硬件程序,為防止根文件系統加載時出現bug等問題無法挽回的情況,以只讀方式來掛載根文件系統,來完成跟文件系統的初始化。

    • rootfs (switch_root):啟動真正的根文件系統,然後虛擬的根文件系統與真正的根文件系統進行交換。

    • /sbin/init(/etc/inittab, /etc/init/*.conf, /usr/lib/system/system/):
      在內核、硬件及驅動信息加載完畢後,內核會運行用戶空間的第一個應用程序:/sbin/init.包括系統的主機名、網絡管理、文件系統格式等其他服務。

    • 默認運行級別、系統初始化、關閉及啟動服務、啟動終端(圖形終端):
      這裏我將這4步歸納在一起,默認運行級別根據系統的設定來啟動系統要進入的運行級別,默認的運行級別有7種;系統初始化時運行的腳本在/etc/rc.d/rc.sysinit配置文件中;關閉及啟動服務意味著啟動或關閉/etc/rc.d/rc#.d/目錄下的服務腳本所控制的服務,最後就是啟動終端(圖形終端)了.

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

    默認級別:3, 5

    級別切換:init #

    級別查看:
    who -r
    runlevel

    系統初始化腳本:/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) 清理操作;

    • 2、簡述grub啟動引導程序配置及命令行接口詳解

      grub的版本分為grub 0.X(grub legacy)、grub 1.X(grub 2),目前centos 5 和centos 6使用的是grub legacy版本,centos 7使用的是grub 2版本的啟動引導程序。
      其中grub legacy中有三個階段;
      stage1: bootloader(MBR);
      stage2:MBR之後的扇區,讓stage1的bootloader能識別stage2所在的分區上的文件系統;
      stage3:磁盤分區(/boot/grub/)

    • grub配置文件:/boot/grub/grub.conf
      [root@localhost ~]# cat /boot/grub/grub.conf 
      # grub.conf generated by anaconda
      #
      # Note that you do not have to rerun grub after making changes to this file
      # NOTICE:  You have a /boot partition.  This means that
      #          all kernel and initrd paths are relative to /boot/, eg.
      #          root (hd0,0)
      #          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
      #          initrd /initrd-[generic-]version.img
      #boot=/dev/sda
      default=0
      timeout=5
      splashimage=(hd0,0)/grub/splash.xpm.gz
      hiddenmenu
      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/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
      initrd /initramfs-2.6.32-431.el6.x86_64.img

      配置項:
      default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始;
      timeout=#:指定菜單項等待選項選擇的時長;
      splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
      hiddenmenu:隱藏菜單;
      password [--md5] STRING: 菜單編輯認證;
      title TITLE:定義菜單項“標題”, 可出現多次;
      root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的“根”;
      kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核
      initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
      password [--md5] STRING: 啟動選定的內核或操作系統時進行認證;

    grub的界面支持命令行接口,在界面中輸入c進入命令行模式

    技術分享圖片

    技術分享圖片

    • grub的命令行接口
      help: 獲取幫助列表
      help KEYWORD: 詳細幫助信息
      find (hd#,#)/PATH/TO/SOMEFILE:
      root (hd#,#)
      kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數;
      例如:init=/path/to/init, selinux=0
      initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;
      boot: 引導啟動選定的內核;

    手動在grub命令行接口啟動系統:

        grub> root (hd#,#)
        grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE 
        grub> initrd /initramfs-VERSION-RELEASE.img
        grub> boot

    為防止他人隨意進入grub對系統造成破壞,因此可以加入密碼來防止
    用grub-md5-crypt命令來生成加密的密碼

    [root@localhost ~]# grub-md5-crypt 
    Password: 
    Retype password: 
    $1$cIGK30$KFB088vQiBOJMCKsb48IU/

    技術分享圖片

    • 3、實現kickstart文件制作與光盤鏡像制作

      定制kickstart 文件
      首先:

      [root@localhost ~]#  yum install  system-config-kickstart

      檢查語法錯誤:

      [root@localhost ~]# ksvalidator anaconda-ks.cfg

      準備目錄,復制光盤內容到該目錄中:

      [root@localhost ~]# mkdir /tmp/cdrom
      [root@localhost ~]# mkdir /media/cdrom
      [root@localhost ~]# mount -r -t iso9660 /dev/cdrom /media/cdrom
      [root@localhost ~]# cp -r /media/cdrom/ /tmp/cdrom/
      [root@localhost ~]# cd /tmp/cdrom/
      [root@localhost cdrom]# cd cdrom/
      [root@localhost ~]# chmod u+w isolinux/*

      將ks.cfg文件拷貝到/tmp/cdrom中

      [root@localhost cdrom]# cp /root/ks.cfg /tmp/cdrom

      創建iso鏡像

      [root@localhost cdrom]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso   cdrom/

      查看iso 鏡像

      [root@localhost ~]# ls
      anaconda-ks.cfg  boot.iso  install.log  install.log.syslog  myboot

      利用xftp工具將boot.iso傳到自己物理機上
      技術分享圖片
      之後通過虛擬機自動引導安裝

    Linux 啟動流程及制作光盤鏡像