天天看點

Linux系統啟動詳解

注:本文配套視訊資源見 Linux 系統啟動詳解

Learn from the web and give it back, Let’s make the web a better place。

Linux系統啟動詳解

Linux系統啟動流程如下:

  1. 加載BIOS(Basic Input Output Systen) 資訊—–其更新方案是EFI(可擴充固件接口英文名Extensible Firmware Interface 的縮寫),BIOS中包含了CPU的相關資訊、裝置啟動順序資訊、硬碟資訊、記憶體資訊、時鐘資訊、PnP特性等等.在此之後,計算機心裡就有譜了,知道應該去讀取哪個硬體裝置了;
  2. 讀取MBR(Master Boot Record)—–硬碟上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512位元組,别看地方不大,可裡面卻存放了預啟動資訊、分區表資訊,系統找到BIOS所指定的硬碟的MBR後,就會将其複制到0×7c00位址所在的實體記憶體中.其實被複制到實體記憶體的内容就是Boot Loader,而具體到你的電腦,那就是lilo或者grub了;
  3. Boot Loader——就是在作業系統核心運作之前運作的一段小程式.通過這段小程式,我們可以初始化硬體裝置、建立記憶體空間的映射圖,進而将系統的軟硬體環境帶到一個合适的狀态,以便為最終調用作業系統核心做好一切準備。Boot Loader有若幹種,其中Grub、Lilo和spfdisk是常見的Loader—–系統讀取記憶體中的GRUB(是現在Linux使用的主流引導程式,其實可以用來引導現在幾乎所有的作業系統,其相關的檔案儲存在/boot/grub目錄中,/boot/grub/grub.conf是Grub配置檔案)配置資訊(一般為menu.lst或grub.lst),并依照此配置資訊來啟動不同的作業系統;
  4. 加載核心(Linux精簡的核心儲存在/boot/vmlinuz-2.6.32-279.el6.i686,而其他可能需要的驅動和功能則打包成initramfs子產品[即核心子產品]儲存成檔案/boot/initramfs-2.6.32-279.el6.i686img—早期版本使用initrd檔案,initramfs[initialized RAM file system]是initrd[initialized RAM disk]的替代優化版本;另外,可以用dmesg檢視本次啟動時核心的輸出資訊,其log資訊儲存在/var/log/demsg檔案裡)根據grub設定的核心映像所在路徑,系統讀取記憶體映像,并進行解壓縮操作.此時,螢幕一般會輸出“Uncompressing Linux”的提示.當解壓縮核心完成後,螢幕輸出“OK, booting the kernel”。系統将解壓後的核心放置在記憶體之中,并調用start_kernel()函數來啟動一系列的初始化函數并初始化各種裝置,完成Linux核心環境的建立.至此,Linux核心已經建立起來了,基于Linux的程式應該可以正常運作了;
  5. 運作第一個程式—–使用者層Init(是Linux系統中運作的第一個程序,放置在/etc/rc.d/rc.sysinit裡,負責對系統進行初始化、挂載檔案系統,并且根據運作級别相應啟動/etc/rc.d/rc*.d[代表相應的級别]目錄下的服務/etc/rc.d/rc.d[*代表相應的級别)—–核心被加載後,第一個運作的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案,并依據此檔案來進行初始化工作。其實/etc/inittab檔案最主要的作用就是設定Linux的運作等級,其設定形式是“:id:3:initdefault:”,這就表明Linux需要運作在等級3上.Linux的運作等級設定如下:

    [運作級别]:

    -0 關機;-1 單使用者模式;-2 不帶網絡的多使用者模式;-3 有網絡支援的多使用者模式;-4 未使用;-5 XII圖形化模式;-6 重新開機動;其預設的配置儲存在/etc/inittab裡,更多的配置在RedHat6後單獨分開在檔案/etc/init/下形成配置檔案)

    [擴充]:

    • runlevel可以顯示上一個和目前運作級别,如果沒有上一運作級别

      則用N代替,用init [0-6]切換到相應的運作級别;

    • Init 3 改目前運作級别為3即進入CLI模式
    • Init 5 改目前運作級别為5即進入圖形化模式,startx也可以
    • Dmesg 顯示本次核心啟動資訊

    單使用者模式下可恢複root密碼(在啟動時進入選擇界面按“e”編輯啟動菜單rc.sysinit的kernel,在其最後加上“1”或“single”後重新啟動,使其以單使用者模式不需要密碼直接root使用者登入,再使用passwd設定新密碼)

    單使用者模式下可恢複root密碼的漏洞解決方案:Grub加密功能—-在grub.conf的啟動配置中加入如下參數即可對Grub進行加密:password –md5 *[使用相應的加密算法生成的加密後密碼,指令為grub-md5-crypt],最好放在第一行

  6. init程序執行rc.sysinit—–在設定了運作等級後,Linux系統執行的第一個使用者層檔案就是/etc/rc.d/rc.sysinit腳本程式,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等.;
  7. 啟動核心子產品——具體是依據/etc/modules.conf檔案或/etc/modules.d目錄下的檔案來裝載核心子產品;
  8. 執行不同運作級别的腳本程式—–根據運作級别的不同,系統會運作rc0.d到rc6.d中的相應的腳本程式,來完成相應的初始化工作和啟動相應的服務.;
  9. 執行/etc/rc.d/rc.local——如果打開了此檔案,裡面有一句話,讀過之後,你就會對此指令的作用一目了然:

    This script will be executed after all the other init scripts.

    You can put your own initialization stuff in here if you don’t

    want to do the full Sys V style init stuff.

    rc.local就是在一切初始化工作後,Linux留給使用者進行個性化的地方.你可以把你想設定和啟動的東西放到這裡.;

  10. 執行/bin/login程式,進入登入狀态—–此時,系統已經進入到了等待使用者輸入username和password的時候了,你已經可以用自己的帳号登入系統了。

繼續閱讀