Note For Linux By Jes(14)-启动流程、模块管理与 Loader
Linux的啟動流程分析:
啟動流程一覽
加載BIOS 的硬件資訊與進行自我測試,并依據配置取得第一個可啟動的裝置;
讀取并運行第一個啟動裝置內MBR 的boot Loader (亦即是grub, spfdisk 等程序);
依據boot loader 的配置加載Kernel ,Kernel會開始偵測硬件與加載驅動程序;
在硬件驅動成功后,Kernel會主動呼叫init 程序,而init 會取得run-level 資訊;
init 運行/etc/rc.d/rc.sysinit 文件來準備軟件運行的作業環境(如網絡、時區等);
init 運行run-level 的各個服務之啟動(script 方式);
init 運行/etc/rc.d/rc.local 文件;
init 運行終端機模擬程序mingetty 來啟動login 程序,最后就等待使用者登陸啦;
BIOS, boot loader 與kernel 加載:
BIOS, 啟動自我測試與MBR
Boot Loader 的功能
-
提供菜單:使用者可以選擇不同的啟動項目,這也是多重啟動的重要功能!
-
加載核心文件:直接指向可啟動的程序區段來開始操作系統;
-
轉交其他loader:將啟動管理功能轉交給其他loader 負責。
加載核心偵測硬件與initrd 的功能
第一支程序init 及配置檔/etc/inittab 與runlevel:
Run level:運行等級有哪些
-
0 - halt (系統直接關機)
-
1 - single user mode(單人維護模式,用在系統出問題時的維護)
-
2 - Multi-user, without NFS(類似底下的runlevel 3,但無NFS 服務)
-
3 - Full multi-user mode(完整含有網絡功能的純文字模式)
-
4 - unused (系統保留功能)
-
5 - X11 (與runlevel 3 類似,但加載使用X Window)
-
6 - reboot (重新啟動)
/etc/inittab 的內容與語法
[配置項目]:[run level]:[init 的動作行為]:[命令項目]
init 的處理流程
使用/etc/rc.d/rc.sysinit 進行系統初始化
由於runlevel 是5 ,因此只進行『l5:5:wait:/etc/rc.d/rc5』,其他行則略過
配置好[ctrl]+[alt]+[del] 這組的組合鍵功能
配置不斷電系統的pf, pr 兩種機制;
啟動mingetty 的六個終端機(tty1 ~ tty6)
最終以/etc/X11/perfdm -nodaemon 啟動圖形介面啦!
init 處理系統初始化流程(/etc/rc.d/rc.sysinit):
取得網絡環境與主機類型:
讀取網絡配置檔/etc/sysconfig/network ,取得主機名稱與默認通訊閘(gateway) 等網絡環境。
測試與掛載內存裝置/proc 及U盤裝置 /sys:
除掛載內存裝置/proc 之外,還會主動偵測系統上是否具有usb 的裝置,若有則會主動加載 usb 的驅動程序,并且嘗試掛載usb 的文件系統。
決定是否啟動SELinux :
我們在第十七章談到的SELinux 在此時進行一些檢測,并且檢測是否需要幫所有的文件重新編寫標準的SELinux 類型(auto relabel)。
啟動系統的亂數產生器
亂數產生器可以幫助系統進行一些口令加密演算的功能,在此需要啟動兩次亂數產生器。
配置終端機(console) 字形:
配置顯示於啟動過程中的歡迎畫面(text banner);
配置系統時間(clock) 與時區配置:需讀入/etc/sysconfig/clock 配置值
周邊設備的偵測與Plug and Play (PnP) 參數的測試:
根據核心在啟動時偵測的結果(/proc/sys/kernel/modprobe ) 開始進行ide / scsi / 網絡/ 音效等周邊設備的偵測,以及利用以加載的核心模塊進行PnP 裝置的參數測試。
使用者自訂模塊的加載
使用者可以在/etc/sysconfig/modules/*.modules加入自訂的模塊,則此時會被加載到系統當中
加載核心的相關配置:
系統會主動去讀取/etc/sysctl.conf 這個文件的配置值,使核心功能成為我們想要的樣子。
配置主機名稱與初始化電源管理模塊(ACPI)
初始化軟件磁盤陣列:主要是透過/etc/mdadm.conf 來配置好的。
初始化LVM 的文件系統功能
以fsck 檢驗磁碟文件系統:會進行filesystem check
進行磁碟配額quota 的轉換(非必要):
重新以可讀寫模式掛載系統磁碟:
啟動quota 功能:所以我們不需要自訂quotaon 的動作
啟動系統虛擬亂數產生器(pseudo-random):
清除啟動過程當中的緩存文件:
將啟動相關資訊加載/var/log/dmesg 文件中。
啟動系統服務與相關啟動配置檔(/etc/rc.d/rc N & /etc/sysconfig)
使用者自訂啟動啟動程序(/etc/rc.d/rc.local)
根據/etc/inittab 之配置,加載終端機或X-Window 介面
啟動過程會用到的主要配置檔:/etc/modprobe.conf,/etc/sysconfig/*
Run level 的切換:init[0-6]
核心與核心模塊:
-
核心:/boot/vmlinuz 或/boot/vmlinuz-version;
-
核心解壓縮所需RAM Disk:/boot/initrd (/boot/initrd-version);
-
核心模塊:/lib/modules/version/kernel 或/lib/modules/$(uname -r)/kernel;
-
核心原始碼:/usr/src/linux 或/usr/src/kernels/ (要安裝才會有,默認不安裝)
核心模塊與相依性:
/lib/modules/$(uname -r)/kernel
lib/modules/$(uname -r)/modules.dep
depmod
核心模塊的觀察:
多少模塊:lsmod
-
模塊名稱(Module);
-
模塊的大小(size);
-
此模塊是否被其他模塊所使用(Used by)。
模塊的資訊:modinfo
核心模塊的加載與移除:
insmod 則完全由使用者自行加載一個完整檔名的模塊
rmmod 移除模塊
核心模塊的額外參數配置:/etc/modprobe.conf
Bootloader: Grub:
boot loader 的兩個stage:Stage1:運行boot loader 主程序,Stage2:主程序加載配置檔
grub 的配置檔/boot/grub/menu.lst 與菜單類型
grub 對磁碟的代號配置與Linux 不同,主要透過偵測的順序來給予配置。如(hd0) 及(hd0,0) 等。
menu.lst 內每個菜單與titile 有關,而直接指定核心啟動時,至少需要kernel 及initrd 兩個項目
menu.lst 內配置loader 控制權移交時,最重要者為chainloader +1 這個項目。
若想要重建initrd ,可使用mkinitrd 處理
重新安裝grub 到MBR 或boot sector 時,可以利用grub shell 來處理。
啟動過程的問題解決:
忘記root 口令的解決之道:
重新啟動!一定要重新啟動!怎么重開都沒關系;
在啟動進入grub 菜單后,(1)在你要進入的菜單上面點'e' 進入詳細配置;(2)將光棒移動到kernel 上方并點'e' 進入編輯畫面;(3)然后出現如下畫面來處理:
| grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet single |
重點就是那個特殊字體的咚咚啦!按下[enter] 再按下b 就能夠啟動進入單人維護模式了。
進入單人維護模式后,系統會以root 的權限直接給你一個shell ,此時你就能夠運行『passwd 』這個命令來重建root 的口令啦!然后直接『init 5 』就可以切換成為X 窗口介面羅!就是這么簡單。
init 配置檔錯誤:
grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash
BIOS 磁碟對應的問題(device.map)
因文件系統錯誤而無法啟動:/etc/fstab
利用chroot 切換到另一顆硬盤工作
總結
以上是生活随笔為你收集整理的Note For Linux By Jes(14)-启动流程、模块管理与 Loader的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普通高中计算机装备标准,福建省普通高中信
- 下一篇: linux搭建挂机宝教程,nokvm –