第七周學習總結–系統啟動流程

寫在前面

作為一個理工科的你,我相信你一定給自己或者給別人裝過windows操作系統,作為windows操作系統都圖形化了,因此我們可能很難去了解中間都發生了什么。比如使用U盤安裝的時候,網上一大堆某某某U盤制作系統工具,按照網上的教程,制作完成以后,就可以在要裝系統的電腦上點擊電源鍵狂按F12(不同的電腦可能不同)進入BIOS設置了,然后就等著使用了。作為學習另一個使用命令行的操作系統,我們有必要了解一下它的啟動工作流程。

細說流程

Linux系統的啟動流程主要分為以下幾個主要步驟,POST –> BootSequence(BIOS) –> BootLoader(MBR)–> Kernel(ramdisk、ramfs)–> rootfs(readonly)–> /sbin/init。

  • POST

按下主機電源鍵,主機會首先加載BIOS信息,主要負責檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常。如果硬件設備因為各自原因自檢沒有通過,則不會進行下一步啟動,如果硬件設備沒有問題,則轉交給下一步執行啟動。

  • BootSequence

按次序查找BIOS中各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備。

  • BootLoader

BootLoader稱為引導加載器,位于磁盤中的MBR中,每個磁盤都有一個MBR,MBR是磁盤上的第一個扇區又叫做主引導扇區,是主機開機后訪問磁盤時首先要讀取的扇區,MBR扇區共有512個字節,其中的446個字節即存放bootloader,64個字節存放分區表,剩余的2字節存放校驗信息。

在Linux中,BootLoader的具體實現是由grub程序實現的。grub分為三個階段,第一個階段存放于MBR中,第二個階段也稱為stage1.5階段,存放于MBR之后的扇區,主要為第三階段提供文件系統驅動。第三階段也稱為stage2階段,存放于一個基本的磁盤分區上,主要是提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM(內存)中特點空間中,解壓、展開,而后把整個系統控制權移交給內核,即完成把內核加載到內存空間中。

grub也有自己的配置文件/boot/grub/grub.conf,啟動菜單就是通過讀取此文件進行信息顯示,文件大體如下圖所示:

701

其中各配置參數:

  1. default=#: 設定默認啟動的菜單項順序;菜單項(title)編號從0開始;
  2. timeout=#:指定菜單項等待選項選擇的超時時長;
  3. splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
  4. hiddenmenu:隱藏菜單;
  5. title TITLE:定義菜單項“標題”, 可出現多次;
  6. root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub的“根”;
  7. kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核;
  8. initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;

此外還能對grub菜單及內核啟動進行認證處理,在上面配置文件中加入password [–md5] STRING項即可,加在title之前表示需要對編輯菜單進行認證,加在title之后表示對內核進行認證,需要認證以后才能啟動內核。

702

grub還有自己的命令行接口,啟動系統時,敲擊任意鍵進入grub命令行接口模式,在grub界面可以按照提示輸入e、b、c進行相應的編輯,在對應的title輸入c即可進入命令行模式,有如下常用選項:

  1. help:獲取幫助信息;
  2. find :文件查找,通常用于定位文件,find(hd#,#);
  3. root (hd#,#):把哪一個磁盤分區設置為根;
  4. kernel:設定本次啟動時用到的內核文件;
  5. initrd:設定為選定的內核提供額外文件的ramdisk;

所以也可以通過手動指定來啟動內核,在grub界面通過上述介紹的參數,依次輸入:

  1. root (hd#,#);
  2. kernel /vmlinuz-VERSION-RELEASE ?ro ?root=/dev/DEVICE;
  3. initrd /initramfs-VERSION-RELEASE.img;
  4. boot;

來通過讀取新指定的各參數啟動內核。

703

  • Kernel

在kernal階段,主要是通過前面步驟加載到的內核完成自身的初始化:

  1. 探測可識別到的所有硬件設備;
  2. 加載硬件驅動程序(有可能會借助于ramdisk加載驅動);
  3. 以只讀方式掛載根文件系統;
  4. 運行用戶空間的第一個應用程序:/sbin/init
  • rootfs

根切換,因為在內核加載階段,系統有可能會借助ramdisk提供的一個簡化版的根文件系統來提供驅動,完成后續步驟后ramdisk會加載真正的根文件系統,并把控制權移交給真正的根文件系統。

  • /sbin/init

內核被加載后,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittab文件,設定Linux的運行級別并依據此來進行后續的初始化工作。

寫在最后

今天的分享就到這里了,里面涉及到了Linux啟動的一些基本流程,還特別提到了grub的兩種實現方式,通過配置文件新增內核信息方式和grub命令行接口方式進行配置,如果我們熟知了Linux系統啟動每步驟都需要什么文件,完成什么內容以后,我覺得配置都是很輕松的事情。實在沒轍的話,不妨試試強大的搜索引擎,這也是學習的很好方法。

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91102

(0)
蟲草君蟲草君
上一篇 2018-01-13
下一篇 2018-01-14

相關推薦

  • 馬哥教育網絡班22期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。    [test2@localhost ~]$ who |cut -d " " -f1|sort -u   &nbsp…

    Linux干貨 2016-08-30
  • N28_第二周

    linux文件管理命令

    Linux干貨 2017-12-10
  • Linux文本處理工具grep,egrep

    簡介:     grep即(Global search REgular expression and Print out the line)全局的搜索正則表達式并且打印顯示出來。     通俗點講:根據用戶指定的文本模式(搜索條件)對目標文件進行逐行搜索,顯示能匹配到的行。 &n…

    Linux干貨 2015-05-11
  • N26第一周博客作業

    1.       計算機的組成及其功能 計算機由以下5部分組成: 控制器:控制器是計算機的中樞神經,功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各個部分工作及內存與外存的訪問等。 運算器:運算器功能主要是對數據進行各種算術和邏輯運算,即對數據進行加工處理?!?/p>

    Linux干貨 2016-12-28
  • bash腳本編程class3

    bash腳本編程class3—函數定義與數組使用相關     一.函數的使用以及數組的定義   我們通過學習知道,當編輯一個shell腳本的時候,可以在這個shell腳本中調用其他的shell腳本來實現特定的功能。在實際工作環境中,用很多shell實現的功能是我們常常使用到的,如果一次一次的調用這些shell腳本會顯得非常麻煩。…

    Linux干貨 2016-08-24
  • 入門——計算機基礎簡介

    一、計算機系統 計算機系統:由硬件(Hardware)系統和軟件(Software)系統倆大部分組成 二、計算機硬件 計算機(computer):是一種能接收和存儲信息,并按照存儲在其內部的程序對海量數據進行自動、高速的處理,然后把處理結果輸出的現代化電子設備。 計算機硬件組成部分 馮.諾依曼體系結構: 1946年數學家馮.諾依曼提出運算器、控制器、存儲器、…

    2018-03-27
欧美性久久久久